IPv6 本地网络中的 netcat6

IPv6 本地网络中的 netcat6

我有:[ 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.

如果网络接口接收到具有这种格式的地址的数据包,如果不丢弃它,那就是一个错误。

相关内容