avahi-daemon配置笔记

  • 起因

公司内网中搭了台centos7的机器做服务器,使用dhcp动态获取ip地址(公司网络管理混乱,有人用静态ip,有人用dhcp,所以保险起见还是用dhcp吧)。开发调试过程中,怕服务器ip会变,经常改ip也甚是烦躁,于是搜寻了一下解决方案,最后锁定使用MulticastDNS 方案。

Linux上使用avahi-daemon;

Mac/iOS上使用Bonjour,不用额外安装;

Windows上使用Bonjour for Windows,安装iTunes后就有了。

  • 过程

修改hostname,比如叫做server123:

sudo vim /etc/hostname #直接将server123写在此文件中,保存退出
hostname -F /etc/hostname #使改动生效。注意当前终端提示符中hostname尚未改过来,你重新ssh上去才能看到变化,不过这不影响使用。

配置avahi-daemon:

centos 7上默认已经安装并启用了avahi-daemon,所以改完hostname后,重启一下avahi-daemon即可:

service avahi-daemon restart #重启avahi-daemon

好了,在Mac上ping试一下吧:

ping server123.local

可以了吧,爽歪歪。

Mac的hostname叫做imac,那应该在centos上ping imac.local也行的吧,赶紧试一下:

ping imac.local

提示ping: unknown host imac.local

咦,肿莫回事?继续爬文,在这里看到了线索:
https://wiki.archlinux.org/index.php/avahi

按照它的说法一步一步来:

yum install -y nss-mdns

然后修改/etc/nsswitch.conf这个文件,将

hosts: files dns

改成:

hosts:      files mdns_minimal [NOTFOUND=return] dns

files表示本机的host文件,mdns_minimal这货是用来处理.local这个TLD解析的,后面跟个[NOTFOUND=return]表示如果是.local,且mdns无法解析成功,则return掉,不再继续进行dns解析。

改完后再次ping一下imac.local,成功!再自己ping一下自己:ping server123.local,也成功!

别急,没完呢,继续下文。

avahi-daemon工作了几分钟后,你会发现它就不工作了,从其他机器上再也无法访问server123.local,除非你再次重启avahi-daemon,它又能工作个几分钟,然后再次嗝儿屁。

搜索了一下,找到个帖子:
http://forums.fedoraforum.org/showthread.php?t=266511

一路跟踪到这里:
https://bugzilla.redhat.com/show_bug.cgi?id=444427

确定了问题所在:firewalld默认没有启用mdns服务。

解决方案如下:

firewall-cmd --get-services #打印出所有内置service,可以发现里面有个mdns
firewall-cmd --permanent --add-service=mdns #永久启用mdns服务(重启生效)
firewall-cmd --add-service=mdns #为此次登录启用mdns服务

再ping server123.local试试,是不是通了?问题解决。

最后不忘吐槽一下:默认安装并启用了avahi-daemon,却在防火墙中默认阻止了它,这种做法是不是脑子被驴给踢了?

附:(updated:2015-03-27

如何使得子域名也解析到同一台主机?比如主机的域名是server.local,我希望www.server.local、blog.server.local都能解析到这台主机。

方案在这里:https://github.com/airtonix/avahi-aliases
不过很可惜,该方案只适用于Debian/Ubuntu

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据