mDNSとは
mDNS(multicast DNS) は、ローカルセグメント内の端末を、 マルチキャストを利用して自動的に探索するための仕組みです。
mDNSは、Appleが策定した仕様でRFC6762で定義されています。
Apple的には当初はRendezvous(ランデブー)と呼ばれていましたが、Mac OS X v10.4からBonjourという名前で呼ばれています。
iTunesやAirDropなどApple製品で幅広く使われています。
IETFでは、Zero Configuration Networkingとして標準化されています。
DNSではユニキャストで名前解決を図りますが、
mDNSではマルチキャストアドレス 224.0.0.251 の UDP 5353 ポートに DNS クエリを投げることにより、
multicast groupにJOINしている端末が応答します。
mDNSのTLDは.localとなります。
どういうときに使うと便利なの?
組み込み機器やRaspberryPiなどモニタレスのものは、DHCPなどで動的にIPが配布されるとIPを調べるのが大変です。
ですので、動的に名前解決する仕組みがあることで、一意に端末を指定することができ大変便利です。
avahi-daemonの導入
mDNSに対応するためにavahi-daemonのインストールが必要です。avahiはアバヒと読むらしいです。
% pi@raspberrypi:~ $ sudo apt-get install avahi-daemon
ホスト名を設定する
% sudo vi /etc/hostname
今回はraspberrypiにしました。
raspberrypi
avahiの設定
SSHサービスを登録します。
% sudo vi /etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
デーモンの再起動
% sudo /etc/init.d/avahi-daemon restart
動作確認
mDNS multicast groupにJOINしていることが確認できます。
% pi@raspberrypi:~ $ sudo /etc/init.d/avahi-daemon status
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-04-19 10:01:06 JST; 4min 16s ago
Main PID: 345 (avahi-daemon)
Status: "avahi-daemon 0.6.32 starting up."
CGroup: /system.slice/avahi-daemon.service
├─345 avahi-daemon: running [raspberrypi.local]
└─365 avahi-daemon: chroot helper
4月 19 10:01:06 raspberrypi systemd[1]: Started Avahi mDNS/DNS-SD Stack.
4月 19 10:01:06 raspberrypi avahi-daemon[345]: Network interface enumeration completed.
4月 19 10:01:06 raspberrypi avahi-daemon[345]: Server startup complete. Host name is raspberrypi.local. Local service cookie is 4258905342.
4月 19 10:01:06 raspberrypi avahi-daemon[345]: Service "raspberrypi" (/services/ssh.service) successfully established.
4月 19 10:01:09 raspberrypi avahi-daemon[345]: Joining mDNS multicast group on interface wlan0.IPv6 with address fe80::741d:fe06:5e95:b3ab.
4月 19 10:01:09 raspberrypi avahi-daemon[345]: New relevant interface wlan0.IPv6 for mDNS.
4月 19 10:01:09 raspberrypi avahi-daemon[345]: Registering new address record for fe80::741d:fe06:5e95:b3ab on wlan0.*.
4月 19 10:01:13 raspberrypi avahi-daemon[345]: Joining mDNS multicast group on interface wlan0.IPv4 with address 10.1.20.30.
4月 19 10:01:13 raspberrypi avahi-daemon[345]: New relevant interface wlan0.IPv4 for mDNS.
4月 19 10:01:13 raspberrypi avahi-daemon[345]: Registering new address record for 10.1.20.30 on wlan0.IPv4.
PCから疎通確認
名前で疎通確認をしてみます。
※ ルーターがマルチキャストルータに対応していれば別ですが、サブネットは越せないので同一セグメントじゃないと探索できません
% ping raspberrypi.local
PING raspberrypi.local (10.1.20.30): 56 data bytes
64 bytes from 10.1.20.30: icmp_seq=0 ttl=64 time=227.991 ms
SSHでアクセス
名前でアクセスできることを確認できました。
% ssh raspberrypi.local -l username
pi@raspberrypi.local's password:
Linux raspberrypi 4.14.30-v7+ #1102 SMP Mon Mar 26 16:45:49 BST 2018 armv7l