vol37. mDNSとは
Linux 上で、avahi を使って、名前解決をする仕組みを知りたかったので調べてみた。 UDPの上位レイヤーで動作するmDNSというプロトコルを使用している。
mDNS とは何か
- multicast DNSの略
- 通常のDNSは、DNS server に問い合わせ名前解決を行う。
- mDNSは、マルチキャスト転送で、ネットワーク内のデバイスに問い合わせる事により、
名前解決を行う- DNSサーバーがいらない。
- RFC6762で規定
名前解決の流れ
- client は、mDNS query メッセージをマルチキャストで投げる
- 対応する機器はmDNS response メッセージをマルチキャストで応答
- mDNSは、マルチキャストアドレス 224.0.0.251、UDP 5353ポートを使用
- IPv4, IPv6のIP address の問い合わせは、query のType field で指定
zeroconf との関係
- 名前解決は、zeroconf 3つの技術のうちの1要素
- ip address の割り当て
- 名前解決
- device の位置の特定
- avahi はzeroconf を実現するためのLinux上での実装。apple はbonjourという実装。
nsswitchとは
- Linux における名前解決の為のclient system(avahi はmDNSの為の、server systemの
位置づけ) - local file, mdns, dns 等複数ある名前解決手法のうち、どの手法を用いて、どの順序
で名前解決をするかを決める。 設定ファイル
/etc/nsswitch.conf hosts: files mdns4_minimal [NOTFOUND=return] dns mdns
優先順位は、files(/etc/hosts), mdn4_minimal, dns, mdns の順序。
miinimal はホスト名に.localが含まれていないと名前解決を行わない
mdns4 はIPv4のみ
mdnsはIPv4, IPv6双方で名前解決を行う。ping hogehote.local とうつと、上記の設定では、まず/etc/hostsの中身を確認し、次に
mdns ipv4 プロトコルで、名前解決を試みる。失敗したら、dns server に問い合わせを行い、 最後に、mdns (v4, v6) で解決を試みるというながれ。