
MultipassでUbuntu VMをサクッと立ち上げて開発環境を構築。でも、ホストOSとの連携やVM間の通信で「あれ?繋がらない…」と頭を抱えた経験はありませんか?
特に、複数のVMを扱うようになると、IPアドレスの管理やホスト名解決が煩雑になりがちです。
本記事では、そんな悩みを解決する鍵となるMultipassのネットワークモードとmDNSの高度な連携術に迫ります。
まるで魔法のようにホスト名でVMにアクセスできるようになるだけでなく、開発ワークフローを劇的に効率化する秘訣を、TechBizPlus編集長が徹底解説します。
対象読者
- Multipass利用者: 特に、複数のUbuntu VMを運用しており、VM間の通信やホストOSとの連携を最適化したい方。
- ネットワーク設定に関心のある開発者: NATモードとブリッジモードの違い、mDNSの挙動、cloud-initによる自動設定など、Multipassのネットワーク機能を深く理解したい方。
- 開発環境の自動化を推進したい方: cloud-initを活用したVMの初期設定自動化に興味がある方。
- mDNS/Avahiの応用を検討している方: ホスト名解決だけでなく、より高度なネットワーク連携にmDNS/Avahiを利用したい方。
動作検証環境
この記事で紹介するcurlコマンドの動作は、以下の環境で検証しています。
- OS : macOS Tahoe Version 26.0
- ハードウェア : MacBook Air 2024 M3 24GB
- Multipass : Multipass version 1.16.1
目次
Multipassのネットワークモードを理解する
Multipassは、仮想マシン(VM)をホストOS上で動作させるためのツールですが、そのネットワーク設定はVMとホストOS、そして外部ネットワークとの連携において非常に重要です。主に「NATモード」と「ブリッジモード」の2つのモードがあります。
どちらのモードを選ぶべきか?
どちらのモードを選ぶべきかは、あなたの開発環境の要件によって異なります。
ネットワークモード選択の比較表
モード | 特徴 | 適したケース |
---|---|---|
NATモード | VMがホストOSのプライベートネットワーク内に配置され、ホストOSがトラフィックを仲介。VMは外部から直接アクセス不可(ポートフォワーディング除く)。 | 単一VMでホストOSからの限定アクセスで十分な場合。VMが外部から直接アクセスされる必要がない場合。手軽にVMを立ち上げたい場合。 |
ブリッジモード | VMがホストOSと同じネットワークセグメントに直接参加。VMは独自のIPを持ち、ホストOSや他のデバイスから直接アクセス可能。 | 複数のVM間で通信が必要な場合。ホストOSからVMへの直接的なホスト名解決が必要な場合。VMをネットワーク上の独立したデバイスとして扱いたい場合。 |
NATモードの適したケースの図解(単一VM、限定的なアクセス)

ブリッジモードの適したケースの図解(本番環境に近いシミュレーション)

NATモードの基本とmDNSの挙動
NAT(Network Address Translation)モードは、Multipassのデフォルト設定です。このモードでは、VMはホストOSのプライベートネットワーク内に配置され、ホストOSがVMのネットワークトラフィックを仲介します。VMから外部ネットワークへのアクセスは可能ですが、外部からVMへの直接的なアクセスは、ポートフォワーディングを設定しない限りできません。
NATモードの図解

mDNS(multicast DNS)は、ローカルネットワーク内でホスト名をIPアドレスに解決するためのプロトコルです。NATモードの場合、mDNSはVM内部でのみ機能し、ホストOSからはVMの.local
ホスト名を直接解決できないことが多いです。これは、VMがホストOSとは異なるプライベートネットワークにいるため、mDNSパケットがホストOSに到達しないためです。
ブリッジモードのメリットとmDNSの活用
ブリッジモードでは、VMはホストOSと同じネットワークセグメントに直接参加します。これにより、VMは独自のIPアドレスを持ち、ホストOSや同じネットワーク内の他のデバイスから直接アクセスできるようになります。まるで物理的な別のマシンがネットワークに接続されているかのように振る舞います。
ブリッジモードの図解

