很多企业网络运维人员在部署跨站点VPN的时候,经常会遇到VPN隧道明明显示UP但是业务流量始终不通的问题,这类故障绝大多数都和VPN与NAT会话的规则冲突有关,很多新手排查的时候容易跳步,要么反复重配VPN策略要么乱改NAT规则,反而把问题搞得更复杂,本文梳理的故障定位思路完全基于通用网络设备的标准逻辑,不需要依赖特定厂商的专属工具,就能快速缩小故障范围。
先明确VPN与NAT会话共存的基础配置前提
很多运维人员排查故障第一步就去抓包,反而忽略了最基础的配置合规性校验,首先要确认的第一条规则是,VPN感兴趣流对应的私网网段,必须在NAT转换的排除名单里,也就是通常说的NAT豁免规则。
这里的常见误区是不少人配置NAT豁免的时候只写了源网段,没有匹配VPN隧道两端的双向流量,比如总部到分支的流量放过了,分支回总部的响应流量还是被做了地址转换,直接导致对端收到的源地址不是预期的私网地址,VPN解密之后根本找不到对应路由直接丢包。
第二个配置前提是NAT会话表项的老化时间,不能比VPN隧道的保活间隔时间短,部分网络设备默认的NAT会话老化时长设置过短,VPN隧道的后续保活报文还没发出来,之前建立的反向会话已经被设备释放,新的流量进来找不到对应会话就会触发错误的转换逻辑。

运维人员逐一校验VPN与NAT会话的基础配置合规性,快速缩小故障范围
第一层定位:VPN隧道建立阶段的NAT关联故障排查
很多人误以为隧道建立阶段和NAT会话没关系,实际上如果VPN网关本身处于前端NAT设备之后,或者两端VPN网关之间的公网路径上存在运营商级NAT,IKE协商的报文很容易被NAT会话的异常规则拦截。
这个阶段的排查不需要先看私网流量,直接在VPN网关的公网接口侧查看IKE协商报文的收发统计,如果发现本端发出去的IKE请求没有任何对端回应,先去检查前端NAT设备上有没有开放IKE协议对应的端口映射,同时确认NAT设备没有开启针对IKE报文的ALG限制。
这里要注意一个容易被忽略的场景,如果两端VPN网关都在私网内,都经过前端设备做端口映射暴露公网,那么协商过程中NAT会话的源端口随机变化,很容易导致对端的VPN策略匹配失败,番茄这时候可以先在两端设备上查看IKE SA的建立状态,如果第一阶段SA都无法正常生成,优先排查路径上的NAT会话限制,不要反复修改VPN的加密套件参数。
第二层定位:隧道UP后业务不通的NAT会话校验方法
确认VPN隧道的一阶段二阶段SA都已经正常生成之后,网络加速器就进入最核心的VPN与NAT会话匹配度校验环节,这时候不要直接去业务服务器上抓包,先在VPN网关上开启针对感兴趣流的流量统计,发送测试流量之后查看流量是否真的被送入VPN隧道转发。
如果统计结果显示私网流量已经被送入隧道,但是对端完全没有收到对应解密后的报文,这时候要检查VPN网关的NAT会话表,看有没有对应感兴趣流的条目被错误做了公网地址转换,正常来说匹配VPN感兴趣流的流量应该直接绕过NAT,不会生成普通的NAT会话条目。
很多运维人员在这里踩的坑是NAT豁免规则的匹配顺序比VPN感兴趣流的匹配顺序靠后,设备先匹配到了通用的全量地址转换规则,把本来要走VPN的流量做了公网地址转换,流量直接从公网接口发出去根本没有进隧道,这种故障从VPN的状态上完全看不出异常,只有查NAT会话表才能找到对应线索。
常见边缘场景的故障定位避坑提示
部分场景下VPN隧道可以正常传输单包的ping报文,但是大流量业务一跑就断,这类故障很多都和NAT会话的并发数限制有关,前端NAT设备的会话数阈值如果配置过低,VPN隧道内的多连接业务流量占满会话表之后,后续的新连接会被直接丢弃。
另外还要注意重叠网段的特殊场景,如果VPN两端的私网网段完全相同,部署了NAT地址转换做网段映射之后,必须同时在两端的NAT设备上保证映射后的地址段完全纳入VPN感兴趣流范围,不能只修改单边的转换规则,否则双向流量的会话匹配会完全错乱。
整个故障定位的过程中,不要同时修改VPN和NAT的多条规则,每调整一个参数就做一次测试验证,避免多个变量同时变化之后根本找不到真正的故障点,按照从底层配置到隧道状态再到业务流量的顺序逐步排查,绝大多数VPN与NAT会话相关的故障都可以在短时间内定位解决。
番茄VPN 


