现在不少企业办公网络、家用宽带都已经全面部署IPv6地址段,很多用户在配置VPN远程接入的时候,经常遇到IPv6网站打不开、内网IPv6资源访问失败的问题,本质上大多是VPN IPv6路由规则配置出错导致的。本文会用普通家用路由器、企业防火墙这类常见设备的实际配置场景,把VPN IPv6路由的核心概念拆解清楚,帮你快速定位配置故障,理清路由生效的边界。
VPN IPv6路由的基础核心概念
很多人之前熟悉的VPN IPv4路由,小牛是把IPv4网段的访问请求导向VPN虚拟网卡,而VPN IPv6路由:概念解释的核心逻辑,就是针对IPv6地址前缀的转发规则,明确设备收到IPv6数据包之后,是走本地物理网卡的公网链路,还是走VPN建立的加密隧道传输。

直观呈现VPN IPv6路由的分流转发逻辑,辅助理解配置规则生效边界
举个最常见的场景,你家里的宽带运营商已经分配了240e开头的公网IPv6前缀,你用OpenVPN客户端连到公司的远程接入服务器,如果没有配置对应的IPv6路由规则,你访问公司内网的IPv6服务器地址的时候,数据包会直接从家里的宽带网关发出去,根本走不到VPN隧道,自然就连接失败。
不同场景下的配置前提要求
首先是个人用户用普通VPN客户端的场景,你首先要确认本地的操作系统已经开启了IPv6协议栈,Windows系统可以在网卡属性里看到IPv6选项是否勾选,macOS和Linux默认都是开启的,要是本地直接禁用了IPv6,后续配置再多路由规则也不会生效。
如果是企业端用防火墙配置站点到站点VPN的场景,两端的VPN网关都必须支持IPv6协议的隧道封装,不能一端只开IPv4的VPN功能,另一端强行加IPv6路由,这种情况IPv6的数据包根本没法被封装进VPN隧道传输。
很多人容易忽略的一个前提是,VPN隧道本身的底层传输链路,既可以跑在IPv4公网上,也可以跑在IPv6公网上,这个和隧道内部要转发的IPv6业务流量是两个完全独立的概念,不要搞混。哪怕你本地只有IPv4公网接入,只要VPN网关支持,照样可以在隧道里转发IPv6的业务流量。
路由生效状态的常规检查步骤
配置完VPN IPv6路由之后,你不需要用复杂的抓包工具,先在本地操作系统的命令行里执行ipv6 route show(Linux/macOS)或者route print -6(Windows),就能看到所有当前生效的IPv6路由表项,你配置的目标IPv6前缀对应的下一跳地址,应该指向VPN虚拟网卡的接口地址。
接下来可以用traceroute6(或者Windows系统下的tracert -6)命令追踪访问目标IPv6地址的路径,看第一个跳点是不是VPN虚拟网卡的网关地址,如果第一个跳点是你本地宽带的IPv6网关,就说明路由规则没有正确下发,梯子IPv6流量根本没进VPN隧道。
还有一个容易验证的点,如果你配置的是全局走VPN的IPv6路由,梯子访问支持IPv6的公网IP检测站点,查看拿到的公网IPv6地址是不是VPN出口的地址,而不是你本地宽带运营商分配的IPv6地址,就能快速确认路由是否生效。
常见的配置误区说明
第一个常见误区是很多用户以为只要VPN本身支持IPv4,就自动支持IPv6路由转发,实际上绝大多数VPN服务端和客户端都需要单独开启IPv6的转发开关,默认是关闭状态的,就算你手动加了路由规则,流量也会被VPN的虚拟网卡直接丢弃。
第二个误区是把IPv6的路由前缀配置成IPv4的子网掩码写法,IPv6没有子网掩码的概念,都是用前缀长度来标识网段范围,比如你要把整个内网的IPv6网段都导向VPN,要写正确的前缀格式,不能套用IPv4的点分十进制掩码格式,系统根本识别不了。
最后还要注意隐私边界的问题,配置VPN IPv6路由的时候,不要随意把默认IPv6路由指向VPN隧道,除非你确认VPN服务端可以正常处理所有IPv6流量,不然很容易出现部分IPv6网站访问卡顿、直接超时的问题,也不要默认所有走VPN隧道的IPv6流量都会被加密转发,部分配置错误的场景下IPv6流量会直接泄露到本地公网,出现IP地址泄露的问题。
小牛加速器 
