运行态怎么查
strongSwan 排错的核心是分清「配置加载了什么」与「运行时实际建立了什么」,这两者不一致是很多问题的来源。swanctl 的查看命令按这个区分组织:list-conns 展示从配置文件解析出来的连接定义,如果这项缺失或内容不符,说明配置根本没被正确加载;list-sas 展示实际运行的安全联盟,包括已建立的子 SA、流量计数与重协商时间,这项缺失说明协商没有成功;stats 给出全局计数,配合日志能判断是否存在被丢弃的报文。日志方面按服务过滤查看协商事件,能还原完整的握手时间线。
基本信息
| 配置视图 | swanctl --list-conns 查看解析结果 |
|---|---|
| 运行视图 | swanctl --list-sas 查看已建立的 SA |
| 全局计数 | swanctl --stats 查看统计信息 |
| 日志 | journalctl -u strongswan 或查看 charon 日志 |
| 旧版命令 | ipsec statusall(对应旧配置体系) |
| 过滤技巧 | 按连接名并配合时间范围筛选日志 |
典型使用场景
- 隧道不通:先确认配置是否被加载,再确认 SA 是否建立
- 子 SA 缺失:连接存在但没有 children,说明流量选择符或提议不匹配
- 排查重协商:观察 SA 的剩余时间与重建记录
- 确认流量计数:判断业务流量是否真的走了隧道
- 升级或重启后核对:确认服务恢复后 SA 是否自动重建
常用命令
常用命令
# 配置解析结果
swanctl --list-conns
# 运行态 SA 与流量
swanctl --list-sas
# 更细的原始输出,便于脚本处理
swanctl --list-sas --raw
# 全局统计
swanctl --stats
# 按时间范围过滤日志
journalctl -u strongswan --since '10 min ago'
# 旧版命令对照
ipsec statusall输出判读
| 观察结果 | 含义 | 下一步 |
|---|---|---|
| list-conns 无内容 | 配置未加载或路径错误 | 检查配置文件与加载命令 |
| 有 conns 无 sas | 协商失败 | 查看日志中的提议与认证错误 |
| 有 sas 无子 SA | 阶段二未成功 | 核对流量选择符与 ESP 提议 |
| 子 SA 计数不增长 | 流量未匹配隧道 | 检查路由与选择符范围 |
| SA 频繁重建 | 重协商或 DPD 触发 | 查看日志时间线 |
swanctl 与旧版 ipsec 命令查看的是不同体系的状态:迁移过程中用错命令会看到「什么都没有」,先确认使用哪套配置。
事件时间线比单点状态更有价值:把日志与业务故障时间点对齐,能快速区分是协商失败还是流量被丢弃。