很多企业在部署站点间IPsec VPN或者远程接入SSL VPN的过程中,经常会遇到两端私网网段重叠的地址冲突问题,明明所有基础配置都按照标准流程走完,VPN隧道要么协商失败,要么协商成功后内网业务始终无法互通,这类场景下的连通性验证不能直接套用普通VPN的排查流程,需要针对性地设计校验步骤,避免把无关故障和地址冲突问题混淆,提升故障定位的效率。

运维人员正在完成VPN连通性验证前的前置配置排查工作
冲突场景下的验证前置配置前提
在启动正式的连通性验证之前,首先要确认两端VPN网关的基础配置已经排除了非冲突类的前置故障,所有需要走VPN隧道的私网网段,都已经被加入到两端的NAT排除规则中,不能让原本要加密转发的私网流量,被网关的公网NAT规则转换成公网地址直接转发,这是很多新手运维最容易踩的低级错误。
同时还要分别在两端内网的普通接入终端上,确认本地内网的基础连通性正常,终端到本地私网网关的访问没有丢包、延迟过高的问题,本地内网不存在ARP欺骗、三层环路这类独立故障,避免后续排查的时候把本地内网的问题误判成VPN私网地址冲突导致的连通性异常。
第一层:基础网段冲突预校验
正式排查的第一步,先导出两端VPN网关的感兴趣流配置清单,把本地需要纳入VPN加密的所有私网网段、对端需要解密放行的所有私网网段全部整理出来做交叉比对,不仅要排查完全重叠的网段,还要留意一端是大网段、另一端是大网段下的子段这种包含式冲突,这类半重叠场景很多时候不会直接触发配置报错,只会导致部分流量寻址异常。
除了业务终端的私网网段之外,还要把VPN网关自身的直连网段、管理网段也纳入比对范围,不少中小团队部署VPN的时候会忽略网关LAN侧接口的默认地址段,比如很多网关出厂默认LAN地址段是192.168.1.0/24,刚好和对端总部的业务服务器网段完全重合,这种网关自身网段的冲突,比终端网段冲突更隐蔽。
第二层:隧道建立阶段的连通性验证
完成网段预校验之后,先不要直接用内网终端做跨端ping测试,优先登录VPN网关的后台查看隧道协商状态,如果隧道本身都没有完成第二阶段的协商,那连通性异常的根源大概率不是私网地址冲突,而是感兴趣流不匹配、预共享密钥错误、公网UDP端口被运营商拦截这类其他常见VPN故障。
如果隧道显示协商成功,但加密流量计数始终没有增长,火烧云VPN就可以尝试从VPN网关自身的系统后台,指定源地址为网关内网侧的接口地址,去ping对端VPN网关的内网网关地址,如果测试流量始终没有被加密转发,就要检查两端的感兴趣流是否配置颠倒,本地的加密规则写了对端的私网网段、对端的加密规则写了本地的私网网段,这种配置错误经常会和地址冲突问题叠加出现。
第三层:私网穿越阶段的连通性验证
确认VPN隧道已经可以正常转发加密流量之后,再启动两端内网终端的双向连通性测试,测试的时候尽量采用指定源地址的长ping模式,同时在VPN网关的流日志中实时查看对应流量的源目地址识别记录,确认流量确实是按照预期进入了VPN加密通道。
如果测试过程中出现单方向通、单方向不通,或者部分IP可以互通、部分IP完全无法访问的情况,就要重点排查为了解决冲突配置的私网地址映射规则是否生效,很多时候映射后的过渡网段没有提前做全网路由发布,或者映射网段和本地内网的其他现有网段出现了二次重叠,就会导致部分地址的转发路径混乱。
常见验证操作的误区规避
不少运维遇到VPN私网地址冲突场景下连通性异常的时候,第一反应就是新增静态路由或者修改加密策略,反而忽略了终端侧的路由优先级问题,火烧云比如用户终端本地的虚拟网卡、虚拟机虚拟交换机占用的网段刚好和VPN对端的私网网段重叠,终端会直接把对应流量往本地虚拟接口转发,根本不会把流量送到VPN网关,这类终端侧的冲突在远程接入SSL VPN场景中出现概率极高。
还有部分运维习惯用公网的连通性测试工具来验证VPN私网的连通状态,这类测试完全无法反映私网地址冲突带来的转发异常,只有指定私网源目地址的定向测试,配合网关侧的流量日志逐包核对,才能准确定位到真实的冲突点,避免无效的配置调整。
火烧云加速器 
