Debian mDNSで名前解決して接続する

Raspbianマシンが最初からavahiが入ってるおかげでmDNSで名前を解決して接続できるのが便利なので、DebianサーバーでもmDNSで名前が解決できるようにavahiをセットアップすることにした。

まずは関連パッケージをインストール。必要な/etc/nsswitch.confの書き換え等は全部パッケージがやってくれる。

sudo apt-get install avahi-daemon libnss-mdns

avahiが稼働するとmDNSで解決できる名前は/etc/hostnameに書かれた名前に.localをつけたものになる。

mDNSの設定に必要な作業は基本はこれだけだが、手元のDebianサーバーはファイヤーウォールで余計な接続をすべてブロックする設定になってるので、名前解決のためにはクエリを受け入れるようにポートを開放する必要がある。なので、/etc/iptables/rules.v4のどこかに以下の設定を追記する。

-A INPUT -d 224.0.0.251/32 -p udp -m udp –dport 5353 -j ACCEPT

mDNSのクエリはマルチキャスト(224.0.0.251)でUDPのポート5353に届くので、これをファイヤーウォールが受け入れる様にすればいい。

同様にせっかくデフォルトでavahiはIPv6でも答えるのだから/etc/iptables/rules.v6にも追記。

-A INPUT -d ff02::fb/128 -p udp -m udp –dport 5353 -j ACCEPT

IPv6のマルチキャストアドレスはサービスごとに割り当てられてるのでmDNSに割り当てられた[ff02:fb]を聞く様にポートを開く。

面倒なので、avahi-daemonの起動とファイヤーウォールルールの反映のために再起動すれば、以後、mDNSで名前解決をこころみるとちゃんと答えてくれるようになる。