OpenVPN 网关不回复 IPv6 ping,但转发数据包

OpenVPN 网关不回复 IPv6 ping,但转发数据包

我正在尝试调试我的 IPv6 网络并遇到了一个我无法理解的问题。

我使用 OpenVPN 作为我的 VPN 服务器,下面是设置的简要图表:

具有双宿主 VPN 服务器的 IPv6 网络 当我尝试从 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:02001: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

相关内容