我使用 Strongswan IPv4 IKEv2 VPN 将 2 个系统 A 和 B 链接在一起。连接到 A 的客户端 (C) 可以使用 VPN 通过 B 访问公共 IPv4 互联网。我试图让 C 通过 B 使用 IPv6 访问公共互联网,即来自 C 的 IPv6 数据包由 A 封装并发送到 B 进行解封装和转发。
我相信这一切都正常进行,直到数据包进入 FORWARD 表为止 - 但事实并非如此。
在 B 上启用 IPv6 转发
sysctl net.ipv6.conf.default.forwarding
net.ipv6.conf.default.forwarding = 1
当我从 C ping 时
ping -6 -c1 -I fd00::1000 2a00:...:2377
...
1 packets transmitted, 0 received, 100% packet loss, time 0ms
在 B 上使用 tcpdump 我看到
14:02:00.014233 IP6 fd00::1000 > 2a00:...:2377: ICMP6, echo request, seq 1, length 64
在 B 上使用 ip6tables TRACE 目标时,我看到
Sep 15 14:02:00 host kernel: TRACE: raw:PREROUTING:policy:3 IN=eth0 OUT= MAC=52:54:00:0e:e3:c4:52:54:00:fd:ed:24:08:00 SRC=fd00:0000:0000:0000:0000:0000:0000:1000 DST=2a00:...:2377 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=ICMPv6 TYPE=128 CODE=0 ID=24923 SEQ=1
Sep 15 14:02:00 host kernel: TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=52:54:00:0e:e3:c4:52:54:00:fd:ed:24:08:00 SRC=fd00:0000:0000:0000:0000:0000:0000:1000 DST=2a00:...:2377 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=ICMPv6 TYPE=128 CODE=0 ID=24923 SEQ=1
Sep 15 14:02:00 host kernel: TRACE: nat:PREROUTING:policy:1 IN=eth0 OUT= MAC=52:54:00:0e:e3:c4:52:54:00:fd:ed:24:08:00 SRC=fd00:0000:0000:0000:0000:0000:0000:1000 DST=2a00:...:2377 LEN=104 TC=0 HOPLIMIT=64 FLOWLBL=0 PROTO=ICMPv6 TYPE=128 CODE=0 ID=24923 SEQ=1
使用 netfilter流程图看起来数据包正在到达“路由决策”,但没有进一步进展。
除了启用跟踪的规则之外,IPv6 防火墙是空的,并设置为接受所有内容。
系统 B 可以 ping 通目标系统,路由表如下所示
ip -6 r g 2a00:...:2377
2a00:...:2377 via 2a00:..:0:3:1 dev eth0 proto static src fe80::5054:ff:fe0e:e3c4 metric 100 pref medium
有人能指出正确的方向来弄清楚到底发生了什么吗?