DHCP 和 mDNS 魔法 - 我希望 DNS 服务器上自动回答 $hostname.mydomain

DHCP 和 mDNS 魔法 - 我希望 DNS 服务器上自动回答 $hostname.mydomain

我见证了基于 mDNS 的服务发现的奇迹,但我没有太多时间去深入研究它。我也在 DHCP 配置文件或其他地方看到了对它的引用。

如何使用 mDNS 让区域自动填充?

  • 让 DHCPd 做一些事情

  • 或者每台机器都为自己做广告

我希望查询本地 DNS 服务器(仅供内部使用)能够回答问题。我该怎么做?

答案1

DNS 服务发现只是通过首先查找 PTR 记录来查找服务的一种惯例,例如:

$ dig +short ptr _http._tcp.dns-sd.org
;; Truncated, retrying in TCP mode.
\032*\032Zeroconf._http._tcp.dns-sd.org.
\032*\032Multicast\032DNS._http._tcp.dns-sd.org.
\032*\032DNS\032Service\032Discovery._http._tcp.dns-sd.org.
<< snipped >>

然后是 SRV 记录,例如:

$ dig +short srv \ *\ Multicast\ DNS._http._tcp.dns-sd.org
0 0 80 multicastdns.org.

最后,对于未包含在 SRV 记录中的任何内容,都有一个 TXT 记录:

$ dig +short txt \ *\ Multicast\ DNS._http._tcp.dns-sd.org
"path=/"

上述操作的最终结果将是标题为“ * 多播 DNS”的条目,该条目将链接到http://multicastdns.org:80/。您可能会问 DNS-SD 感知客户端如何知道如何在 dns-sd.org 上查找这些记录?好吧,要么必须明确告知(手动配置),要么必须查看可以通过 DHCP 配置的系统搜索域。

DHCP 守护进程可以通过紧密耦合到 DNS 守护进程(例如:dnsmasq)或向 DNS 服务器发送更新请求来维护它们发出的租约记录。通常后者使用 TSIG 的 DNS 更新请求完成,但方法因使用的 DNS/DHCP 服务器而异 - 这在 ISC BIND + DHCP 和使用类似方法的 Microsoft 堆栈中非常常见。

多播 DNS 通过让客户端负责公布其记录,消除了设置上述环境所涉及的许多麻烦。但它并非没有自己的怪癖 - 尽管它的名称中包含 DNS,但 (单播) DNS 和 mDNS 不互通,它们并行存在,这会导致在使用“.local”命名空间(mDNS 堆栈的默认命名空间)的环境中与其本地单播 DNS 发生冲突。您还可能会得到意想不到的主机名 - 例如,如果两个客户端争夺同一个主机名,其中一个将失败并重试并附加一个数字(此行为可以更改)。也就是说,在小型环境中,这不太可能成为问题。

mDNS 设置就是在 Windows 上安装 Bonjour 或在类 UNIX 系统上安装 Avahi。OS X 开箱即用 Bonjour。安装后,您应该能够通过附加了“.local”的主机名访问另一台机器。虽然可以从默认的“.local”命名空间进行更改,但这有点麻烦。

相关内容