我有一个具有公共 IPv4 地址的 ubuntu 服务器,以及一个位于 ISP 级 NAT 后面的路由器。
因此,为了让我的本地网络获得 IPv6,我设置了一个 OpenVPN IP 隧道。隧道内的 IPv4 流量没有问题,并且已为 OpenVPN 子网设置了 NAT,因此 OpenVPN 客户端可以通过隧道毫无问题地访问 IPv4 互联网。
然后我设置了一个 DNAT 规则,将 6to4 流量转发到我的 VPN 端点:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT ipv6 -- anywhere anywhere to:10.2.0.6
我使用的是 MikroTik 的路由器,并按照说明操作这里,除非我的 VPN 端点的 IP 在 6to4 隧道的本地地址中。
当我尝试 ping 隧道代理的端点 IPv6 地址时,我遇到了超时。然后我尝试从另一台具有原生 IPv6 的服务器 ping 我客户端的 IPv6 地址,它给出了无法访问地址。
我不知道这种方法是否有效,或者我应该怎么做才能使其有效。如果不行,还有哪些其他可能的解决方案?
答案1
好吧 - 由于某些我无法理解的原因,隧道中隧道方法不起作用,但我通过另一种方式使 IPv6 正常工作。
首先,不要使用 IP 隧道,而是使用以太网 (tap) 隧道。然后,在运行 OpenVPN 的隧道服务器上,建立到隧道代理的隧道,并要求它们提供 /48 区域。
之后,选择 /48 区域中的任意地址,通过以太网隧道端点(客户端)的链路本地地址进行路由。即:
ip -6 route add <your /64 zone>::/64 via fe80::...
返回客户端,通过隧道服务器的链路本地地址路由 IPv6 流量。这是我在 MikroTik 上执行的操作:
/ipv6 route add dst-address=2000::/3 gateway=fe80::...4%ovpn-tunnel
然后,使用刚刚路由到路由器的 /64 区域在 LAN 桥上设置 IPv6 地址:
/ipv6 address add address=<your /64 zone> interface=bridge advertise=yes
就是这样。