我继承了一些代码,用于检查 Linux 路由器上的 IPv4 网络连接。如果 IPv6 地址位于 0:0:0:0:0:ffff:: 网络中,则需要检查 IPv6 地址。接口可以在此 IPv6 范围内拥有 IPv6 地址,而没有 IPv4 地址,并且可以在 IPv4 网络中通信,这是否是一种有效的方案?
答案1
不,那行不通。映射地址用于在 IPv6 软件中表示 IPv4 网络连接。但它们仅此而已:软件中的表示。将它们分配给网络接口或在网络上发送实际数据包将不起作用。如果有人这样做,那么它就不是有效的 IPv6。
答案2
还有一些有趣的不太明显的用例。如果检查 IPv4 连接,则由于各种转换机制(如 NAT64),需要零 IPv4 地址。可能唯一的 IPv4 地址位于不同的网关上,并且有地址转换将其编码为 IPv6。在这种情况下,一个好的检查是向 DNS 中只有 A 记录的已知资源发出请求。
当然,如果真正的问题只是接口是否位于 v4 子网上,那么就更容易找出答案ip -4 addr
。