sch*_*mar 4 networking dns ipv6
我有一个双栈专用网络。我的路由器是 DHCP 和 DNS 服务器。
所有客户端 IPv4 地址均已注册,并且可以按预期由 DNS 查询,因为它们的主机名已向 DHCP 注册。
现在,一些主机名查询也返回 IPv6 地址。例如,这适用于 Windows 10 客户端和 Linux Raspberry Pi (Debian 10),但不适用于 Android 设备和 Arch Linux 服务器。
这通常是如何运作的?IPv6 地址是在客户端 (SLAAC) 上自动配置的,因为我的路由器仅通过 DHCPv6 管理 DNS 记录。那么路由器是如何知道这些IPv6地址的呢?这些客户是否自行宣传其 AAAA 记录?
一般情况下不会。据我所知,目前还没有广泛接受的机制来实现这项工作(显然除了 DHCPv6),只有制造商特定的 hack。
\n我最有可能的猜测(尽管它仍然与您报告的工作操作系统不完全匹配):
\n某些路由器 DNS/DHCP 软件(例如 dnsmasq)会尝试猜测获得DHCPv4 租约的每个设备的 SLAAC 派生地址(但具体而言只是 EUI-64 格式地址)。由于 DHCPv4 服务器知道主机的 MAC 地址,因此这就是派生 EUI-64 SLAAC 地址所需的全部内容。
\n例如,该选项(同时控制 DHCPv4、DHCPv6 和 SLAAC)的dnsmasq 文档表示:dhcp-range
\n\nra-names启用一种模式,为为 IPv6 执行 SLAAC 的双栈主机提供 DNS 名称。Dnsmasq 使用主机的 IPv4 租约来派生名称、网段和 MAC 地址,并假设主机在同一网段上也具有使用 SLAAC 算法计算的 IPv6 地址。对地址进行 ping 操作,如果收到回复,则会将 AAAA 记录添加到该 IPv6 地址的 DNS 中。请注意,这仅发生在直接连接的网络中(不是通过中继执行 DHCP 的网络),并且如果主机正在使用隐私扩展,则它将不起作用。ra-names可以与ra-stateless和slaac结合使用。
\n
这显然不能与 RFC\xc2\xa07217 不透明 SLAAC 地址一起使用,这些地址是从 NetworkManager 或 dhcpcd (它执行 SLAAC)获得的,也不能与 Windows\xc2\xa010 生成的地址一起使用,尽管它应该与 Android 和Linux 内核的内置 SLAAC 支持。
\n(理论上,某些路由器可能会根据其邻居缓存执行类似的操作\xe2\x80\x93 执行类似的操作,例如,如果它们看到某个特定的 MAC 地址为 2001:db8::1234,它们可能会自动将其与相应的 DHCPv4 关联起来租约和主机名...这有点不可靠和错误,我希望你的路由器不会这样做,但这仍然不是我见过的家庭路由器对其 DNS 所做的最糟糕的事情。 )
\n其他猜测:
\n主机确实可以自行公布 DNS 记录。所有 Windows 客户端都支持自行执行 DNS 更新 (RFC\xc2\xa02136),只要权威服务器在没有任何身份验证的情况下接受更新,它也可以在没有 Active Directory 的情况下工作。尽管我从未见过这种情况,但您的路由器实际上有可能接受来自 LAN 设备的 DNS“更新”消息,并使用它们来更新自己的DNS 。
\nLinux 设备几乎从不自动执行此操作。尽管如此,尝试在您的 LAN 域上运行nsupdate来看看它是否有效可能还是值得的。
\xe2\x80\x93 并不完全令人惊讶,但如果路由器的 DNS 服务器充当 mDNS 和/或 LLMNR 的代理( LAN 上常见的两种多播名称解析协议)。
\n非选项:
\n我还期望 ICMPv6 路由器请求中的主机可以发送一个“主机名”或“FQDN”选项,但没有。
\nICMPv6 确实有“节点信息请求”数据包,可用于查询主机名,但没有操作系统实现响应它们,因此路由器不太可能使用它们。
\n| 归档时间: |
|
| 查看次数: |
5726 次 |
| 最近记录: |