如何在 Ubuntu 上配置 Avahi 以自动广播和发现本地网络上每个 Linux 服务器的 DNS 信息?
我已经在本地主机(hostname mylocalhost
)和测试服务器(hostname mytestserver
)上运行了此程序,但所有主机名查找仍然失败:
$ sudo apt-get install avahi-daemon
$ sudo nano /etc/avahi/avahi-daemon.conf
-#host-name=foo
+host-name=<hostname>
-#publish-addresses=yes
+publish-addresses=yes
$ sudo service avahi-daemon restart
$ sudo update-rc.d avahi-daemon defaults
$ avahi-daemon --check
$ host mytestserver
Host mytestserver not found: 3(NXDOMAIN)
$ host mytestserver.local
Host mytestserver.local not found: 3(NXDOMAIN)
$ ping mytestserver
ping: unknown host mytestserver
$ ping mytestserver.local
ping: unknown host mytestserver.local
我确认我的防火墙已禁用,因此不应该阻止它。我还阅读了 Ubuntu 的维基页面在 Zeroconf 和 mDNS 上,但没有帮助。
我究竟做错了什么?
答案1
$ host mytestserver
Host mytestserver not found: 3(NXDOMAIN)
$ ping mytestserver
ping: unknown host mytestserver
主机名mytestserver
不在/etc/hosts
本地/局域网 DNS 设置中。这与 avahi 无关。
$ host mytestserver.local
Host mytestserver.local not found: 3(NXDOMAIN)
$ ping mytestserver.local
ping: unknown host mytestserver.local
这与 avahi 相关,请查看下文。
在 中/etc/nsswitch.conf
,该hosts
行应如下所示:
hosts: files mdns4_minimal [NOTFOUND=return] dns
files
表示检查 /etc/hosts,然后mdns4_minimal
表示检查 avahi。
有几件事需要检查/etc/avahi/avahi-daemon.conf
。
在server
部分中,allow-interfaces
应该取消设置/注释,或者具有您打算使用的接口avahi:
#allow-interfaces=
用于netstat
检查是否avahi
正在监听所有接口:
# netstat -npl|grep avahi
udp 0 0 0.0.0.0:5353 0.0.0.0:* 696/avahi-daemon: r
udp6 0 0 :::5353 :::* 696/avahi-daemon: r
我遇到过一些情况,这些行未注释,并且其中包含错误的接口,从而阻止了目标网络上的 avahi。
在publish
部分中,设置publish-workstation
为是(默认为否):
publish-workstation=yes
一般来说,publish-addresses=yes
默认值应该足够了。但是,如果没有运行共享服务(vnc/samba/etc),有时(根据过去的经验)avahi 似乎不会发布/宣布机器。所以我们启用publish-workstation=yes
它来强制执行。
最后说明一下,有时 avahi 需要 2 到 5 分钟才能拾取其他箱子。