如何使用 Avahi 发布 Ubuntu 机器的主机名

如何使用 Avahi 发布 Ubuntu 机器的主机名

如何在 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 分钟才能拾取其他箱子。

相关内容