【mDNS / Avahi 完全攻略】第1回:ローカルネットワークの賢い名札「 mDNS / Avahi 」の基本と macOS での活用術

あなたの開発環境、ホスト名解決で困っていませんか?

「あれ?あのVMのIPアドレス、なんだっけ?」「ローカルネットワーク上のデバイスに名前でアクセスしたいのに、なぜか接続できない…」

開発者の皆さん、こんな経験はありませんか?

特にmacOSとLinux(例えばMultipass上のUbuntu)を行き来するような環境では、IPアドレスの管理やホスト名解決が意外と手間になるものです。毎回IPアドレスを調べて入力するのは非効率ですし、せっかく名前があるのに使えないのはもったいないですよね。

この記事から始まる「mDNS完全攻略」シリーズでは、そんなあなたの悩みを解決する強力な味方、「mDNS(multicast DNS)」と、その主要な実装である「Avahi」そしてmacOSの「Bonjour」について解説します。

第1回となる今回は、mDNS/Avahiの基本的な概念と、macOSにおけるその役割、そして簡単な活用に焦点を当てます。
この記事を読み終える頃には、あなたのmacOS環境が、賢くホスト名を解決する仕組みを理解し、その便利さを実感していることでしょう。さあ、ローカルネットワークの「賢い名札」の世界へ、一緒に踏み出しましょう!


対象読者

  • macOSユーザー: 特に、開発環境でmacOSとLinux(Ubuntuなど)を併用している方。
  • Multipass利用者: MultipassでUbuntu VMを運用しており、ホストOSとの連携やVM間の通信を効率化したい方。
  • ネットワークの基礎知識を学びたい方: mDNS/Avahiの基本的な概念や、ローカルネットワークでのホスト名解決の仕組みに興味がある方。
  • 開発ワークフローを改善したい方: IPアドレスの管理の手間を減らし、よりスムーズな開発環境を構築したいと考えている方。

動作検証環境

この記事で紹介するcurlコマンドの動作は、以下の環境で検証しています。

  • OS : macOS Tahoe Version 26.0
  • ハードウェア : MacBook Air 2024 M3 24GB
  • Multipass : Multipass version 1.16.1

目次


mDNSとは何か?ローカルネットワークの「名札」の役割

インターネットの世界では、google.com のようなドメイン名を 172.217.161.142 のようなIPアドレスに変換するために「DNS(Domain Name System)」が不可欠です。しかし、小規模なローカルネットワーク内で、いちいちDNSサーバーを立てたり、hosts ファイルを編集したりするのは面倒ですよね。

そこで登場するのが「mDNS(multicast DNS)」です。mDNSは、DNSサーバーなしで、ローカルネットワーク内のデバイスが互いのホスト名をIPアドレスに解決できるようにする仕組みです。例えるなら、DNSが「電話帳」だとすれば、mDNSは「その場にいる人たちがお互いの名前と顔を教え合う」ようなものです。

DNSとの違いとmDNSのメリット

特徴DNSmDNS
サーバー必須(中央集権型)不要(分散型)
範囲インターネット全体、大規模ネットワークローカルネットワーク(同一サブネット内)
設定複雑、専門知識が必要基本的に自動、設定不要な場合が多い
用途グローバルな名前解決ローカルデバイスの発見、ホスト名解決

mDNSの最大のメリットは、その手軽さと自動性です。特別な設定なしに、ネットワークに接続されたデバイスが自動的に自身のホスト名を公開し、他のデバイスがそれを発見・解決できるようになります。これにより、開発環境でのVMやコンテナ、IoTデバイスなどへのアクセスが格段に楽になります。


BonjourとAvahi:それぞれの実装と関係性

mDNSはプロトコルの仕様であり、それを実装したソフトウェアがいくつか存在します。その中でも特に有名なのが、Appleが開発した「Bonjour(ボンジュール)」と、Linuxなどで広く使われている「Avahi(アヴァーイ)」です。

  • Bonjour: macOSやiOSデバイスに標準搭載されており、Apple製品間のシームレスな連携(AirPlay、AirPrintなど)を支える基盤技術です。Windows版も提供されています。
  • Avahi: Linuxディストリビューションで広く採用されているBonjour互換のmDNS実装です。Ubuntuなどの多くのLinux環境でデフォルトでインストールされています。

