
自宅LANとか小規模なネットワークで複数台のPCのホスト名を解決したいけど、DNSサーバーを建てるのは面倒だな、って時はmDNS(マルチキャストDNS)を使うのが楽。
mDNS(Multicast DNS) aka Bonjour / Avahi
mDNSは、
- マルチキャストを使って基本的にはサブネット内のホスト名を解決する(ルーターを越えられない)
- その代わり、DNSみたいにサーバー構築不要
- ドメイン名は「.local」固定
試した環境
- Windows
- Windows 11 Home 24H2
- macOS
- macOS Sequoia 15.4
- Linux
- Debian 12.10
Windows 11 24H2
インストール
標準提供されるので不要。
起動
自動起動して停止できない「DNS Client」サービスによってmDNSも提供される。
サービスはRunningのはず。
PS C:\Users\nissy> Get-Service dnscache
Status Name DisplayName
------ ---- -----------
Running dnscache DNS Client
mDNSのポート、UDP:5353もリッスンしているはず。
PS C:\Users\nissy> netstat -ano | findstr :5353
UDP 0.0.0.0:5353 *:* 3216
UDP [::]:5353 *:* 3216
上記で確認したPID(3216)を tasklist
コマンドで確認。
PS C:\Users\nissy> tasklist /FI "PID eq 3216"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
svchost.exe 3216 Services 0 5,712 K
UDP:5353はGoogle Chrome が起動している場合でもリッスンしている。
PS C:\Users\nissy> netstat -ano | findstr :5353
UDP 0.0.0.0:5353 *:* 32552
UDP 0.0.0.0:5353 *:* 3216
UDP 0.0.0.0:5353 *:* 32552
UDP 0.0.0.0:5353 *:* 32552
UDP 0.0.0.0:5353 *:* 32552
UDP [::]:5353 *:* 32552
UDP [::]:5353 *:* 3216
UDP [::]:5353 *:* 32552
PS C:\Users\nissy> tasklist /FI "PID eq 32552"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
chrome.exe 32552 Console 1 282,180 K
確認
mDNS 用の確認コマンドは用意されていなみたいなので ping -4
とか ping -6
を打つくらいだと思う。
> ping -4 win11pc.local
win11pc [192.168.100.113]に ping を送信しています 32 バイトのデータ:
192.168.100.113 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.100.1113 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.100.1113 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.100.1113 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.100.1113 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
macOS Sequoia 15.4
インストール
標準提供されるので不要。
起動
mDNSResponder が自動起動しているはす。
% pgrep -afl 'mDNSResponder$'
617 /usr/sbin/mDNSResponder
通常のリッスンポート確認方法の lsof -nP -iUDP:5353
では出てこないので nettop -p mDNSResponder
で確認する。
% nettop -p mDNSResponder
実行すると以下のようにUDP:5353の通信状況が表示される。
interface
mDNSResponder.617
udp6 *.5353<->*.* en0
udp4 *:5353<->*:* en0
抜けるには q
キー
確認
dns-sd
コマンドで確認できる。
% dns-sd -G v4 mac15.local
DATE: ---Sun 20 Apr 2025---
19:44:16.115 ...STARTING...
Timestamp A/R Flags IF Hostname Address TTL
19:44:16.116 Add 40000003 21 mac15.local. 0.0.0.0 1 No Such Record
19:44:16.116 Add 40000003 1 mac15.local. 127.0.0.1 4500
19:44:16.116 Add 40000003 20 mac15.local. 169.254.55.226 4500
19:44:16.116 Add 40000002 11 mac15.local. 192.168.100.124 4500
IPv6も確認したければ dns-sd -G v4v6 ホスト名.local
抜けるには ctrl + c
Debian 12.10
インストール
入っていなければインストール
$ sudo apt install avahi-daemon avahi-utils
起動
Debian 12 なら自動起動が enabled で、かつ起動もしているはず。
こんな感じ。
$ systemctl status avahi-daemon.socket
● avahi-daemon.socket - Avahi mDNS/DNS-SD Stack Activation Socket
Loaded: loaded (/lib/systemd/system/avahi-daemon.socket; enabled; preset: enabled)
Active: active (running) since Sat 2025-04-19 10:11:22 JST; 45min ago
Triggers: ● avahi-daemon.service
Listen: /run/avahi-daemon/socket (Stream)
CGroup: /system.slice/avahi-daemon.socket
avahi-daemon.service は avahi-daemon.socket が必要に応じて起動してくれるので、avahi-daemon.socket が active (running)ならヨシ
確認
正引き
$ avahi-resolve-host-name -n deb12pc.local
deb12pc.local 192.168.100.41
逆引きもできる
$ avahi-resolve-address 192.168.100.41
192.168.100.41 deb12pc.local
おまけ
ついでに調べたこと
- 「aka」「a.k.a.」
- 「also known as(オールソー・ノウン・アズ)」の略
- 意味は「別名〜」「通称〜」「〜としても知られてる」
- Avahiの読み方
- Wikipediaでは「アバヒ」
Avahi とは、キツネザル下目・インドリ科のウーリーキツネザル(アバヒ属)のことであり、マダガスカルだけに棲む霊長類である。Wikipedia
- Wikipediaでは「アバヒ」