Debian

無法解析 LAN 上的 hostname.local

  • March 30, 2020

我曾經能夠ssh user@hostname.local在我的區域網路上的機器之間進行連接,但它不再工作了。我當然可以使用 IP 進行 ssh,但它是 DHCP,因此它可能會不時更改。兩台機器都執行 Debian 9.12,一台是 Windows 主機中的虛擬機,但它仍然可以工作;我沒有弄亂配置文件,只是定期更新。

ping hostname.local
ping: hostname.local: Name or service not known

(這可能與我從法語翻譯的資訊不完全一樣)

ssh hostname.local
ssh: Could not resolve hostname hostname.local: Name or service not known

(ssh 輸出英文)

來自 avahi.org:

Avahi 是一個通過 mDNS/DNS-SD 協議套件促進本地網路上服務發現的系統

我研究過/etc/resolv.conf, /etc/avahi/avahi-daemon.conf/etc/nsswitch.conf但它是標準的開箱即用配置。

/etc/resolv.confnetwork-manager每次啟動時重置)

# Generated by NetworkManager
search lan
nameserver xx.xx.xx.xx # DNS IPs obtained from DHCP
nameserver xx.xx.xx.xx 

man resolv.conf表示search預設情況下該列表僅包含本地域名(類似這樣,我從法文手冊頁翻譯);不應該local代替lan嗎?

我嘗試更改它並立即對我的區域網路上的另一台主機執行 ping 或 ssh(不重新啟動網路管理器),但它不起作用。當我重新啟動網路管理器時,它會重寫/etc/resolv.conf並設置search lan.

/etc/nsswitch.conf(預設,我沒有做任何更改)

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

我嘗試使用 and 發現依賴於 avahi (zeroconf / Bonjour) 的主機和服務avahi-browsenbtscan但它們似乎只找到它們執行的主機。

(我知道這可能是其他問題的重複,但我沒有找到任何答案,而且我沒有足夠的聲譽做任何事情)

找到了 !

看來我的路由器確實有一個 DNS 伺服器:

nslookup host_ip router_ip
Server:     192.168.1.254
Address:    192.168.1.254#53

69.1.168.192.in-addr.arpa   name = hostname.lan.

所以這回答了.localvs的.lan問題。在最近的 Debian 中,本地域是.lan.

仍然,ping hostname.lan返回未知主機。

感謝https://askubuntu.com/questions/623940/network-manager-how-to-stop-nm-updating-etc-resolv-conf,我發現這/etc/resolv.conf是一個符號連結/var/run/NetworkManager/resolv.conf;所以我不得不用我自己的替換它resolv.conf

search lan
nameserver 192.168.1.254

以便它使用路由器的 DNS(如有必要,它將路由查詢)。

重新啟動網路管理器systemctl restart network-manager,它就像一個魅力:

$ ping hostname.lan
PING hostname.lan (192.168.1.69) 56(84) bytes of data.
64 bytes from hostname.lan (192.168.1.69): icmp_seq=1 ttl=64 time=2.02 ms

ping google.fr以確保處理 WAN 查詢)

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