无法解析 LAN 上的 hostname.local

Man*_*mie 5 debian avahi lan

我曾经能够ssh user@hostname.local在 LAN 上的计算机之间进行通信,但它不再工作了。当然,我可以使用 IP 进行 ssh,但它是 DHCP,因此它可能会不时发生变化。两台机器都运行 Debian 9.12,其中一台是 Windows 主机中的虚拟机,但它仍然可以工作;我没有乱搞配置文件,只是定期更新。

ping hostname.local
ping: hostname.local: Name or service not known
Run Code Online (Sandbox Code Playgroud)

(这可能不完全是我从法语翻译的消息)

ssh hostname.local
ssh: Could not resolve hostname hostname.local: Name or service not known
Run Code Online (Sandbox Code Playgroud)

(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 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我尝试使用avahi-browse和发现主机和服务nbtscan,它们依赖于 avahi (zeroconf / Bonjour),但它们似乎只找到它们运行的​​主机。

(我知道这可能与其他问题重复,但我没有找到任何答案,而且我没有足够的声誉来做任何事情)

Man*_*mie 4

找到了 !

看来我的路由器确实有一个 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.
Run Code Online (Sandbox Code Playgroud)

这就回答了.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
Run Code Online (Sandbox Code Playgroud)

以便它使用路由器的 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
Run Code Online (Sandbox Code Playgroud)

ping google.fr以确保处理 WAN 查询)