これら二つは異なる実装ですが、mDNSという共通のプロトコルに基づいているため、互いに通信し、ホスト名解決を行うことができます。つまり、macOSのBonjourとLinuxのAvahiが動いている環境であれば、お互いを名前で認識し、通信できるのです。

Avahiの主な利用ケース(Multipass以外):

本記事では、Multipassでの利用を中心に解説しますが、Multipass以外にも様々な利用ケースがあります。

  • VirtualBox, VMware, KVMなどの一般的な仮想化ソフトウェア上のLinux VM: 開発やテスト環境で、ホストOSや他のVMからホスト名でアクセスしたい場合に利用されます。IPアドレスが動的に変わる環境で特に有効です。
  • Dockerコンテナ内のサービス: コンテナ内で動作するサービスを、ローカルネットワーク内の他のデバイスからホスト名で発見できるようにしたい場合に導入されることがあります。
  • 組み込みLinuxシステム (例: Raspberry Pi): ネットワークに接続された際に自動的にホスト名を公開し、他のデバイスから容易に発見されるようにするために利用されます。
  • ローカルネットワーク内の物理Linuxマシン: 複数のLinuxマシンが混在する環境で、IPアドレスではなくホスト名でアクセスを簡素化するために活用されます。

macOSにおけるmDNS (Bonjour) のデフォルト動作

macOSユーザーにとって、Bonjourは普段意識することのない「空気のような存在」かもしれません。しかし、その裏側では常にあなたのネットワーク体験を支えています。

追加設定不要!macOSが自動で行うホスト名解決

macOSでは、Bonjourがシステムレベルで統合されているため、ユーザーが意識的にmDNSを設定する必要はほとんどありません。Macをネットワークに接続するだけで、自動的に自身のホスト名を .local ドメインで公開し、他のmDNS対応デバイスのホスト名を解決できるようになります。

例えば、あなたのMacが MyMacBookPro というホスト名であれば、ローカルネットワーク上の他のデバイスからは MyMacBookPro.local という名前でアクセスできるようになります。


.local ドメインの仕組み

mDNSでは、ローカルネットワーク内でのみ有効な特別なトップレベルドメインとして .local が使用されます。これは、通常のDNSで使われる .com.org などとは異なり、インターネット上では解決されません。

デバイスが .local ドメインのホスト名を解決しようとすると、通常のDNSサーバーに問い合わせるのではなく、mDNSプロトコルを使ってローカルネットワーク全体に「MyMacBookPro.local のIPアドレスを知っている人はいますか?」という問い合わせ(マルチキャストクエリ)を送信します。該当するデバイスがあれば、自身のIPアドレスを応答し、ホスト名解決が完了します。

DNSとmDNSの名前解決の仕組みの違い

DNSとmDNSの名前解決の仕組みは、以下の図のように対照的です。

DNSによる名前解決

DNSは、あなたがウェブサイトのアドレス(例: google.com)を入力すると、DNSがそのアドレスに対応するIPアドレス(例: 172.217.161.142)を探し出してくれます。このプロセスは、複数のDNSサーバーが連携して行われ、最終的に目的のウェブサイトに接続できるようになります。

DNSによる名前解決
mDNSによる名前解決

mDNSは、DNSのように中央のサーバーに問い合わせるのではなく、デバイス自身が「私はMyMacBookPro.localです。IPアドレスは192.168.1.100です」とネットワーク全体に宣言します。他のデバイスは、この宣言を聞き取ることで、特別な設定なしに互いの名前とIPアドレスを解決できるようになります。

mDNSによる名前解決

macOSでのmDNS活用例と確認方法

それでは、実際にmacOSでmDNSがどのように機能しているのか、具体的な活用例と確認方法を見ていきましょう。

ネットワーク上のデバイスを.localで発見する

最も基本的な活用例は、ローカルネットワーク上の他のmDNS対応デバイスにホスト名でアクセスすることです。例えば、Raspberry PiにSSHで接続する際に、IPアドレスではなく raspberrypi.local のようにホスト名でアクセスできます。

ping コマンドでの動作確認

