我正在尝试调试我的 IPv6 网络并遇到了一个我无法理解的问题。
我使用 OpenVPN 作为我的 VPN 服务器,下面是设置的简要图表:
当我尝试从 VPN 客户端 ( 2001:470:7875:1::2
) ping 到 VPN 服务器 ( 2001:470:7875:1::1
) 时,所有数据包都被丢弃,但奇怪的是:
我可以 ping 任何其他通过 IPv6 托管(如 Google)或通过 IPv6 连接到同一 VPN 服务器的任何其他 VPN 客户端。
我还可以 ping 我的 VPN 服务器的本机 IPv6 接口 ( ens3
)。只有 VPN 服务器接口 ( tun0
) 在直接 ping 时没有响应。
因此我想知道发生了什么事?
由于我有两个 IPv6 链接,连接到 IPv6 版本的互联网,因此我必须进行基于策略的路由。规则非常简单。
- 仅限 IPv6 软件包源自 VPN 服务器本身就允许通过本机 IPv6 链路发送。
- 所有其他 IPv6 软件包必须由 Hurricane Electric IPv6 隧道处理。
这让我找到了 VPN 服务器上的以下路由表:
该命令ip -6 rule show
具有以下设置:
0: from all lookup local
32000: from 2001:470:7875::/48 lookup openvpn
32766: from all lookup main
桌子local
:
local ::1 dev lo proto kernel metric 0 pref medium
anycast 2001:470:1f14:2c7:: dev he-ipv6 proto kernel metric 0 pref medium
local 2001:470:1f14:2c7::2 dev he-ipv6 proto kernel metric 0 pref medium
anycast 2001:470:7875:1:: dev tun0 proto kernel metric 0 pref medium
local 2001:470:7875:1::1 dev tun0 proto kernel metric 0 pref medium
anycast 2a01:xxx:xxxx:: dev ens3 proto kernel metric 0 pref medium
local 2a01:xxx:xxxx:xxx::1 dev ens3 proto kernel metric 0 pref medium
anycast fe80:: dev ens3 proto kernel metric 0 pref medium
anycast fe80:: dev tun0 proto kernel metric 0 pref medium
anycast fe80:: dev he-ipv6 proto kernel metric 0 pref medium
local fe80::95d2:9e6b dev he-ipv6 proto kernel metric 0 pref medium
local fe80::5054:ff:fe66:f97f dev ens3 proto kernel metric 0 pref medium
local fe80::af96:f1e3:dbf3:96a7 dev tun0 proto kernel metric 0 pref medium
ff00::/8 dev ens3 metric 256 pref medium
ff00::/8 dev tun0 metric 256 pref medium
ff00::/8 dev he-ipv6 metric 256 pref medium
桌子main
:
local ::1 dev lo proto kernel metric 256 pref medium
2001:470:1f14:2c7::/64 dev he-ipv6 proto kernel metric 256 pref medium
2001:470:7875:1::/64 dev tun0 proto kernel metric 256 pref medium
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
2xxx:xxx:xxxx::/48 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev tun0 proto kernel metric 256 pref medium
fe80::/64 dev he-ipv6 proto kernel metric 256 pref medium
default via 2a01:xxx:xxxx::1 dev ens3 metric 1024 pref medium
桌子openvpn
:
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
default via 2001:470:1f14:2c7::1 dev he-ipv6 metric 1024 pref medium
有谁可以告诉我吗?:-)
快速回顾一下路由表中不可达的行
2001:470:1f14:2c7::/64 dev he-ipv6 proto kernel metric 256 pref medium
2001:470:7875:1::/64 dev tun0 proto kernel metric 256 pref medium
unreachable 2001:470:7875::/48 dev lo metric 1024 error -113 pref medium
的范围2001:470:7875::/48
是从2001:470:7875:0:0:0:0:0
到2001:470:7875:ffff:ffff:ffff:ffff:ffff
。
我已将子网分配2001:470:7875:1::/64
给 VPN 隧道。
2001:470:7875:1::/64
是子网的一部分2001:470:7875::/48
,这可能会导致路由表发生冲突。2001:470:1f14:2c7::/64
是不是子网的一部分2001:470:7875::/48
,因此不会与路由表冲突。
目前没有其他 IP 范围正在使用,但稍后将会使用。
记住最长前缀获胜会给我们以下行为:
- 任何子网的 IP 包都
2001:470:1f14:2c7::/64
将由 he-ipv6 接口处理。 - 任何子网的 IP 包都
2001:470:7875:1::/64
将由 tun0 接口处理。 - 全部其他2001:470:7875::/48 子网的 IP 包将回复为无法访问。
答案1
所以...
经过进一步挖掘,我发现我的设置可以稍微改进一下,尽管我并不完全相信我已经涵盖了所有的基础。
无论如何都ip -6 rule show
可以稍作调整。
以下行:
32000: from 2001:470:7875::/48 lookup openvpn
由以下命令生成:
ip -6 rule add priority 32000 from 2001:470:7875::/48 table openvpn
这可以简化为:
ip -6 rule add priority 32000 iif tun0 to 2000::/3 table openvpn
这意味着基本上所有基于 IPv6 的流量都必须查找表格openvpn
当且仅当流量来自 VPN 链接时并且目标地址属于2003::/3
,这基本上是整个官方 IPv6 互联网 - 不包括 fe80::/10 和 fc::/7 等本地地址。
最终结果是,来自我的 VPN 链接的 IPv6 流量始终通过 Hurricane Electric 链接转发。
要记住的事情。每当我从范围内的可用地址池中添加新子网时, 2001:470:7875::/48
我都必须输入两个条目。
- 表中的一个
main
,告诉如何将包从VPN服务器转发到新的子网。 - 表中的
openvpn
,说明 VPN 客户端如何访问新子网。这通常是当通过 VPN 链接从一个客户端到另一个客户端进行站点到站点的流量时。
无论如何:Ping 现在可以工作了,而且我仍然可以通过 IPv6 ping Google。
该命令ip -6 rule show
现在给出以下输出:
0: from all lookup local
32000: from all to 2000::/3 iif tun0 lookup openvpn
32766: from all lookup main
其余一切都与最初的问题相同。
Traceroute 有点棘手,但只要使用 ICMP Echo 包它就可以工作。
在我的 VPN 客户端上运行该命令traceroute -6 -I google.com
得到以下跟踪:
traceroute to google.com (2a00:1450:400e:80b::200e), 30 hops max, 80 byte packets
1 2001:470:7875:1::1 (2001:470:7875:1::1) 16.868 ms 37.912 ms 37.847 ms
2 tunnel547738.tunnel.tserv11.ams1.ipv6.he.net (2001:470:1f14:2c7::1) 37.777 ms 37.710 ms 37.647 ms
3 10ge11-20.core1.ams1.he.net (2001:470:0:7d::1) 37.575 ms 37.509 ms 37.443 ms
4 amsix-router.google.com (2001:7f8:1::a501:5169:1) 37.453 ms 52.425 ms 52.392 ms
5 2001:4860:0:f8d::1 (2001:4860:0:f8d::1) 52.323 ms 52.259 ms 52.189 ms
6 2001:4860:0:1::219f (2001:4860:0:1::219f) 36.456 ms 25.560 ms 18.169 ms
7 ams17s01-in-x0e.1e100.net (2a00:1450:400e:80b::200e) 34.566 ms 34.502 ms 34.435 ms