
はじめに
「あれ?昨日まで動いていたのに、急にホスト名でアクセスできなくなった…」
macOSとUbuntu (Multipass) 環境でmDNS/Avahiを活用していると、誰もが一度は経験するであろうこの問題。ローカルネットワークでのホスト名解決は、開発ワークフローを劇的に効率化する一方で、予期せぬトラブルに遭遇することも少なくありません。
本記事では、mDNS/Avahiを使ったホスト名解決でよくある問題とその原因を深掘りし、具体的なデバッグツールと手順を用いて、あなた自身で問題を解決できる「トラブルシューティングのプロ」になるための実践的な知識を提供します。
ローカル開発環境の効率化を目指すソフトウェアエンジニアやシステム管理者の方々にとって、この記事が「もう迷わない」ための決定版となることを目指します。
対象読者
- mDNS/Avahiのトラブルシューティングに困っている開発者: ホスト名解決やサービスディスカバリがうまくいかず、原因究明と解決策を探している方。
- MultipassやLinux環境のネットワーク設定に課題を感じている方: VMやコンテナ環境でのmDNS/Avahiのデバッグ方法を知りたい方。
- ネットワークのデバッグツールに関心がある方:
dns-sd
、avahi-browse
、getent hosts
などのコマンドラインツールを使ったデバッグ手法を学びたい方。 - 開発環境の安定稼働を目指す方: mDNS/Avahiを導入した環境で、予期せぬ問題が発生した際の対処法を身につけたい方。
動作検証環境
この記事で紹介するcurlコマンドの動作は、以下の環境で検証しています。
- OS : macOS Tahoe Version 26.0
- ハードウェア : MacBook Air 2024 M3 24GB
- Multipass : Multipass version 1.16.1
目次
よくあるトラブルとその原因
mDNS/Avahiのホスト名解決がうまくいかない場合、いくつかの典型的な原因が考えられます。
.local
ドメインで解決できない
最も一般的な問題の一つが、hostname.local
の形式でホスト名が解決できないケースです。
- 原因1: Avahi/Bonjourサービスが停止している、または起動していない
- mDNSによるホスト名解決は、macOSのBonjour(mDNSResponder)やLinuxのAvahiデーモンといったサービスがバックグラウンドで動作していることで実現されます。これらのサービスが停止していると、当然ながらホスト名解決は行われません。
- 原因2: ファイアウォールによるブロック
- mDNSはUDPポート5353を使用します。OSやネットワーク機器のファイアウォール設定によってこのポートがブロックされていると、mDNSパケットが通信できず、ホスト名解決に失敗します。
- 原因3: ホスト名が正しく設定されていない、または重複している
- mDNSは、各デバイスが自身のホスト名をネットワークにブロードキャストすることで機能します。ホスト名が正しく設定されていない、あるいはネットワーク上に同じ
.local
ホスト名を持つデバイスが複数存在する場合、解決に問題が生じることがあります。
- mDNSは、各デバイスが自身のホスト名をネットワークにブロードキャストすることで機能します。ホスト名が正しく設定されていない、あるいはネットワーク上に同じ
- 原因4:
nsswitch.conf
の設定不備 (Linux)- Linuxシステムでは、ホスト名解決の順序を
/etc/nsswitch.conf
ファイルで定義します。ここにmdns_minimal [NOTFOUND=return]
やmdns4_minimal [NOTFOUND=return]
が含まれていないと、mDNSによる解決が試みられません。
- Linuxシステムでは、ホスト名解決の順序を
サービスが見つからない
ssh user@hostname.local
のように、ホスト名解決はできるものの、特定のサービス(SSHなど)に接続できない場合があります。
- 原因: サービスが起動していない、またはmDNSで公開されていない
- mDNSはホスト名解決だけでなく、サービスディスカバリ(ネットワーク上のサービスを発見する機能)も提供します。サービス自体が起動していないか、AvahiなどのmDNSデーモンがそのサービスをネットワークに公開するように設定されていない可能性があります。
ネットワーク接続の問題
根本的なネットワーク接続に問題がある場合、mDNS以前に通信自体ができません。
- 原因: IPアドレスの競合、ケーブルの断線、Wi-Fi接続不良など
- 物理的な接続やIPアドレスの設定に問題がないか、基本的なネットワークトラブルシューティング(
ping IPアドレス
など)から確認する必要があります。Multipass環境では、VMのネットワークモード(NAT vs ブリッジ)も影響します。
- 物理的な接続やIPアドレスの設定に問題がないか、基本的なネットワークトラブルシューティング(
トラブルシューティングの基本フロー
問題が発生した場合、以下のステップで順を追って確認することで、原因を特定しやすくなります。
Avahiサービスの稼働状況確認 (systemctl status avahi-daemon
)
Linux (Ubuntu) 環境では、まずAvahiデーモンが正しく動作しているかを確認します。
systemctl status avahi-daemon
active (running)
と表示されていれば正常に動作しています。
出力例:
● avahi-daemon.service - Avahi mDNS/DNS-SD Daemon
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-26 10:00:00 UTC; 1 day 5h ago
TriggeredBy: ● avahi-daemon.socket
Docs: man:avahi-daemon(8)
Main PID: 1234 (avahi-daemon)
Status: "avahi-daemon 0.8 starting up."
Tasks: 2 (limit: 4634)
Memory: 1.5M
CPU: 50ms
CGroup: /system.slice/avahi-daemon.service
├─1234 "avahi-daemon: running [ubuntu-vm.local]"
└─1235 "avahi-daemon: chroot helper"
Oct 26 10:00:00 ubuntu-vm systemd[1]: Starting Avahi mDNS/DNS-SD Daemon...
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Found user 'avahi' (UID 108) and group 'avahi' (GID 115).
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Successfully dropped root privileges.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: avahi-daemon 0.8 starting up.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Successfully established service.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Network interface enumeration completed.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Registering host name 'ubuntu-vm.local'.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Server startup complete. Host name is ubuntu-vm.local.
Oct 26 10:00:00 ubuntu-vm avahi-daemon[1234]: Service "ubuntu-vm" (SSH Remote Terminal) established.
inactive (dead)
やfailed
と表示されている場合は、サービスが停止しているか、起動に失敗しています。sudo systemctl start avahi-daemon
で起動を試み、エラーログを確認してください。
systemctl status avahi-daemon
出力例:
● avahi-daemon.service - Avahi mDNS/DNS-SD Daemon
Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2023-10-26 10:00:00 UTC; 1 day 5h ago
TriggeredBy: ● avahi-daemon.socket
Docs: man:avahi-daemon(8)
Main PID: 1234 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 4634)
Memory: 0B
CPU: 0
CGroup: /system.slice/avahi-daemon.service
Oct 26 10:00:00 ubuntu-vm systemd[1]: Starting Avahi mDNS/DNS-SD Daemon...
Oct 26 10:00:00 ubuntu-vm systemd[1]: Started Avahi mDNS/DNS-SD Daemon.
ホスト名の確認と設定 (hostnamectl
)
デバイスのホスト名が正しく設定されているかを確認します。
hostnamectl
Static hostname
が期待するホスト名になっているか確認します。
出力例:
Static hostname: ubuntu-avahi
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 574a27366fd34bdca513d4c15b24504d
Boot ID: bc7a0bb079a54c098e60ef89d3f2d9cd
Virtualization: qemu
Operating System: Ubuntu 24.04.3 LTS
Kernel: Linux 6.8.0-85-generic
Architecture: arm64
Hardware Vendor: QEMU
Hardware Model: QEMU Virtual Machine
Firmware Version: edk2-stable202302-for-qemu
Firmware Date: Wed 2023-03-01
Firmware Age: 2y 7month 5d
- 必要であれば、
sudo hostnamectl set-hostname <新しいホスト名>
で変更できます。変更後はAvahiデーモンの再起動が必要です。
nsswitch.conf
の確認
LinuxシステムでmDNSによるホスト名解決を有効にするには、/etc/nsswitch.conf
に適切なエントリが必要です。
cat /etc/nsswitch.conf | grep hosts
通常、hosts:
の行に mdns_minimal [NOTFOUND=return]
または mdns4_minimal [NOTFOUND=return]
が含まれている必要があります。
hosts: files mdns4_minimal [NOTFOUND=return] dns
- もし含まれていない場合は、
libnss-mdns
パッケージがインストールされているか確認し、インストールされていない場合はsudo apt install libnss-mdns
でインストールしてください。通常、このパッケージのインストール時に自動的に設定が追加されます。
デバッグツールの活用
より詳細な情報を得るために、mDNS/Avahi専用のデバッグツールを活用しましょう。
dns-sd
(macOS) でサービスを探索する
macOSでは、dns-sd
コマンドを使ってネットワーク上のmDNSサービスを探索できます。
dns-sd -B _ssh._tcp local. # SSHサービスを探索
出力例(SSHサービスが発見された場合):
Browsing for _ssh._tcp.local.
DATE: ---Mon 29 Sep 2025---
19:33:45.784 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
19:33:45.786 Add 2 28 local. _ssh._tcp. my-ubuntu-vm
この出力は、MyUbuntuVM
と MyMacBookPro
というホストがSSHサービスを公開していることを示しています。Add
の行が表示されれば、サービスがネットワーク上で発見されていることを意味します。
特定のVMのSSHサービスを探索する場合は、以下のコマンドを実行します。
dns-sd -L MyUbuntuVM _ssh._tcp local. # 特定のVMのSSHサービスを探索
出力例(特定のVMのSSHサービスが解決された場合):
Lookup my-ubuntu-vm._ssh._tcp.local.
DATE: ---Mon 29 Sep 2025---
19:33:38.810 ...STARTING...
19:33:38.811 my-ubuntu-vm._ssh._tcp.local. can be reached at my-ubuntu-vm.local.:22 (interface 28)
この出力は、MyUbuntuVM
のSSHサービスが MyUbuntuVM.local
のポート22で利用可能であり、そのIPv4およびIPv6アドレスも示しています。can be reached at
の行が表示されれば、サービスの詳細が正しく解決されていることを意味します。
avahi-browse
(Ubuntu) でサービスを探索する
Ubuntuでは、avahi-browse
コマンドが dns-sd
と同様の機能を提供します。
ネットワーク上の全てのサービスとホスト名を解決するには、以下のコマンドを実行します。
avahi-browse -a -r # ネットワーク上の全てのサービスとホスト名を解決
出力例(SSHサービスが発見・解決された場合):
+ enp0s1 IPv6 my-ubuntu-vm SSH Remote Terminal local
+ enp0s1 IPv4 my-ubuntu-vm SSH Remote Terminal local
+ lo IPv4 my-ubuntu-vm SSH Remote Terminal local
= enp0s1 IPv6 my-ubuntu-vm SSH Remote Terminal local
hostname = [my-ubuntu-vm.local]
address = [fddf:1b6f:e439:b011:5054:ff:fecd:913]
port = [22]
txt = []
= enp0s1 IPv4 my-ubuntu-vm SSH Remote Terminal local
hostname = [my-ubuntu-vm.local]
address = [192.168.2.2]
port = [22]
txt = []
= lo IPv4 my-ubuntu-vm SSH Remote Terminal local
hostname = [my-ubuntu-vm.local]
address = [127.0.0.1]
port = [22]
txt = []
この出力は、MyUbuntuVM
と MyMacBookPro
がSSHサービスを公開しており、それぞれのホスト名、IPアドレス、ポート番号などが解決されていることを示しています。+
はサービスが発見されたことを、=
はその詳細が解決されたことを意味します。
特定のサービス(例: SSH)を探索するには、以下のコマンドを実行します。
avahi-browse -t _ssh._tcp # SSHサービスを探索
出力例(SSHサービスが発見された場合):
+ enp0s1 IPv6 my-ubuntu-vm SSH Remote Terminal local
+ enp0s1 IPv4 my-ubuntu-vm SSH Remote Terminal local
+ lo IPv4 my-ubuntu-vm SSH Remote Terminal local
この出力は、MyUbuntuVM
がSSHサービスを公開していることを示しています。+
の行が表示されれば、サービスがネットワーク上で発見されていることを意味します。
avahi-resolve-host-name
で特定のホスト名を解決する
Ubuntuで特定のホスト名がmDNSで解決できるかを確認します。
avahi-resolve-host-name MyMacBook.local
出力例(ホスト名が解決された場合):
MyMacBook.local 192.168.64.Y
MyMacBook.local fe80::abcd:efgh:ijkl:mnop
- これにより、指定した
.local
ホスト名がどのIPアドレスに解決されるかを確認できます。IPv4アドレスとIPv6アドレスの両方、またはどちらか一方が表示されれば成功です。
getent hosts
でシステムレベルの解決を確認する
Linuxシステムで、OSがどのようにホスト名を解決しているかを確認します。
getent hosts MyUbuntuVM.local
出力例(ホスト名が解決された場合):
192.168.64.X my-ubuntu-vm.local
fddf:1b6f:e439:b011:5054:ff:fecd:913 my-ubuntu-vm.local
- このコマンドは
/etc/nsswitch.conf
の設定に従ってホスト名解決を試みるため、システム全体での解決状況を把握するのに役立ちます。IPv4アドレスとIPv6アドレスの両方、またはどちらか一方が表示されれば成功です。
ファイアウォールとネットワーク設定の確認
ファイアウォールやネットワーク設定は、mDNS通信を妨げる主要な原因の一つです。
ufw
(Ubuntu) やmacOSのファイアウォール設定
- Ubuntu (UFW):
sudo ufw status verbose
出力例(UFWが無効な場合):
Status: inactive
この場合、UFWはmDNS通信をブロックしていません。
出力例(UFWが有効でmDNSポートが許可されている場合):
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
5353/udp ALLOW Anywhere
5353/udp (v6) ALLOW Anywhere (v6)
この出力は、UFWが有効であり、UDPポート5353(mDNSが使用するポート)が明示的に許可されている状態です。
もしmDNSポートが許可されていない場合は、以下のコマンドで許可します。
sudo ufw allow proto udp from any to any port 5353 # mDNSポートを許可
- macOS:
「システム設定」>「ネットワーク」>「ファイアウォール」で、mDNS(Bonjour)関連の通信がブロックされていないか確認します。必要に応じて、特定のアプリケーション(例: SSH)の通信を許可します。
Multipassのネットワークモードとルーティング
MultipassのVMは、デフォルトでNATモードで起動することが多いです。この場合、ホストOSとVM間でのmDNS通信に制限がある場合があります。
- NATモード: ホストOSからVMへのアクセスはポートフォワーディングが必要になることがあります。mDNSは通常、ブロードキャストベースで動作するため、NAT環境では期待通りに機能しないことがあります。
- ブリッジモード: VMがホストOSと同じネットワークセグメントに直接接続されるため、mDNSがよりスムーズに機能します。VM作成時に
--network bridge
オプションを使用するか、既存のVMのネットワーク設定を変更することを検討してください。 - ブリッジモードの制約と注意点:
- ホスト側のネットワークインターフェースの可用性: ブリッジモードを使用するには、ホストマシンに利用可能な物理ネットワークインターフェース(Wi-Fiや有線LAN)が必要です。指定したインターフェースが利用できない場合、VMはネットワークに接続できません。
- ネットワーク環境の制約: 一部の企業ネットワークや公共Wi-Fiなどでは、セキュリティ上の理由からブリッジモードでの接続が許可されていない場合があります。また、VMがIPアドレスを取得するためにDHCPサーバーが利用可能である必要があります。
- ホストOSのファイアウォール設定: ホストOSのファイアウォールが、ブリッジされたVMからの通信をブロックする可能性があります。必要に応じて、ファイアウォール設定の見直しが必要になります。
- VMの移動性: ブリッジモードで設定されたVMは、特定のネットワークインターフェースに依存するため、ホストマシンを別のネットワーク環境に移動した場合、VMのネットワーク設定を再調整する必要がある場合があります。
利用可能なネットワークインターフェースを確認するには、以下のコマンドを実行します。
multipass networks # 利用可能なネットワークインターフェースを確認
出力例(利用可能なネットワークインターフェースが表示された場合):
Name Type Description
en0 ethernet Ethernet
en1 wifi Wi-Fi
en5 ethernet Ethernet Adapter (en5)
en6 ethernet Ethernet Adapter (en6)
en7 ethernet Ethernet Adapter (en7)
ブリッジモードでVMを起動する場合は、以下のコマンドを実行します。(en0
はホストのネットワークインターフェース名に合わせて変更してください)
multipass launch --name my-bridged-vm --network en0 # ブリッジモードでVMを起動 (en0はホストのネットワークインターフェース名)
出力例(VMが正常に起動した場合):
Launched: my-bridged-vm
まとめと次回予告
本記事では、mDNS/Avahiホスト名解決におけるトラブルシューティングとデバッグ術について、具体的な原因と解決策、そしてデバッグツールの活用法を解説しました。
- Avahi/Bonjourサービスの稼働状況
- ホスト名設定
nsswitch.conf
の設定dns-sd
やavahi-browse
などのデバッグツール- ファイアウォールとMultipassのネットワーク設定
これらのポイントを順に確認することで、ほとんどのmDNS/Avahi関連の問題は解決できるはずです。もう「なぜか繋がらない…」と頭を抱える必要はありません。
次回は、【mDNS完全攻略】第5回:Multipassの真価を引き出す!ネットワークモードとmDNSの高度な連携術と題し、MultipassのネットワークモードとmDNSのより高度な連携術について深掘りしていきます。お楽しみに!
シリーズ記事
本シリーズの他の記事もぜひご覧ください。
- 【mDNS完全攻略】第1回:ローカルネットワークの賢い名札「mDNS/Avahi」の基本とmacOSでの活用術
- 【mDNS完全攻略】第2回:Ubuntu (Multipass) にAvahiを導入し、ホスト名解決の基盤を築く
- 【mDNS完全攻略】第3回:macOSとUbuntu (Multipass) を繋ぐ!シームレスなホスト名解決を体験
- 【mDNS完全攻略】第4回:もう迷わない!mDNS/Avahiホスト名解決のトラブルシューティングとデバッグ術
- 【mDNS完全攻略】第5回:Multipassの真価を引き出す!ネットワークモードとmDNSの高度な連携術
- 【mDNS完全攻略】最終回:mDNS/Avahiで開発ワークフローを加速!自動化とサービスディスカバリの応用
この記事が役に立ったら、ぜひSNSでシェアしてください!
この記事について質問や疑問があればコメントしてください。あなたの環境でのmDNS活用事例も教えてください!
免責事項
本記事の内容は、執筆時点での情報に基づいています。ソフトウェアのバージョンアップ等により、手順や設定が変更される可能性があります。本記事の内容を参考に作業を行う際は、ご自身の責任において実施してください。いかなる損害が発生した場合でも、筆者および公開元は一切の責任を負いません。