![Debian:通过 OpenVPN 将 IPv6 引入 IPv4](https://linux22.com/image/573153/Debian%EF%BC%9A%E9%80%9A%E8%BF%87%20OpenVPN%20%E5%B0%86%20IPv6%20%E5%BC%95%E5%85%A5%20IPv4.png)
大致按照以下说明操作https://www.zagbot.com/openvpn_ipv6_tunnel.html我现在有以下内容:
客户
martin@theoria:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:8d:b3:fd:f4
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:8dff:feb3:fdf4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:31372164 errors:0 dropped:0 overruns:0 frame:0
TX packets:33131753 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15453951555 (15.4 GB) TX bytes:26797262646 (26.7 GB)
Interrupt:23 Base address:0xa000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1985259 errors:0 dropped:0 overruns:0 frame:0
TX packets:1985259 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:347645379 (347.6 MB) TX bytes:347645379 (347.6 MB)
sit1 Link encap:IPv6-in-IPv4
inet6 addr: 2001:41d0:2:b353::10/64 Scope:Global
inet6 addr: fe80::a08:a/128 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1106 (1.1 KB) TX bytes:1598 (1.5 KB)
virbr0 Link encap:Ethernet HWaddr 12:86:9c:16:08:fd
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr 00:0e:2e:4e:94:8a
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
服务器
root@martineve:~# ifconfig
eth0 Link encap:Ethernet HWaddr e0:69:95:72:85:77
inet addr:188.165.232.xxx Bcast:188.165.232.255 Mask:255.255.255.0
inet6 addr: fe80::e269:95ff:fe72:8577/64 Scope:Link
inet6 addr: 2001:41d0:2:b353::1/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:49817 errors:0 dropped:6 overruns:0 frame:0
TX packets:51419 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21105790 (20.1 MiB) TX bytes:36400780 (34.7 MiB)
Interrupt:20 Memory:fe500000-fe520000
eth0:0 Link encap:Ethernet HWaddr e0:69:95:72:85:77
inet addr:87.98.254.xxx Bcast:87.255.255.255 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:20 Memory:fe500000-fe520000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:14274 errors:0 dropped:0 overruns:0 frame:0
TX packets:14274 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10206299 (9.7 MiB) TX bytes:10206299 (9.7 MiB)
sit10 Link encap:IPv6-in-IPv4
inet6 addr: 2001:41d0:2:b353::3/64 Scope:Global
inet6 addr: fe80::a08:1/128 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:16000 errors:0 dropped:0 overruns:0 frame:0
TX packets:13254 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:9839924 (9.3 MiB) TX bytes:5791219 (5.5 MiB)
每台设备都可以通过它们之间的 IPv6 网络 ping 通对方:
客户:
PING 2001:41d0:2:b353::3(2001:41d0:2:b353::3) 56 data bytes
64 bytes from 2001:41d0:2:b353::3: icmp_seq=1 ttl=64 time=25.3 ms
服务器:
PING 2001:41d0:2:b353::10(2001:41d0:2:b353::10) 56 data bytes
64 bytes from 2001:41d0:2:b353::10: icmp_seq=1 ttl=64 time=94.7 ms
但是,从客户端,我无法访问外面的任何地方。
客户:
martin@theoria:~$ ip -6 route show
2001:41d0:2:b353::/64 via :: dev sit1 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 via :: dev sit1 proto kernel metric 256
default via 2001:41d0:2:b353::1 dev sit1 metric 1024
martin@theoria:~$ sudo route -A inet6
[sudo] password for martin:
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2001:41d0:2:b353::/64 :: Un 256 0 1 sit1
fe80::/64 :: U 256 0 0 eth0
fe80::/64 :: Un 256 0 0 sit1
::/0 2001:41d0:2:b353::1 UG 1024 0 0 sit1
::/0 :: !n -1 1 520 lo
::1/128 :: Un 0 2 56 lo
2001:41d0:2:b353::10/128 :: Un 0 1 3 lo
fe80::a08:a/128 :: Un 0 1 0 lo
fe80::250:8dff:feb3:fdf4/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 0 0 eth0
ff00::/8 :: U 256 0 0 sit1
::/0 :: !n -1 1 520 lo
服务器:
root@martineve:~# ip -6 route show
2001:41d0:2:b353::10 dev sit10 metric 1024
2001:41d0:2:b353::/64 dev eth0 proto kernel metric 256
2001:41d0:2:b353::/64 via :: dev sit10 proto kernel metric 256
2001:41d0:2:b300::/56 dev eth0 proto kernel metric 256 expires 2590467sec
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 via :: dev sit10 proto kernel metric 256
ff00::/8 dev eth0 metric 256
ff00::/8 dev sit10 metric 256
default via fe80::5:73ff:fea0:0 dev eth0 metric 1024
root@martineve:~# route -A inet6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
::1/128 :: Un 0 1 196 lo
2001:41d0:2:b353::/128 :: Un 0 1 0 lo
2001:41d0:2:b353::/128 :: Un 0 1 0 lo
2001:41d0:2:b353::1/128 :: Un 0 1 101 lo
2001:41d0:2:b353::3/128 :: Un 0 1 3 lo
2001:41d0:2:b353::10/128 :: U 1024 0 0 sit10
2001:41d0:2:b353::/64 :: U 256 0 0 eth0
2001:41d0:2:b353::/64 :: Un 256 0 0 sit10
2001:41d0:2:b300::/56 :: UAe 256 0 2 eth0
fe80::/128 :: Un 0 1 0 lo
fe80::a08:1/128 :: Un 0 1 0 lo
fe80::e269:95ff:fe72:8577/128 :: Un 0 1 49 lo
fe80::/64 :: U 256 0 0 eth0
fe80::/64 :: Un 256 0 0 sit10
ff00::/8 :: U 256 0 0 eth0
ff00::/8 :: U 256 0 0 sit10
::/0 fe80::5:73ff:fea0:0 UG 1024 0 0 eth0
::/0 :: !n -1 1 113 lo
该服务器具有 IPv6 通用连接:
PING aaaa.test-ipv6.com(jason-fesler.f0-8.switch2a.fmt.he.net) 56 data bytes
64 bytes from jason-fesler.f0-8.switch2a.fmt.he.net: icmp_seq=1 ttl=53 time=164 ms
客户端不会:
PING aaaa.test-ipv6.com(jason-fesler.f0-8.switch2a.fmt.he.net) 56 data bytes
^C
--- aaaa.test-ipv6.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2015ms
我试过这个,但没有成功:
root@martineve:~# cat /proc/sys/net/ipv6/conf/all/forwarding
1
我需要做什么才能让客户端访问 IPv6 的外部世界?
答案1
您有许多具有相同优先级和不同设备的路由。您正在将 /64 路由出 eth0,这可能会给您带来问题。通常,为不同的子网设置不同的 /64 会更容易。
在尝试连接之前,请先验证网络内的 IPv6 连接。客户端和主机是否可以通过 IPv6 相互 ping 通。必须先进行 ping 操作,然后才能进行路由。
一些提供商会专门为您的服务器和其网络之间的路由分配一个 /64。这些连接可能仅支持一个地址,该地址应分配给您的外部接口。他们还应为您的内部网络需求提供 /48、/56 或 /60。
编辑:我再次检查了您的路由并将其与我的路由进行了比较。我建议检查一下您的ip -6 neigh
输出。就我而言,我有一个通过隧道的 IPv6 点对点链接,但它没有显示我的外部路由器。看来您有一个用于外部路由的外部地址 2001:41d0:2:b353::/64,用于内部网络的外部地址 2001:41d0:2:b300::/56。尝试使用 2001:41d0:2:b300::/64 作为路由器内部网络块,使用 2001:41d0:2:b301::/64 作为远程服务器块。尝试更像这样的配置。
服务器:(sit0-2001:41d0:2:b300::2)
default dev eth0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2000::/3 dev eth0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2001:41d0:2:b301::/64 via 2001:41d0:2:b301::3 dev sit0 proto kernel metric 256 mtu 1480 advmss 1420 hoplimit 0
客户端:(sit1-2001:41d0:2:b301::3)
default dev sit1 metric 1024 mtu 1480 advmss 1420 hoplimit 0
2000::/3 dev via 2001:41d0:2:b3010::2sit1 metric 1024 mtu 1480 advmss 1420 hoplimit 0
答案2
好的,最终的答案就在我原来的链接里!
当你进行这种路由时,你必须指定“ip add neigh proxy [ip] eth0”位。
答案3
扩展 OP 的自我回答。
问题在于您的数据包可以传输到互联网,但答复却无法返回。
您的托管服务提供商为您提供了一个“在线”地址块(可能是 /64,尽管我们不确定)。您可以使用地址块中的任何地址,但要做到这一点,您的服务器必须响应该地址的邻居发现请求。您的服务器将响应 2001:41d0:2:b353::1 的邻居发现请求,因为它与您的提供商面向的接口相关联,但它不会响应 2001:41d0:2:b353::10 的邻居发现请求。因此,您的托管服务提供商的路由器不知道将客户端发送的数据包的回复发送到哪里。
对此有几种可能的解决方案。
一种方法是使用“ip -6 neigh add proxy 2001:41d0:2:b353::10 eth0”命令明确告诉内核,您希望它响应在 eth0 上收到的针对 2001:41d0:2:b353::10 的邻居发现请求。这是一种有点不靠谱的解决方案,但不幸的是,对于某些提供商来说,这是您唯一的选择。
另一种方法是要求您的托管服务提供商为您提供“路由”块。有了路由块,他们就会将您的服务器视为路由器,而不是对块中的每个地址分别进行邻居发现。
最后一种可能性是使用 ip6tables 进行伪装。这是比第一种方法更具黑客性的选择。
PS openvpn 现在可以直接承载 ipv6 流量,您不再需要在隧道内建立隧道。