Domain-Name-System

DHCP 和 mDNS 魔術 - 我想在我的 DNS 伺服器上自動回答 $hostname.mydomain

  • June 4, 2009

我已經看到了基於 mDNS 的服務發現的奇妙之處,但我沒有太多時間去深入研究它。我在 DHCP 配置文件或其他東西中也有對它的引用。

如何使用 mDNS 讓區域自動填充?

  • 通過讓 DHCPd 做某事
  • 或者每台機器都在宣傳自己

我希望查詢本地 DNS 伺服器(僅供內部使用)能夠回答問題。我怎麼做?

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=/"

上面的最終結果將是一個標題為“* Multicast 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”命名空間進行更改,但這有點麻煩。

引用自:https://serverfault.com/questions/18565