我确实有一台运行 BIND9 DNS 服务器的 Debian 服务器。在我的区域文件中,我有几个主机可以通过 IPv4 和 IPv6 同等地访问,并且它们都有各自的 A 或 AAAA 记录。
现在我想在我的区域中添加一个仅支持 IPv6 的主机,这是一台在我的家庭网络中运行的计算机。这台计算机有一个 IPv6 地址,可以从互联网/我的 DNS 服务器计算机访问(我可以直接 ping6 该地址)。但是,它确实不是有一个 IPv4 地址(因为它在我的路由器等后面进行 NAT)。
我认为这无关紧要,我只需为此主机添加一个具有 IPv6 地址的 AAAA 记录并能够 ping 通它即可。
问题是,我只能在使用 ping6 时 ping 这台机器,标准 ping 命令会给我未知主机。这在某种程度上是可以理解的,但我想知道为什么普通 ping 在 ping 具有 IPv4 的主机之一时没有问题和和 IPv6 记录 - 在这种情况下,正常 ping 解析为 IPv6 地址。
对此有什么解释吗?我该怎么做才能改变这种行为?
概括:
主机有 A+AAAA 记录:ping 解析为 IPv6 地址,ping6 解析 IPv6 地址
主机仅具有 AAAA 记录:ping 无法解析 IPv6 地址,ping6 可解析 IPv6 地址
答案1
ping 仅请求 IPv4 地址(这意味着它仅查询 A 记录)并且 ping6 仅请求 IPv6 地址(并且仅查询 AAAA 记录)。
因此,对于双栈系统,DNS 中同时公开两种地址类型,这两个命令都可以工作,因为它们可以在 DNS 中看到适当的记录类型。在 IPv6 的情况下,只有主机 A 记录丢失,因此 ping 失败。
您搞错的部分是假设 ping 可以使用 AAAA 记录进行解析 - 但实际上不能。您可以使用网络嗅探器(如 wireshark)来准确查看发送到解析器的内容。ICMP 和 ICMPv6 是不同的协议,分别与 IPv4 和 IPv6 紧密耦合,不能互换。