有沒有辦法設置 Avahi 在 LAN 上實現“任播名稱解析”?
首先,一些背景知識:我們有一個實驗室,其中包含一些在隔離 LAN 上執行的專用 Linux 伺服器。所有伺服器都執行相同的作業系統(Debian Linux)和相同的專有伺服器軟體,並且伺服器程序相互通信以保持數據同步。這意味著就任何客戶端而言,客戶端連接到哪台伺服器都無關緊要——任何伺服器都將返回與任何其他伺服器相同的數據。
這些 Linux 伺服器都執行 avahi-daemon 來為自己發布 mDNS 主機名,這意味著客戶端可以輸入例如“ http://linux-server-1.local ”。進入他的網路瀏覽器並連接到 Linux 伺服器 #1,依此類推。
這一切都很好,除了這意味著坐在客戶端機器上的使用者(通常是安裝了 Bonjour 的 Mac 或 Windows 筆記型電腦)必須知道(或弄清楚)哪些 Linux 伺服器目前線上,並且他必須確保他連接到其中之一。例如,如果伺服器#2 今天離線,客戶端輸入“ http://linux-server-2.local ”。進入他的網址欄,他不會得到回應。當然,這不是世界末日,但對於希望一切都能“正常工作”的新手使用者來說,這很煩人,而且它也使健壯的客戶端腳本的開發更加複雜(因為客戶端腳本需要知道如何明確地處理離線伺服器)。
考慮到這一點,我的問題是:是否可以將 Avahi 配置為也發布任意播樣式的 mDNS 主機名別名?目標是任何人都可以坐在他的筆記型電腦上,輸入“ http://any-linux-server.local ”。(或類似的),並連接到目前線上的伺服器之一(同樣,哪一個都沒有關係)。
請注意,這需要在沒有任何特殊配置的客戶端筆記型電腦的情況下工作,因為我們無法控制它們(除了安裝 Bonjour 的要求)。
另請注意,我們不能依賴單獨的名稱伺服器或代理盒的存在,或任何特定 Linux 伺服器的存在,因為這會引入單點故障,而這是我們試圖避免的。
Trent Lloyd 這裡是 Avahi 項目的作者之一。
這在理論上是可能的,但做起來並不容易。不幸的是,在 Avahi 中發布主機名的預設機制也發布了一個反向 DNS 記錄,該記錄被列為獨占。因此,如果您嘗試發布 2 個指向同一 IP 的主機名,則會在反向 DNS 記錄上發生衝突。
如果您使用 Avahi API 手動發布 A 記錄並將其標記為非排他性,則可以執行此操作。您必須用 Python、C 或類似語言為每個伺服器編寫一個小型後台程序。
要使用的 API 呼叫是 avahi_entry_group_add_record,您需要將 AVAHI_PUBLISH_ALLOW_MULTIPLE 傳遞到 flags 欄位。這應該可以工作。
另一種方法是按照預期的方式使用服務發現,讓每個客戶端發布一個 HTTP 服務,並使用 firefox 外掛或類似外掛來瀏覽已發布的 Web 服務。或其他類型的服務瀏覽器。
Bonjour 曾經包含一個用於 Internet Explorer 的外掛,可以像書籤欄一樣執行此操作,我不確定它是否仍然有效。