【IPSec】使用与运维:netns 实测与故障模式
内容提要
本文通过双netns环境实测Linux xfrm的IPsec ESP功能,验证了ping成功且SA计数匹配;删除out policy后丢包,恢复后通信正常,证明policy与state需成对配置。提供了swanctl、ip xfrm等命令台账,分析了无法建立、单向通等故障模式,并指出WireGuard适用场景及实验边界。
延伸解读
三张表一致性是排障核心
文章强调IPsec故障多源于IKE连接视图、内核策略(policy)和状态(state)三张表不一致。实测中删除out policy后立即丢包,恢复后通信正常,说明policy与state必须成对配置。运维时若遇到“有SA但不通”,应优先检查policy方向是否缺失,而非盲目重启服务。
netns实测的价值与局限
通过双netns环境直接操作xfrm对象,绕开IKE守护进程,能快速验证数据面是否正常。但同机netns的RTT仅0.07ms,不能代表公网延迟或吞吐;且实验密钥写死在脚本中,仅限实验室使用。生产环境需结合strongSwan的swanctl视图综合判断。
WireGuard与IPsec的故障面差异
文章指出WireGuard故障常在AllowedIPs与路由表(FIB)脱节,而IPsec多一张IKE身份/证书表,三张表任一脱节都可能导致问题。选型时若追求极简审计面、固定算法、无证书流程,可优先评估WireGuard;需要L2扩展时IPsec alone并不适用。
Q&A
如何验证Linux xfrm的IPsec ESP功能是否正常工作?
可以通过创建两个netns,配置veth对,并手动安装ESP的state和policy,然后使用ping命令测试连通性。如果ping成功且`ip -s xfrm state`中的包计数与ping次数一致,则说明ESP功能正常。
删除out policy后为什么会导致IPsec通信中断?
删除out policy后,本端无法根据模板封装ESP报文,或者走明文会被对端策略拒绝,导致通信中断。恢复out policy后通信立即恢复,说明policy和state必须成对配置才能正常工作。
有哪些常用的IPsec排障命令?
常用命令包括:`swanctl --list-sas`、`--list-conns`、`--list-pols`查看IKE/Child视图;`ip xfrm state`、`ip xfrm policy`、`ip -s xfrm state`查看内核SAD/SPD;`tcpdump -n esp or udp port 500 or udp port 4500`抓包;`swanctl --initiate --child`触发协商;`ip xfrm state flush`和`policy flush`清空实验残留。
IPsec无法建立连接(ESTABLISHED失败)时应该检查哪些方面?
应检查proposal交集、PSK/证书、时钟同步、防火墙是否放行UDP 500和4500端口。
IPsec单向通信可能是什么原因导致的?
单向通信可能由单侧policy/state缺失、anti-replay窗口问题或非对称NAT导致。
IPsec与WireGuard在运维上有何不同?
WireGuard的故障多集中在AllowedIPs与FIB(路由表)的脱节;而IPsec多了一张IKE身份/证书表,需要同时关注IKE连接视图、策略和状态三张表的一致性。
哪些场景下不建议使用IPsec?
需要极简审计面、固定算法、无证书流程时,优先考虑WireGuard;需要L2扩展时,IPsec alone不是以太网桥,常需与其他封装组合,复杂度较高。