把专用 IPv6 加进 OpenVPN 实验环境,一次只看一个检查点
外层传输继续留在 IPv4,只把内层规划往外扩。五个检查点:前缀、辅助指令、路由推送、转发,以及一次客户端侧的测试。
你已经有一个走 IPv4 接入、能到服务器后面那台专用 IPv4 工作负载的客户端。目标是走同一条隧道到达一台专用 IPv6 工作负载,而完全不动外层传输。这个顺序很关键:外层路径保持 IPv4,只有内层地址规划、客户端路由和服务器到 LAN 的回程路径会变。五个检查点,每一个都有具体的东西要在往下走之前先看一眼。
检查点一:那条已经在工作的连接
在添加任何东西之前,先连上客户端并确认 IPv4 路径。一条能用的隧道给你一条基线,把新的 IPv6 错误和旧的连通性问题分开。它同时告诉你,自己到底在改哪一台服务器实例。
把已经在依赖的地址池、拓扑和被推送的路由记下来。IPv6 的工作是在这套配置上做扩展,而不是把它换掉。
检查点二:选定内层前缀
给站点挑一个 ULA /48,再从里面切出两个 /64:一个给隧道客户端,一个给承载 IPv6 工作负载的 LAN 网段。生成 40 位的全局 ID,而不是照抄一个示例前缀,然后把这两个子网逐一对照站点已经路由的每个网段:
Outer transport: IPv4 OpenVPN UDP
IPv4 pool: 10.90.0.0/24
IPv6 VPN pool: fd73:93bc:b6e9:77::/64
IPv6 LAN: fd73:93bc:b6e9:60::/64
Server LAN IPv6: fd73:93bc:b6e9:60::1两个独立的 /64 能让客户端地址池不会被从 LAN 网段里切走,这一点在稍后写回程路由时才有意义。上面的取值是一个完整的示例,不是可以反复沿用的前缀。
检查点三:加上辅助指令和路由推送
在追加之前先读一遍服务器当前配置。同一条指令的第二份副本不会和第一份合并,而由此报出的错误点名的是这条指令,不是 IPv6。在已有 IPv4 辅助指令的前提下,两行就能把它扩出去。两行各回答一个不同的问题:
server-ipv6 fd73:93bc:b6e9:77::/64
push "route-ipv6 fd73:93bc:b6e9:60::/64"第一行是便利性的辅助指令,负责配置接口和客户端地址池。第二行指明客户端应当到达的那个 LAN 目的网段。给客户端一个 IPv6 地址,并不会告诉它服务器后面还有哪些网络,所以两行都需要。
这条辅助指令不能和静态 IPv6 地址池共存,也不能和 nopool 共存。如果部署本来就打算静态分配地址,就保留那套策略,明确设计出对应的 IPv6 方案,而不是为了迁就示例把策略删掉。
检查点四:转发和回程路由
在服务器上打开 IPv6 转发,要通过系统自己的配置管理者,而不是一句你迟早会忘掉的运行时临时写入。运行时写法适合做快速验证,持久配置应该落在发行版网络管理者会读取的 drop-in 文件里:
sysctl -w net.ipv6.conf.all.forwarding=1转发改变的不只是主机转发数据包,还改变了主机的 IPv6 行为。一个以客户端身份接受路由通告的主机,一旦开始转发,就会以同样的方式停止接受。所以 IPv6 上行依赖 RA 的机器,需要为那条上行链路准备一份明确的方案。
接着给 LAN 一条回到隧道路由池的路由。工作负载的 IPv6 网关是 LAN 的路由器,不是 VPN 服务器,所以路由要落在那个路由器上,并指向服务器的 LAN 地址:
ip -6 route add fd73:93bc:b6e9:77::/64 via fd73:93bc:b6e9:60::1保留链路需要的 ICMPv6 类型,包括路径 MTU 反馈。IPv4 的防火墙规则并不等于 IPv6 规则,一刀切地封掉 IPv6 会以看起来像路由故障的方式打断邻居发现。
检查点五:读客户端,然后再测
重新连上客户端,读它真正拿到的地址,而不是从服务器的辅助地址去推断。接口列表会把两个协议族显示在同一块设备上:
ip -6 addr show tun0
ip -6 route get fd73:93bc:b6e9:60::20一条选中隧道的路由能证明客户端知道把包发到哪里。它不能证明服务器在转发、LAN 路由器上有回程路由,也不能证明应用被允许应答。
分别对每个协议族测应用本身,然后在重连之后和主机重启之后再重复一遍。只在重启之前活着的路由或 sysctl 是一次测试,不是一份设计。
只有当 IPv6 路径端到端都能应答时,才发布 AAAA 记录。通过 IPv4 发出的 DNS 查询同样可以返回 IPv6 地址,所以名字能解析并不等于有人在监听。RFC 4193 的 ULA 指南 讲的是如何生成那个让这些前缀真正属于你、而不是抄来的全局 ID。