我一直在尝试弄清楚是否可以在 CentOS VPS 服务器上设置 Hurricane Electric IPv6 隧道,但不将其设为所有 IPv6 流量的默认网关,而且还能够利用通过隧道委派的 /64 子网。
使用 CentOS 7 示例并在本指南中做了一些修改(它是一个 Linode VPS):
https://www.linode.com/docs/networking/set-up-an-ipv6-tunnel-on-your-linode
隧道不是默认网关的原因是我已经通过 SLAAC 拥有本机 IPv6 和委派的 /64,但希望将 IPv6 隧道添加为故障转移场景/附加 IPv6 网络路由到此服务器上运行的服务。
我所见过的关于设置“he-ipv6”接口的所有配置基本上都接管了默认网关,这使得我的本机 IPv6 地址空间不再可 ping 到 WAN 端,但 ping 和 traceroute 等连接仍然在两个接口上的服务器内有效,通过在测试中指定特定接口进行测试。
traceroute -6 -i eth0 ipv6.google.com
traceroute to ipv6.google.com (2a00:1450:400b:801::200e), 30 hops max, 80 byte packets
1 2a01:7e00::xxxx:xxxx:xxxx:xxxx (2a01:7e00::8678:acff:fe5a:1a41) 0.919 ms 1.358 ms 1.425 ms
2 2a01:7e00:7777:6::1 (2a01:7e00:7777:6::1) 0.832 ms 2a01:7e00:7777:1::1 (2a01:7e00:7777:1::1) 0.893 ms 2a01:7e00:7777:3::1 (2a01:7e00:7777:3::1) 2.858 ms
3 2001:7f8:4::3b41:1 (2001:7f8:4::3b41:1) 1.489 ms 1.489 ms 1.470 ms
4 2001:4860:0:1102::2 (2001:4860:0:1102::2) 1.768 ms 2001:4860:0:1103::3 (2001:4860:0:1103::3) 2.129 ms 2.306 ms
5 2607:f8b0:e000:8000::6 (2607:f8b0:e000:8000::6) 11.461 ms 2001:4860::c:4000:dd7a (2001:4860::c:4000:dd7a) 30.924 ms 30.940 ms
6 2001:4860::1:0:b04f (2001:4860::1:0:b04f) 12.182 ms 14.449 ms 13.446 ms
7 2001:4860:0:1::1223 (2001:4860:0:1::1223) 10.631 ms 10.818 ms 11.042 ms
8 dub08s01-in-x0e.1e100.net (2a00:1450:400b:801::200e) 11.695 ms 12.338 ms 11.674 ms
traceroute -6 -i he-ipv6 ipv6.google.com
traceroute to ipv6.google.com (2a00:1450:400b:c00::8b), 30 hops max, 80 byte pac kets
1 jamesnetworks-3.tunnel.tserv1.lon2.ipv6.he.net (2001:470:1f1c:xxx::1) 5.321 ms 8.443 ms 11.440 ms
2 ge3-20.core1.lon2.he.net (2001:470:0:320::1) 11.657 ms 11.635 ms 11.610 m s
3 2001:7f8:4::3b41:1 (2001:7f8:4::3b41:1) 12.799 ms 12.776 ms 12.745 ms
4 2001:4860:0:1::2484 (2001:4860:0:1::2484) 12.380 ms 2001:4860:0:1103::3 (20 01:4860:0:1103::3) 13.500 ms 2001:4860:0:1103::2 (2001:4860:0:1103::2) 12.769 ms
5 2001:4860::c:4000:dd7a (2001:4860::c:4000:dd7a) 12.871 ms 2607:f8b0:e000:80 00::6 (2607:f8b0:e000:8000::6) 22.566 ms 2001:4860::c:4000:dd7a (2001:4860::c:4 000:dd7a) 13.663 ms
6 2001:4860::1:0:af90 (2001:4860::1:0:af90) 20.897 ms 11.010 ms 12.375 ms
7 2001:4860::2:0:b051 (2001:4860::2:0:b051) 12.114 ms 22.411 ms 11.200 ms
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 dg-in-x8b.1e100.net (2a00:1450:400b:c00::8b) 11.499 ms 11.035 ms 11.800 ms
我已经设置了隧道并确认它可以正常工作,但我的两个 /64 IPv6 地址空间在同时启用时不起作用。我正在寻找有关需要哪些路由配置才能使其正常工作的进一步指导,可能略微超出了上述文档中涵盖的范围。
设备上的默认网关eth0
设置为:
default via fe80::1 dev eth0 proto ra metric 1024 expires 1796sec
启用he-ipv6
接口时,除上述内容外,还添加以下内容:
default via 2001:470:1fxx:xx::1 dev he-ipv6 metric 1
度量值越高,所有流量就会尝试通过接口he-ipv6
,这不是我想要的。同样,拥有两个“默认”路由似乎也不是个好主意。
我想要做的是保持本机 IPv6 连接正常工作,同时让 he-ipv6 处于活动状态并可用于通过隧道将流量路由到我路由的 /64 中配置的 IPv6 地址,以及来自 Linode 的现有 /64。
我相信我可能需要在这里做一些静态路由,但不确定如何解决它。
到目前为止,能够按照以下指导正确控制度量,IPv6 路由表如下所示:
unreachable ::/96 dev lo metric 1024 error -113
unreachable ::ffff:0.0.0.0/96 dev lo metric 1024 error -113
# Additional route added by he-ipv6
2001:470:1f1c:xxx::/64 dev he-ipv6 proto kernel metric 256
# Adding any IPv6 in the HE routed /64 to eth0 adds the route below
2001:470:1f1d:xxx::/64 dev eth0 proto kernel metric 256
unreachable 2002:a00::/24 dev lo metric 1024 error -113
unreachable 2002:7f00::/24 dev lo metric 1024 error -113
unreachable 2002:a9fe::/32 dev lo metric 1024 error -113
unreachable 2002:ac10::/28 dev lo metric 1024 error -113
unreachable 2002:c0a8::/32 dev lo metric 1024 error -113
unreachable 2002:e000::/19 dev lo metric 1024 error -113
# Linode SLAAC IPv6
2a01:7e00::/64 dev eth0 proto kernel metric 256 expires 14395sec
2a01:7e00:xxxx:xxx::/64 dev eth0 proto kernel metric 256
unreachable 3ffe:ffff::/32 dev lo metric 1024 error -113
# Having fe80::/64 for both interfaces seems wrong?
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev he-ipv6 proto kernel metric 256
# eth0 (Linode IPv4/IPv6)
default via fe80::1 dev eth0 proto ra metric 1024 expires 1795sec hoplimit 64
# he-ipv6
default via 2001:470:1f1c:xxx::1 dev he-ipv6 metric 1025
这里的两个参考fe80::/64
似乎不正确,我认为在这种情况下 he-ipv6 不需要这个设置,并且我可能需要额外的静态路由以允许路由的 /64 地址可供外部访问。
如有任何建议或解决方案,我们将不胜感激!
答案1
有两个默认路由是可以的,但是正如 Ron 在评论中指出的那样,您几乎肯定希望它们具有不同的指标,以便通常通常会优先选择一条(可能是以太网接口)。
您需要编辑ifup
为接口添加的脚本he-ipv6
并将其添加METRIC=100
到底部。当隧道接口启动时,这应该会产生两个默认路由,现有路由的度量为 1,新路由的度量为 100。如果通过以太网端口的默认路由消失,则 v6 流量将开始通过隧道流动。
请记住,您可能还需要根据想要通过 HE 达到的目的,通过隧道接口添加一些额外的 v6 静态路由。
编辑:Redhat/CentOS 不会在各种接口脚本中一致地实现/遵守 METRIC 值。您当然可以修改这些脚本以包含此值,但从可操作性的角度来看,这可能并不可取,因为您需要跟踪对这些常用脚本上游所做的任何更改。
所以...你可以很容易地从 CLI 完成此操作:
sudo ip -6 delete default via 2001:470:1fxx:xx::1 dev he-ipv6 sudo ip -6 add default via 2001:470:1fxx:xx::1 dev he-ipv6 metric 100
/sbin/ifup-local
您还可以通过创建如下所示的脚本来添加它以自动运行:
#!/bin/sh if [[ "$1" == "he-ipv6" ]] then sudo ip -6 delete default via 2001:470:1fxx:xx::1 dev he-ipv6 sudo ip -6 add default via 2001:470:1fxx:xx::1 dev he-ipv6 metric 100 else #DO_NOTHING fi
每个接口启动后,CentOS 都会自动调用此方法,但只有当相关接口确实是“he-ipv6”时才会执行任何操作。