配置 Hurricane Electric IPv6 隧道而不作为默认网关

配置 Hurricane Electric IPv6 隧道而不作为默认网关

我一直在尝试弄清楚是否可以在 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”时才会执行任何操作。

相关内容