Friday, September 3, 2010

Local hostname workaround (via mDNS)

今晚在宿舍里折腾了半天终于把问题解决了.

scenario: 
屋里有个wireless router, 想让自己的linux, mac osx, iphone, ipod touch能互相用hostname resolve. 而不用static ip.
这样就能很方便地在机器之间访问(比如ssh, ftp, 甚至互相导git的commit等), 而不是依赖于有可能会更改的dhcp分配的ip地址. 

workaround:
这主要是使用zeroconf协议集里的mDNS技术来完成的, 使得在同一个网段内的机器可以互相discover.
并且使用 hostname.local 能解析出对方的IP地址.

首先, linux要安装avahi-daemon等一系列工具.
avahi是zeroconf的一种implementation, 支持mDNS协议, 
它使得机器能在LAN范围内广播service(SSH)等, 而不用通过外围DNS解析.
(router没有DNS功能)
安装成功后, 可以使用avahi-discover, avahi-resolve等工具测试是否成功.

最重要的是, 必须安装libnss-mdns
这个lib使得其它如ssh/ping等程序能使用mDNS正确解析出local domain的hostname.
(我的机器已经把avahi/bonjour都配置好了, 但在这个问题上折腾了两小时, 悲剧啊... 后来总算google到了答案.)

而apple家的产品用的是bonjour, 已经preinstalled. 无需额外配置.

teststing:
ping/ssh 到 hostname.local 检查是否能正确解析出主机ip即可.

No comments: