我正在以非域(工作组)角色运行 Windows 2008r2 服务器。它是 LAN 的 DNS 服务器和 DHCP 服务器。
DNS 服务对于外部 Internet 地址运行良好,但本地主机名无法解析(大多数情况下 - 有关详细信息,请参阅下文)。
DHCP 服务器在其租约列表中列出了 LAN 上所有设备的正确主机名,但 DNS 服务器似乎并未意识到这一点。
我已配置 DHCP 作用域设置,让客户端注册其 DNS。DHCP 作用域属性中的 DNS 选项卡已勾选
- “启用 DNS 动态更新”
- “始终动态更新 DNS A 和 PTR 记录”。
- “删除租约时丢弃 A 和 PTR 记录”,
- “为未请求更新的客户端动态更新 DNS A 和 PTR 记录...”
作为示例,我将展示 4 个主机的名称解析结果
- sun——Windows 2008r2 服务器(DNS、DHCP)
- mars——Windows 10 客户端
- uranus——Linux Ubuntu 16.04 客户端
- PiZeroW——Raspberry Pi Zero,Raspbian
我尝试了带有和不带有 .local 后缀的主机名。
来自 Sun:
Ping mars works (mars.local also works)
Ping Uranus works
Ping Uranus.local host not found
Ping PiZeroW host not found (same result for .local)
从火星出发:
ping sun works (sun.local also works)
ping uranus works (uranus.local also works)
Ping PiZeroW host not found (same result for .local)
来自天王星:
ping sun unknown host (same result for .local)
ping mars unknown host (same result for .local)
Ping PiZeroW unknown host
Ping PiZeroW.local works
来自 PiZeroW:
ping sun unknown host (same result for .local)
ping mars unknown host (same result for .local)
ping uranus unknown host
ping uranus.local works
有人能解释一下为什么我得到的结果不一致吗?这里有没有什么模式可以提供线索?有没有关于本地 LAN DNS 配置的好教程?
答案1
您的计算机在不同程度上实现了链路本地多播名称解析 (LLMNR)。此机制无需中央服务器即可实现对等工作,因此主机会报告其名称以响应在本地 LAN 上以多播数据报形式发送的查询。具有匹配名称的主机会向查询主机发送响应。名称是单标签名称,如“mars”,没有任何后缀。为方便起见,Windows 客户端接受 .local 后缀,该后缀在执行查询之前会被删除。
要使此机制发挥作用,查询主机和响应主机都必须启用 LLMNR。如果查询计算机未实施 LLMNR,它将仅依赖其他机制,如 DNS 或 /etc/hosts 中的静态主机条目。被查询的主机必须启用响应器。
多播 DNS(mDNS)是一种类似的机制,但在 Windows 计算机上很少使用。