随着IPv6网络的全面普及,不少企业和个人用户在部署VPN隧道时,陆续遇到各类IPv6路由相关的连通故障,很多故障表现和传统IPv4 VPN的问题差异较大,没有统一的排查参考很容易在配置里反复绕弯路。本文汇总了实际运维场景中最常见的VPN IPv6路由异常表现,结合通用网络设备的配置逻辑给出可落地的排查步骤,老王帮用户快速定位路由故障点。
首类异常:VPN隧道内IPv6网段完全不通
这类异常的典型场景是企业分支和总部的IPsec VPN隧道运行正常,IPv4私网资源可以正常互访,但总部分配的IPv6网段下的服务器、存储设备完全无法连通,不少运维人员第一时间会去检查隧道加密规则,却忽略了设备本身的IPv6转发开关配置。目前主流的安全网关、VPN服务器默认不会开启IPv6单播转发功能,哪怕后续配置了IPv6相关的路由规则,底层转发权限没开的话所有IPv6流量都会被直接丢弃。

运维人员正在机房调试VPN网关,排查IPv6路由连通异常问题。
排查这类异常的第一步,先在VPN网关上用直连的内网设备测试同网段IPv6地址的互访,确认网关本身的IPv6转发功能已经正常开启,再检查VPN的感兴趣流配置,确认加密域的规则同时覆盖了本端和对端的IPv6私网网段,不少用户只写了本端IPv6段到对端的规则,漏掉了反向的流量匹配条目,导致回包无法进入隧道加密。配置完成后可以在客户端执行traceroute6命令跟踪目标IPv6地址的路径,看第一跳是不是指向VPN网关的内网IPv6地址,如果流量直接走向本地公网出口,就说明本地路由表的IPv6指向规则没有生效。
第二类异常:IPv6路由选路冲突导致流量绕行公网
这类异常是普通用户遇到概率最高的场景,很多用户的本地宽带运营商已经分配了原生公网IPv6前缀,终端物理网卡默认生成了一条公网IPv6默认路由,连接VPN之后客户端又自动推送了一条IPv6默认路由,系统路由表中两条路由优先级接近的时候,IPv6流量会随机选择出口,经常出现明明已经连上VPN,IPv6流量却直接从本地运营商链路漏出的情况。
排查的时候可以在Windows终端执行netsh interface ipv6 show route命令,在macOS或者Linux终端执行netstat -rn -f inet6命令,查看VPN虚拟网卡对应的IPv6路由优先级,梯子要是优先级比物理网卡的公网IPv6路由更低,系统就会优先选择本地链路转发IPv6流量,完全绕过VPN隧道。
这类故障的常见误区是很多用户会直接手动删除本地物理网卡的IPv6默认路由,这种操作会导致断开VPN之后整个终端的IPv6网络完全失效,正确的处理方式是调整VPN服务端的路由推送策略,不要给客户端下发全量的默认IPv6路由,只把需要走隧道的指定IPv6网段路由推送给客户端,从根源上避免和本地运营商的IPv6前缀路由产生冲突。
第三类异常:多层VPN嵌套场景下IPv6路由跳数超限丢包
这类异常多出现于多层VPN叠加的使用场景,比如用户先在家用路由器上配置了OpenVPN隧道,终端再通过客户端连接企业的远程办公VPN,IPv6报文的默认跳数限制本身低于IPv4报文,经过两层甚至三层VPN封装之后,跳数会快速耗尽,报文还没到达目标地址就被中间设备直接丢弃。
排查这类问题可以用mtr6工具持续跟踪IPv6报文的传输路径,观察最后一个可达节点的跳数是不是远小于目标地址的实际跳数,如果报文在VPN隧道的中间节点就被丢弃,就可以确认是跳数阈值的问题,处理方式是在VPN网关的隧道接口上调整IPv6报文的Hop Limit默认值,同时关闭隧道接口的ICMPv6跳数超限拦截规则,让错误提示报文可以正常回传给源端,方便后续的路由路径调试。
异常排查后的通用验证注意事项
很多运维人员调整完路由配置之后,只会测试IPv4的连通性就结束排查,忽略了IPv6专属协议的校验,不少老旧VPN设备的安全策略默认会拦截所有ICMPv6报文,导致traceroute6这类路由跟踪工具完全无法返回有效结果,没法定位具体的路由断点,排查时需要先在隧道的安全策略里放通ICMPv6相关的协议规则,才能拿到准确的路径反馈。
如果确认两端VPN的本地配置都没有问题,但封装后的IPv6加密流量还是无法在公网传输,可以在VPN两端的公网接口开启端口镜像抓包,确认封装后的IPv6报文已经正常从本端网关发出,老王如果报文出了网关之后对端完全收不到,就需要联系对应的公网运营商确认链路的协议放行规则,不要反复修改本地配置浪费排查时间。


