Linux 上的 IPv6 路由

Linux 上的 IPv6 路由

我们在设置简单的 IPv6 路由时遇到了问题。之前有人问过这个问题,但建议的答案似乎都不适合我们的情况。

我们的网络覆盖数百个 IPv4 VPN 连接节点,我们希望同时使用 IPv6 扩展它们。为此,我们在 3 台运行 Linux 5.10 LTS 的主机上进行了测试,并使用随机选择和手动分配的 ULA(下面的 IP 也以相同的方式随机生成):

主持人A:

eth0 fd68:8fdd:bb68::2/64
(route fd3d:7eec:51a3::/64 via fd68:8fdd:bb68::1)

主持人B:

eth0 fd68:8fdd:bb68::1/64
eth1 fd3d:7eec:51a3::1/64
net.ipv6.conf.eth0.forwarding = 1
net.ipv6.conf.eth1.forwarding = 1<
ip6tables FORWARD set to ACCEPT

主持人C:

eth0 fd3d:7eec:51a3::2/64
(route fd68:8fdd:bb68::/64 via fd3d:7eec:51a3::1)

Ping A->B 和 C->B 有效。Ping
B->A 和 B->C 有效。Ping
A->C 和 C->A 表现出相同的类似行为(如在 B 上调试所示):

$ tcpdump -i eth0 -l ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:05:12.943486 IP6 fd68:8fdd:bb68::2 > fd3d:7eec:51a3::2: ICMP6, echo request, seq 0, length 64
13:05:13.936869 IP6 fd68:8fdd:bb68::2 > fd3d:7eec:51a3::2: ICMP6, echo request, seq 1, length 64
13:05:14.945670 IP6 fd68:8fdd:bb68::2 > fd3d:7eec:51a3::2: ICMP6, echo request, seq 2, length 64
(continues..)

$ tcpdump -i eth1 -l ip6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
(nothing..)

$ ip6tables -L -v | grep FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

我相信一些非常简单的东西配置错误了。

答案1

根据先前这个问题,您需要设置net.ipv6.conf.all.forwarding = 1而不是(或除了)在各个接口上设置标志,用于更精细地控制路由器行为。

相关内容