mDNSによるホスト名解決が機能しているかは、ping コマンドを使うことで確認できます。

例えば、ローカルネットワーク上に ubuntu-vm というホスト名でAvahiが動作しているUbuntu VM(Multipassなどで作成したもの)があるとします。macOSのターミナルから、以下のように実行してみてください。

ping ubuntu-vm.local

もしmDNSが正しく機能していれば、ubuntu-vm.local がVMのIPアドレスに解決され、ping が成功するはずです。

コマンド実行例(VMへのpingコマンド):

ping ubuntu-vm.local
PING ubuntu-vm.local (192.168.64.2): 56 data bytes
64 bytes from 192.168.64.2: icmp_seq=0 ttl=64 time=0.234 ms
64 bytes from 192.168.64.2: icmp_seq=1 ttl=64 time=0.210 ms
64 bytes from 192.168.64.2: icmp_seq=2 ttl=64 time=0.208 ms
^C
---
ubuntu-vm.local ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.208/0.217/0.234/0.012 ms

補足: このpingコマンドでの動作確認は、次回の記事でMultipassインスタンスを構築した後に実際に行うことができます。


dns-sd コマンドでサービスを探索する

macOSには、Bonjourサービスを探索するための強力なコマンドラインツール dns-sd が標準で用意されています。これを使うと、ネットワーク上で公開されている様々なサービス(SSH、HTTP、プリンターなど)を発見できます。

例えば、ローカルネットワーク上で公開されているSSHサービスを探索するには、以下のコマンドを実行します。

dns-sd -B _ssh._tcp local.

これにより、_ssh._tcp.local. ドメインで公開されているSSHサービスの一覧が表示されます。

コマンド実行例(SSHサービスの一覧表示):

dns-sd -B _ssh._tcp local.
Browsing for _ssh._tcp.local.
DATE: ---Sat 05 Oct 2025---
15:00:00.000  ...STARTING...
15:00:01.000  Add 2 2 "ubuntu-vm" _ssh._tcp.local.

特定のホストが公開しているサービスを確認したい場合は、以下のように実行します。

dns-sd -L <ホスト> _ssh._tcp local.
# 例: dns-sd -L ubuntu-vm _ssh._tcp local.

コマンド実行例(特定のホストが公開しているSSHサービスの一覧表示):

dns-sd -L ubuntu-vm _ssh._tcp local.
Lookup ubuntu-vm._ssh._tcp.local.
DATE: ---Sat 05 Oct 2025---
15:00:05.000  ...STARTING...
15:00:06.000  ubuntu-vm._ssh._tcp.local. can be reached at ubuntu-vm.local.:22 (IPv4: 192.168.64.2)

補足: このdns-sdコマンドでの動作確認は、次回の記事でMultipassインスタンスを構築した後に実際に行うことができます。


まとめと次回予告

今回は、mDNS/Avahiの基本的な概念から、macOSにおけるBonjourの役割、そしてpingdns-sdコマンドを使った簡単な活用術までを解説しました。普段意識することのないローカルネットワークの裏側で、いかに賢くホスト名解決が行われているか、ご理解いただけたでしょうか。

macOSユーザーにとって、Bonjourはデフォルトで有効になっているため、特別な設定なしにその恩恵を受けることができます。さらに、その仕組みを理解することで、より高度なネットワーク設定やトラブルシューティングに役立つはずです。

次回の記事では、いよいよMultipass上のUbuntu環境にAvahiを導入し、ホスト名解決の基盤を築く方法を詳しく解説します。macOSとUbuntuの間でシームレスな連携を実現するための第一歩となりますので、どうぞお楽しみに!


シリーズ記事

本シリーズの他の記事もぜひご覧ください。


この記事が役に立ったら、ぜひSNSでシェアしてください!

この記事について質問や疑問があればコメントしてください。あなたの環境でのmDNS活用事例も教えてください!


免責事項

本記事の内容は、執筆時点での情報に基づいています。ソフトウェアのバージョンアップ等により、手順や設定が変更される可能性があります。本記事の内容を参考に作業を行う際は、ご自身の責任において実施してください。いかなる損害が発生した場合でも、筆者および公開元は一切の責任を負いません。

SNSでもご購読できます。

コメントを残す

*