Linux

avahi-daemon 和“.local”域問題

  • February 16, 2021

我有一個24/7執行的基於****Ubuntu 16.04的 HTPC/媒體伺服器。據我所記得使用官方 Ubuntu 發行版,我一直遇到avahi-daemon問題。這個問題經常在網上討論。有些人決定只刪除守護程序,但是,我實際上需要它,因為我正在執行 CUPS 伺服器並使用 Kodi 作為我的 AirPlay 接收器。

問題

mDNS/DNS-SD 本質上與單播 DNS 區域 .local 不兼容。我們強烈建議不要在這樣的網路設置中使用 Avahi 或 nss-mdns。注意:nss-mdns 通常不與 Avahi 捆綁在一起,需要單獨下載和安裝。(avahi.org)

症狀很簡單 - 正常執行大約 2-4 天后,網路連接將斷開,並將記錄下來

Mar 17 18:33:27 15 avahi-daemon[1014]: Withdrawing address record for 192.168.1.200 on enp3s0.
Mar 17 18:33:27 15 avahi-daemon[1014]: Leaving mDNS multicast group on interface enp3s0.IPv4 with address 192.168.1.200.
Mar 17 18:33:27 15 avahi-daemon[1014]: Interface enp3s0.IPv4 no longer relevant for mDNS.

如果您重新連接乙太網插頭或重新連接軟體端,網路毫無問題地恢復。

可能的解決方案

官方 wiki 上列出了三個解決方案,自2016 年 6 月以來一直沒有功能,所以我提供了一個非直接的archive.org連結

1.) 編輯**/etc/nsswitch.conf**從

"hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4"

hosts: files dns mdns4

2.) 修改**/etc/avahi/avahi-daemon.conf**

domain-name=.local

domain-name=alocal

3.)“要求管理員移動 .local 區域”(如維基上所說)

我做了什麼

一個解決方案似乎對我不起作用 - 守護程序仍然有效,但是,網路將像以前一樣出現故障(公平地說,在 wiki 上確實*“* Y our Mileage May Vary ” )

第二種解決方案導致守護程序看似正常執行(如果您查看日誌則沒有錯),但**iOS 設備無法將機器“**視為”列印機或 AirPlay 接收器(以及我的 Windows 機器上的 iTunes)

第三種解決方案很棘手,因為我並不精通網路如何運作的*“來龍去脈” ;*而且我不確定我是否真的嘗試過。這就是我的意思:在執行Asuswrt-Merlin的華碩路由器上,我進入了設置子類別 /LAN/DHCP 伺服器/基本配置。在那裡,我將“ RT-AC68U’s Domain Name ”設置為“lan”(我在網上看到的一個域名,因為它不會與任何東西沖突,不像“local”)。據我了解,這就是“移動 .local 區域”的意思。如果這實際上是正確的,那麼這個解決方案對我也不起作用。

結論

所以我該怎麼做?我已經與這個問題作鬥爭了 4 個多月了,網上的每個答案都歸結為我已經嘗試過的答案;坦率地說,我完全迷路了。提前致謝!

我有同樣的問題。我有一個帶有 Mac 的家庭網路,他們希望 avahi/bonjour 和 .local 域能夠正確共享。我的 ISP 提供了一個 DSL 路由器,它提供私有 IP 地址 (192.168.1.*) 並提供本地域 (attlocal.net)。然而,它也作為 .local 單播域的權威做出響應——即使它實際上並沒有。這是一個禁忌,但他們還是這樣做了。我留下了一個網路,Mac 可以發現並連接到其他 Mac,Linux 可以看到 avahi 服務,但無法連接到它們。

症狀: 如果您的 linux 系統顯示服務但無法通過 nautilus 連接。如果 DLNS 服務無法連接。如果ping hostname.local解決不了。最後,如果dig local為您的路由器/ISP 提供權限部分結果。

什麼對我有用:創建一個/etc/mdns.allow包含以下兩行的文件

   .local
   .local.

然後編輯並在以將項目替換為開頭/etc/nsswitch.conf的行中。結果對我來說是這樣的:hosts:``mdns4_minimal``mdns4

hosts:     files mdns4 [NOTFOUND=return] dns

最後重新啟動或sudo systemctl restart network. 這在 Ubuntu 18 到 21 以及 Debian Stretch 和 Buster 上對我有用,包括在 Raspberry Pi 上。因此,在 Ubuntu 上瀏覽文件中的其他位置(nautilus)時,我可以看到並附加到 samba 共享、AFP 共享甚至 SSH 埠。

為什麼一開始就壞了? mdns_minimal沒有工作,但mdns4沒有。這不是預期的結果,我試圖報告一個錯誤,mdns_minimal但後來我在他們的 GitHub 網站上找到了一個明確的答案:https ://github.com/lathiat/nss-mdns 。 mdns_minimal除非兩個域都是 .local 並且 IPv4 來自 169.254 自配置範圍,否則將無法解析。它也不會查看/etc/mdns.allow文件。因此,如果您需要解析 .local 並且沒有自配置地址,則可能需要nsswitch.conf如上所述替換它。

我認為第三種解決方案是當您可以訪問路由器配置時要走的路。我會嘗試將“RT-AC68U 的域名”設置為空白。

我要做的下一件事是執行類似wireshark的東西,並觀察avahai-daemon發送和接收的數據包,以及從任何以.local…結尾的域名發送和接收的任何數據包,如果avahai以外的東西正在設置LAN域名,.local你會在那裡找到它。

這個問題也有可能完全是另外一回事,wireshark 也可能會告訴你。

如果您完全使用 Avahai 來為網路上的機器分配域名,您可以考慮使用 dnsmasq。你可以在你的 RT-AC88U 路由器上執行它,或者從你的 Ubuntu 機器上執行它(事實上,它可能已經在你的 ubuntu 機器上執行了,你只需要調整配置文件)。

在 Asus-Merlin 下設置 dnsmasq 的文件

引用自:https://unix.stackexchange.com/questions/352237