IPSec VPN 能连上却不通?从协商到策略的逐层排查实战

很多工程师遇到 IPSec VPN 时都有这样的困惑:隧道状态显示『已建立』,可业务系统就是 ping 不通、连不上。问题往往不在加密算法本身,而在感兴趣流、NAT 穿越、路由回包或 MTU 分片。本文按分层思路带你逐一排查,定位真正断点。

一、确认阶段一与阶段二是否真的协商成功

不要只看界面上的『连接』字样,要用命令行看真实状态。

  1. 在路由器或防火墙执行 show crypto isakmp sa(或 ipsec sa),状态应为 QM_IDLE 而非 MM_xxxx,后者说明阶段一卡在野蛮模式。
  2. 执行 show crypto ipsec sa,确认入向/出向 SPI 已生成,且 encap/decap 计数在增长。若计数不增长,说明流量没命中策略。
  3. 查看系统日志里是否有 NO_PROPOSAL_CHOSENINVALID_ID_INFORMATION,这类报错几乎都指向两端策略不匹配。

二、检查感兴趣流是否对称

两端 ACL(或 traffic selector)必须互为镜像,且掩码一致。

  1. 核对本地子网与对端子网是否写反,常见错误是把源和目的对称写成了完全相等。
  2. 确认协议与端口是否一致:一端写 ip 任意,另一端写 tcp/443,这种不对称会让协商直接失败。
  3. 若使用 VTI 或路由型隧道,确认已用 ip route 把流量引到 tunnel 接口,而不是依赖 ACL 触发。

三、排查 NAT 穿越与 NAT-T

  1. 若 VPN 设备背后还有一层 NAT(如光猫),务必开启 NAT-T(UDP 4500),否则 ESP 报文会被上层 NAT 丢弃。
  2. 检查中间防火墙是否放通 UDP 500 与 UDP 4500,很多企业只开 500 导致能协商第一阶段却建不起第二阶段。
  3. 确认两端 NAT 探测一致,一端开一端关会造成 端口浮动不一致

四、确认路由与回包路径

  1. 在服务器侧用 tracert / traceroute 确认回包走的是 VPN 隧道而非默认网关。
  2. 检查对端是否有到达你方子网的回指路由,缺回程路由是『能连不通』的头号原因。
  3. 若本地有多出口,确认策略路由把 VPN 流量固定到正确出接口。

五、MTU 与分片问题

  1. IPSec 封装会增加 50–80 字节开销,把接口 MTU 降到 1400 并设 tcp adjust-mss 1360 试试。
  2. ping -f -l 1400 对端IP 测不分片最大包,逐步减小定位分片丢弃点。

技术总结:IPSec『能连不通』八成出在策略不对称、缺回程路由或 NAT-T 没开。先做 show 看 SPI 计数,再核对感兴趣流与路由,最后调 MTU,基本都能定位。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注