我在与互联网隔绝的 LAN 上操作,有几台设备(A、B、C……)通过以太网电缆连接到单个路由器,从而实现该 LAN。所有设备上的操作系统:Windows 10。
问题:
- 为什么 DNS 没有失败,而 LLMNR 却失败了?
- 为什么“ping A”使用 LLMNR,而“ping A.”使用 DNS?
- 有没有办法强制 nslookup 使用 LLMNR 而不是 DNS,为什么?
- 当我在主机名中为“ping”和“nslookup”附加“。”时,究竟发生了什么?
- 您如何知道这些问题的答案(工作领域和经验类型)?
这个问题的背景可以在下面找到
nslookup A
和
nslookup A.
均产生以下令人满意的输出
Server: localDnsServerName
Address: 192.168.1.1
Name: A
Address: 192.168.1.X
甚至
ping A.
产生令人满意的输出('.' 附加到被查询的主机名)
Pinging A [192.168.1.x] with 32 bytes of data:
Reply from 192.168.1.X: byte=32 time<1ms TTL=128
Reply from 192.168.1.X: byte=32 time<1ms TTL=128
Reply from 192.168.1.X: byte=32 time<1ms TTL=128
Reply from 192.168.1.X: byte=32 time<1ms TTL=128
Ping statistics for 192.168.1.X:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
但是,以下命令
ping A
产出不令人满意
Ping request could not find host A. Please check the name and try again.
经过进一步调查,通过 Wireshark,我看到 nslookup 命令和“ping A.”命令导致使用 DNS 协议的标准查询成功。
但是,“ping A”导致使用 LLMNR 协议的标准查询失败。
通过RFC 4795,LLMNR 摘要:
“链路本地多播名称解析 (LLMNR) 的目标是在无法进行传统 DNS 名称解析的情况下启用名称解析。LLMNR 支持所有当前和未来的 DNS 格式、类型和类别,同时在与 DNS 不同的端口上运行,并具有不同的解析器缓存。由于 LLMNR 仅在本地链路上运行,因此不能将其视为 DNS 的替代品。”
附加标签:'llmnr'
我本来会正式添加上述附加标签,但我的声誉值不及 300,无法创建新标签。如果可以在创建问题后对其进行标记,请通过编辑此问题来添加此标签。
答案1
LLMNR 仅用于单标签名称的本地链接(或特殊情况下,形式为 的名称hostname.local
,在解析之前转换为hostname
)。主机使用自己的名称进行响应;没有中央名称服务器。
Why is LLMNR failing, when DNS doesn't?
可能是因为主机A
有其他名称,即A
DNS 知道该名称,但hostname
命令在运行时返回其他内容A
。或者主机A
未充当 LLMNR 响应者。
Why does 'ping A' use LLMNR, while 'ping A.' uses DNS?
因为A.
不是一个单标签名称,即没有点的名称。
Is there any way to force nslookup to use LLMNR, instead of DNS, and why?
nslookup 是查询 DNS 的工具。该程序无法识别 LLMNR。
DNS 和 LLMNR 旨在相互补充。LLMNR 用于 LAN,因此您不需要拥有提供本地名称的本地 DNS 服务器。DNS 用于解析 Internet 上的名称。
有关 LLMNR 的教程,请参阅链路本地多播名称解析