在跨公网部署站点到站点VPN或者远程访问VPN的场景中,大量连通性故障都和NAT会话的异常状态直接相关,白鲸很多运维人员排查时经常跳开基础检查步骤直接定位深层配置,反而浪费大量时间。这份VPN与NAT会话连通性检测的实用指南,全部采用无需专业付费工具的基础检查方法,覆盖从配置前提到故障定位的全流程,帮使用者避开常见的排查误区,快速定位大部分常规连通性问题。
检查前的基础配置前提确认
正式启动VPN与NAT会话基础检查方法之前,首先要确认两端的NAT网关都没有默认拦截VPN协议的全局规则,很多小型企业网关或者家用级路由默认开启的应用层网关(ALG)功能,经常会无差别篡改VPN协商报文的封装格式,网络加速器直接导致后续所有连通性测试都得不到有效结果,这一步不需要做复杂探测,登录网关后台查看相关开关状态即可。
接下来要核对两端VPN网关的端口映射、公网地址绑定规则没有冲突,比如IPsec VPN常用的UDP 500、4500端口,OpenVPN常用的自定义服务端口,如果本地NAT网关的远程管理、网络加速器其他公网服务刚好占用了对应端口,后续所有连通性检查的结果都不具备参考价值,必须先把这类端口占用问题排除再往下走。
最后还要临时关闭两端终端、网关设备上之前设置的临时测试防火墙规则,不少运维人员之前做安全测试时开了针对性的拦截规则,测试结束后忘记恢复,排查VPN连通性时反复在NAT和VPN配置里找问题,白白消耗大量时间,这一步不需要改动核心业务配置,只是排除人为设置的临时干扰项。

运维人员正在开展VPN与NAT连通性的前置基础排查工作
第一层:NAT会话基础存活性检查
这一步是VPN与NAT会话基础检查方法里最容易上手的环节,白鲸不需要登录VPN设备后台,先在两端内网的普通终端上用常规的ping工具测试对端VPN网关公网地址的三层连通性,先确认公网层面的基础网络是通的,不要上来就直接排查VPN协商相关的深层配置。
三层连通性确认正常之后,再用telnet或者nc这类轻量工具测试VPN协商服务的对应端口可达性,比如IPsec的UDP 500端口、OpenVPN配置的自定义TCP/UDP服务端口,如果端口探测直接返回拒绝,说明NAT层面的转发会话压根没有正常建立,问题根源出在NAT端口映射、路由转发环节,和VPN本身的加密协商配置没有关系。
这一步的预期结果是端口探测返回可达状态,如果探测结果不可达,只能说明当前测试路径上存在流量拦截,不能直接判定是对端VPN设备没有开启对应服务,需要换不同的网络位置做交叉探测,避免把运营商层面的端口拦截误判成本地设备的配置故障。
第二层:VPN协商阶段的NAT穿越状态校验
做完基础NAT连通性检查之后,就可以进入VPN协商阶段的会话状态校验,首先登录本地VPN网关的管理后台,查看第一阶段协商的会话条目,如果会话一直停留在发起状态没有收到对端的任何回应,大概率是路径上某台中间NAT设备没有正确放行ESP封装的VPN报文。
很多运维人员在这里很容易踩误区,以为只要VPN配置里开启了NAT穿越(NAT-T)功能就一定能正常工作,实际上如果路径上经过的多层NAT设备没有支持NAT穿越的相关特性,就算两端VPN的配置完全正确,加密协商报文也会被中途丢弃,会话根本没法正常建立。
如果VPN第一阶段协商已经顺利完成,但第二阶段的加密内网流量没法正常传输,就要查看VPN网关上的NAT会话表,确认对应VPN隧道的会话条目有持续的流量刷新,如果会话条目很快就从表项中消失,说明中间NAT设备的会话老化超时时间设置得太短,没有匹配VPN长连接的运行需求。
常见排查误区规避
不少运维人员执行VPN与NAT会话基础检查方法的时候,一上来就开启Wireshark抓全量报文,抓出来大量日志之后也找不到问题根源,实际上绝大多数常规连通性故障,在前面两层的基础检查环节就可以定位,完全没必要一开始就动用复杂的报文分析工具,反而增加排查的复杂度。
还有很多人发现VPN隧道建立之后两端内网没法互访,直接就判定是NAT会话的问题,实际上很多时候故障根源是VPN两端配置的内网加密网段重叠、静态路由指向错误,这类问题和NAT会话本身没有关联,不要把所有跨VPN的连通性问题都归因为NAT配置异常。
白鲸官网 


