Avahi/mDNS 在最新版本的 Raspian 上默认运行。伟大的。非常方便就
ssh [email protected]
.
我正在 Mac 上进行开发并运行无头 Raspberry Pi 的本地网络。到目前为止,我已经能够使用 mDNS 访问 Pi,并且 Pi 也使用 mDNS 相互连接。
今天,我通过将 RP 设置在未连接到互联网的无线路由器上,将它们转移到专用本地网络。一旦我加入专用网络,我仍然可以通过 mDNS 访问它们:
% ssh [email protected]
Linux scheduler 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l
Last login: Mon Aug 1 09:07:43 2022
pi@scheduler:~ $
和
wes@macbook % ssh [email protected]
Linux crossing 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l
Last login: Mon Aug 1 09:07:46 2022
pi@crossing:~ $
但是当他们尝试互相访问时,我得到了一些我不明白的结果:
pi@scheduler:~ $ ping crossing.local
PING crossing.local (10.0.0.1) 56(84) bytes of data.
From 192.168.0.1 (192.168.0.1) icmp_seq=1 Destination Net Unreachable
From 192.168.0.1 (192.168.0.1) icmp_seq=2 Destination Net Unreachable
From 192.168.0.1 (192.168.0.1) icmp_seq=3 Destination Net Unreachable
From 192.168.0.1 (192.168.0.1) icmp_seq=4 Destination Net Unreachable
以下是 Avahi 的报道:
pi@scheduler:~ $ service avahi-daemon status
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-08-01 09:07:37 PDT; 41min ago
Main PID: 388 (avahi-daemon)
Status: "avahi-daemon 0.7 starting up."
Tasks: 2 (limit: 1438)
CGroup: /system.slice/avahi-daemon.service
├─388 avahi-daemon: running [scheduler.local]
└─414 avahi-daemon: chroot helper
Aug 01 09:08:08 scheduler avahi-daemon[388]: Leaving mDNS multicast group on interface wlan0.IPv4 with address 169.
Aug 01 09:08:08 scheduler avahi-daemon[388]: Joining mDNS multicast group on interface wlan0.IPv4 with address 192.
Aug 01 09:48:29 scheduler avahi-daemon[388]: Files changed, reloading.
Aug 01 09:48:29 scheduler avahi-daemon[388]: No service file found in /etc/avahi/services.
这是我的主机和主机名文件:
pi@scheduler:~ $ cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 scheduler
pi@scheduler:~ $ cat /etc/hostname
scheduler
avahi 对此有何评论?让我们看看:
pi@brs-scheduler:~ $ avahi-resolve --name brs-crossing.local -4
brs-crossing.local 192.168.0.214
pi@brs-scheduler:~ $ ifconfig | grep "inet 192"
inet 192.168.0.109 netmask 255.255.255.0 broadcast 192.168.0.255
pi@brs-scheduler:~ $ ping brs-crossing.local
PING brs-crossing.local (10.0.0.1) 56(84) bytes of data.
From 192.168.0.1 (192.168.0.1) icmp_seq=1 Destination Net Unreachable
因此,由于某种原因,在此专用网络上,mDNS 可以正确解析,但 ping 和 ssh 无法正确解析?
我错过了什么?
不出所料,由于 pi 在本地网络上工作正常,但在使用新路由器的私有网络上停止工作,这与新路由器的配置有关,而不是 mDNS。
mDNS 工作正常:
pi@scheduler:~ $ avahi-resolve --name crossing.local -4
crossing.local 192.168.0.214
专用网络上的新路由器有两种工作模式“路由器”和“接入点”。在“路由器”模式下,路由器将 DNS 名称服务器 IP 推送到客户端,该客户端以某种方式托管 ping 和 ssh 以及其他服务,尽管 mDNS 工作正常。
pi@scheduler:~ $ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.0.1
将路由器置于“接入点”模式并手动打开 DHCP 后,一切正常。
模糊的问题。模糊的解决方案。
我在 Raspbian Buster 上遇到了同样的问题,解决方案是添加一个包含内容的文件
/etc/mdns.allow
.local.
.local
这足以使 ping somename.local
发挥作用。为后代提供更多详细信息:
这是一个非常奇怪的问题。如果我向该命令发送大约 30 到 50 次垃圾邮件,我就能让单个
ping somename.local
命令发挥作用。我比较了成功的输出和未成功的输出之间的
strace
输出,显然失败的输出找不到
/etc/mdns.allow
。奇怪的是,成功的人甚至从未检查过这个文件。一定有某种情况不需要进行此检查?