我有:[ Host A ] -- [ gateway ] -- [ Host B ]
,而 A 和 B 位于不同的子网中。
网关配置:
ip -6 link set enp0s3 up
ip -6 link set enp0s9 up
ip -6 addr flush dev enp0s3
ip -6 addr flush dev enp0s9
ip -6 route flush dev enp0s3
ip -6 route flush dev enp0s9
ip -6 addr add ::ffff:5:7:1:1/126 dev enp0s3
ip -6 addr add ::ffff:5:7:2:1/126 dev enp0s9
echo 1 | tee /proc/sys/net/ipv6/conf/*/forwarding > /dev/null
主机A配置:
ip link set enp0s3 up
ip -6 addr flush dev enp0s3
ip -6 addr add ::ffff:5:7:1:2/126 dev enp0s3
ip -6 route add default via ::ffff:5:7:1:1
主机B配置:
ip link set enp0s3 up
ip -6 addr flush dev enp0s3
ip -6 addr add ::ffff:5:7:2:2/126 dev enp0s3
ip -6 route add default via ::ffff:5:7:2:1
我希望 IP 成为 IPv4 的转换地址 (5.7.2.1 -> ::ffff:5:7:2:1)。
问题:
当我尝试从主机 B ping 主机 A 时,有时能 ping 通,有时却不能;从主机 A 到主机 B 的行为相同。当我尝试 ncat -6 时,它不起作用(网关 tcpdump 说“目标主机无法访问”)。 ping 和 ncat 仅在网关上工作。
网关上的路由表:
::ffff:5:7:1:0/126 dev enp0s3 proto kernel metric 256 pref medium
::ffff:5:7:2:0/126 dev enp0s9 proto kernel metric 256 pref medium
fe80::/64 dev enp0s8 proto kernel metric 256 pref medium
最后的 fe80::/64 记录是我的 ssh 连接。
我想,问题出在路线部分,但对我来说,神秘的是如何解决它。
编辑:
我解决了我的问题,即刷新地址ip -6 addr flush dev enp0s3
。
答案1
IPv4 映射的 IPv6 地址(即格式为 的地址::ffff:192.168.0.1
)不应在线路上使用。它们旨在用作双堆栈套接字上 IPv4 地址的内部标识符。当双栈 (IPv6/IPv4) 服务器进程接受来自 IPv4 主机的 IPv6 套接字上的连接时,例如192.168.0.1
,它会在内部转换为::ffff:192.168.0.1
.
如果网络接口接收到具有这种格式的地址的数据包,如果不丢弃它,那就是一个错误。