このブリッジモードこそが、mDNSを最大限に活用するための鍵となります。VMがホストOSと同じネットワークにいるため、mDNSパケットがネットワーク全体にブロードキャストされ、ホストOSとVM間でシームレスにホスト名解決が可能になります。これにより、IPアドレスを意識することなく、VMのホスト名(例: my-ubuntu-vm.local
)でSSH接続したり、サービスにアクセスしたりできるようになります。
Multipassコマンドでネットワークを検査する
Multipassのネットワーク設定の理解と、トラブルシューティングのために、便利なコマンドを紹介します。
multipass networks
で利用可能なネットワークを確認
ホストOSで利用可能なネットワークインターフェースと、Multipassがそれらをどのように認識しているかを確認できます。これにより、ブリッジモードでどのインターフェースを使用できるかを判断するのに役立ちます。
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)
この出力は、ホストマシンで利用可能なネットワークインターフェースと、Multipassが作成するブリッジインターフェースを示しています。
multipass info <VM名>
でVMのネットワーク情報を確認
特定のVMのIPアドレス、MACアドレス、ネットワークインターフェースなどの詳細情報を取得できます。VMがどのネットワークモードで動作しているか、どのようなIPアドレスが割り当てられているかを確認する際に非常に便利です。
multipass info my-ubuntu-vm
出力例(VMの詳細情報が表示された場合):
Name: my-ubuntu-vm
State: Running
Snapshots: 0
IPv4: 192.168.2.6
Release: Ubuntu 24.04.3 LTS
Image hash: 6177a7958f01 (Ubuntu 24.04 LTS)
CPU(s): 1
Load: 0.00 0.00 0.00
Disk usage: 2.6GiB out of 4.8GiB
Memory usage: 221.0MiB out of 952.7MiB
Mounts: --
この出力は、VMの名前、状態、割り当てられているIPv4アドレス(NATモードとブリッジモードの両方)、Ubuntuのバージョンなどを示しています。ブリッジモードの場合、192.168.1.Y (en0)
のように、ホストのネットワークインターフェース名と共にIPアドレスが表示されることがあります。
ip a
や route
コマンドでのVM内からの確認
VM内部から自身のIPアドレスやルーティングテーブルを確認し、ネットワーク設定が正しく適用されているかを検証します。これにより、VMがネットワークに正しく接続されているか、意図した経路で通信が行われているかを確認できます。
# VM内で実行
ip a
出力例(VMにIPアドレスが割り当てられている場合):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:15:0a:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.6/24 metric 100 brd 192.168.2.255 scope global dynamic enp0s1
valid_lft 3144sec preferred_lft 3144sec
inet6 fddf:1b6f:e439:b011:5054:ff:fe15:ae2/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 2591937sec preferred_lft 604737sec
inet6 fe80::5054:ff:fe15:ae2/64 scope link
valid_lft forever preferred_lft forever
この出力は、enp0s1
インターフェースにIPv4アドレス (192.168.2.X
) とIPv6アドレスが割り当てられていることを示しています。
# VM内で実行
route -n
もし route
コマンドが見つからない場合は、net-tools
パッケージをインストールする必要があります。
sudo apt install net-tools
インストール後、再度 route -n
コマンドを実行してください。
出力例(VMのルーティングテーブルが表示された場合):
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 100 0 0 enp0s1
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s1
192.168.2.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp0s1
この出力は、デフォルトゲートウェイ (192.168.2.1
) と、enp0s1
インターフェースに接続されているネットワーク (192.168.2.0/24
) を示しています。
cloud-initを活用したmDNSの自動設定
複数のVMを構築したり、開発環境を再現性高くセットアップしたりする場合、手動での設定は手間がかかります。ここで強力な味方となるのがcloud-initです。
cloud-initの基本とMultipassでの利用
cloud-initは、VM起動時にスクリプトを実行し、初期設定を自動化するためのツールです。ユーザーデータとしてスクリプトを渡すことで、パッケージのインストール、ユーザーの追加、ファイルの配置、サービスの起動など、様々な初期設定を自動で行うことができます。
Multipassは、VM作成時に--cloud-init
オプションを使ってcloud-initスクリプトを渡すことができます。これにより、VMが起動した瞬間にAvahiデーモンをインストールし、mDNSを有効化するといった自動設定が可能になります。
Avahiインストールと設定を自動化するcloud-initスクリプト例
以下は、Avahiデーモンと必要なライブラリをインストールし、nsswitch.conf
を更新してmDNSを有効化、SSHサービスを自動登録・有効化するcloud-initスクリプトの例です。これをcloud-init.yaml
などのファイル名で保存し、MultipassでVMを作成する際に指定します。
#cloud-config
packages:
- avahi-daemon
- libnss-mdns
- openssh-server # SSHサービスがインストールされていることを確認
runcmd:
- echo "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" | sudo tee /etc/nsswitch.conf > /dev/null
- sudo systemctl enable avahi-daemon
- sudo systemctl restart avahi-daemon
- sudo systemctl enable ssh # SSHサービスを有効化
- sudo systemctl start ssh # SSHサービスを開始
write_files:
- path: /etc/avahi/services/ssh.service
mode: '0644'
content: |
<?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>
VM作成時のコマンド例:
multipass launch --name my-avahi-vm --cloud-init cloud-init.yaml
これにより、VMが起動した時点でmDNSが有効になり、ホストOSからmy-avahi-vm.local
といったホスト名でアクセスできるようになります。また、SSHサービスも自動的にAvahiに登録され、ホストOSからホスト名でのSSH接続が可能になります。
出力例(起動後のサービス確認):
Browsing for _ssh._tcp.local.
DATE: ---Sun 05 Oct 2025---
12:32:40.040 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
12:32:40.041 Add 2 26 local. _ssh._tcp. my-avahi-vm
まとめと次回予告
Multipassのネットワークモードを深く理解し、mDNSと組み合わせることで、ローカル開発環境は劇的に進化します。
本記事では、以下の内容を解説しました。
- Multipassのネットワークモード: NATモードとブリッジモードの基本的な違い、それぞれのメリット・デメリット、そして適切な選択基準を理解しました。
- mDNSの挙動: 各ネットワークモードにおけるmDNSの動作原理と、ホストOSとの連携における重要性を学びました。
- ネットワーク検査コマンド:
multipass networks
、multipass info <VM名>
、VM内でのip a
やroute
コマンドを使って、ネットワーク設定を確認・トラブルシューティングする方法を習得しました。 - cloud-initによる自動設定: Avahiデーモンのインストール、
nsswitch.conf
の更新、SSHサービスの自動登録、そしてSSH公開鍵のVMへの登録をcloud-initスクリプトで自動化する方法を実践しました。
特にcloud-initを活用した自動設定は、複数のVMを扱う開発者にとって強力な武器となるでしょう。
IPアドレスを意識することなくホスト名でVMにアクセスできる快適さを、ぜひあなたの開発ワークフローに取り入れてみてください。
次回の記事では、このシリーズの総まとめとして、mDNS/Avahiを開発ワークフロー全体で加速させる応用テクニックをご紹介します。お楽しみに!
シリーズ記事
本シリーズの他の記事もぜひご覧ください。
- 【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活用事例も教えてください!
免責事項
本記事の内容は、執筆時点での情報に基づいています。ソフトウェアのバージョンアップ等により、手順や設定が変更される可能性があります。本記事の内容を参考に作業を行う際は、ご自身の責任において実施してください。いかなる損害が発生した場合でも、筆者および公開元は一切の責任を負いません。