【2026年7月3日時点の情報です】
仮想マシンをWebサーバーとKVMをインストールした直後は、仮想マシンはNAT接続(virbr0)でネットワークにつながります。NATでも仮想マシンからインターネットには出られますが、仮想マシンにはホストの中だけのアドレスが割り当てられるので、自宅のほかのPCからは直接つなげません。
このブログは仮想マシン(ゲストOS)のAlmaLinuxで動いていて、自宅のPCからSSHで作業したり、ブラウザでWordPressやphpMyAdminを開いたりしています。そのために、仮想マシンを自宅LANの1台として参加させる「ブリッジ接続」にしています。ブリッジにすると、仮想マシンにもルーターのネットワークのアドレスを付けられます。
なお、ブログをインターネットに公開しているのは Cloudflare Tunnel で、これは仮想マシンから外へつなぐ仕組みなので、NATのままでも使えます。ブリッジが必要なのは、自宅LANから仮想マシンに直接つなぎたい場合です。
この記事の作業は、すべてホストのAlmaLinux 9で、rootで行います。
作業前の注意
この作業では、ホスト自身のネットワーク設定を切り替えます。設定を間違えると、ホストにネットワークからつながらなくなります。
できるだけ、ホストにディスプレイとキーボードをつないで、直接操作してください。SSHで作業する場合は、うまくいかなかったときにすぐホストの前で操作できる状態で行います。手順4の切り替えでは、SSHが切れてもコマンドが最後まで実行される書き方も紹介します。
この記事のIPアドレスやデバイス名は例です。ご自分の環境に合わせて読み替えてください。
1. 物理インターフェース名の確認
まず、ホストがLANにつながっている物理ネットワークインターフェース(NIC)の名前を確認します。
[root@almalinux ~]# nmcli device
DEVICE TYPE STATE CONNECTION
enp1s0 ethernet 接続済み enp1s0
lo loopback 管理外 --
virbr0 bridge 管理外 --この例では、物理デバイス名が enp1s0、その接続の名前(コネクション名)も enp1s0 です。デバイス名は環境によって eno1 や enp3s0 などに変わるので、以降の enp1s0 はご自分の名前に読み替えてください。virbr0 は、KVMを入れたときに作られたNAT用のブリッジです。
2. ブリッジ(br0)の作成
新しく br0 という名前のブリッジを作ります。切り替えたあとは、ホストのIPアドレスは物理NICではなくこの br0 に付くので、今ホストで使っている固定IPアドレスをここで設定します。
[root@almalinux ~]# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 ※ ブリッジbr0を作成
[root@almalinux ~]# nmcli connection modify br0 ipv4.addresses "192.168.0.100/24" ※ ホストのIPアドレス
[root@almalinux ~]# nmcli connection modify br0 ipv4.gateway "192.168.0.1" ※ ルーターのアドレス
[root@almalinux ~]# nmcli connection modify br0 ipv4.dns "8.8.8.8" ※ DNSサーバー
[root@almalinux ~]# nmcli connection modify br0 ipv4.method manual ※ 固定IPアドレスにするIPアドレスとゲートウェイ、DNSは、今の物理NICの設定と同じ値にします。今の値は nmcli connection show enp1s0 | grep ipv4 で確認できます。DNSは、ルーターのアドレスにしても構いません。
3. 物理NICをブリッジにつなぐ
物理NICの enp1s0 を、br0 の子(ブリッジのポート)としてつなぐ設定を作ります。
[root@almalinux ~]# nmcli connection add type bridge-slave autoconnect yes con-name br0-slave ifname enp1s0 master br0 ※ enp1s0をbr0につなぐifname enp1s0 の部分は、手順1で確認したご自分のデバイス名にします。この時点では設定を作っただけで、まだ切り替わっていません。
4. 切り替えと、再起動後もbr0を使う設定
今の物理NICの接続を止めて、br0 を有効にします。いちばん通信が切れやすい手順です。
[root@almalinux ~]# nmcli connection down enp1s0 && nmcli connection up br0 ※ 物理NICの接続を止めてbr0に切り替えるSSHで作業しているときは、接続を止めた瞬間にSSHが切れて、後半の nmcli connection up br0 が実行されないことがあります。その場合は、SSHが切れても最後まで動くように、次のように実行します。
[root@almalinux ~]# nohup sh -c 'nmcli connection down enp1s0; nmcli connection up br0' > /tmp/bridge.log 2>&1 & ※ SSHが切れても最後まで実行する数秒待ってから、同じIPアドレスにSSHでつなぎ直します。つながったら、切り替わったか確認します。
[root@almalinux ~]# nmcli device ※ enp1s0のCONNECTIONがbr0-slave、br0のCONNECTIONがbr0になっていればOK
[root@almalinux ~]# ip -4 addr show br0 ※ br0にホストのIPアドレスが付いているか確認再起動したときに元に戻らないようにする
元の enp1s0 の接続設定は、自動で接続する設定のまま残っています。このままだと、ホストを再起動したときに物理NICが元の設定でつながってしまい、ブリッジが使われないことがあります。元の設定は、自動で接続しないようにしておきます。
[root@almalinux ~]# nmcli connection modify enp1s0 connection.autoconnect no ※ 元の設定を自動で使わないようにする削除せずに残しておけば、ブリッジをやめたくなったときに nmcli connection up enp1s0 で戻せます。設定が終わったら、一度ホストを再起動して、br0 でつながることを確かめておくと安心です。
5. libvirtにブリッジを登録する
OS側のブリッジができたら、KVM(libvirt)から br0 を「host-bridge」という名前のネットワークとして使えるように登録します。まず、定義ファイルを作ります。
[root@almalinux ~]# vi /tmp/host-bridge.xml ※ ネットワークの定義ファイルを作成
<network>
<name>host-bridge</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>作ったファイルでネットワークを登録し、自動で起動するようにしてから起動します。
[root@almalinux ~]# virsh net-define /tmp/host-bridge.xml ※ ネットワークを登録
[root@almalinux ~]# virsh net-autostart host-bridge ※ 自動起動を設定
[root@almalinux ~]# virsh net-start host-bridge ※ ネットワークを起動
[root@almalinux ~]# virsh net-list --all ※ 登録されたか確認virsh net-list --all の一覧に、もとからある default に加えて host-bridge が表示され、状態が「動作中」、自動起動が「はい (yes)」になっていれば完了です。登録が終われば、/tmp/host-bridge.xml は削除して構いません。
仮想マシンを作るときにこのネットワークを指定すると、仮想マシンが自宅LANにつながります。仮想マシンの作り方は、「【KVM】virt-installでゲストOSをインストール」にまとめています。
まとめ
ブリッジ接続は、br0 の作成、物理NICの接続、切り替え、libvirtへの登録の4つで設定できます。切り替えのときに通信が切れやすいので、できればホストの前で作業し、元の接続設定を自動で使わないようにしておくのがポイントです。
これで、仮想マシンに自宅LANのアドレスを付けて、自宅のPCから直接SSHやブラウザで使えるようになります。
同じ KVM の上で、Windows 11 の仮想マシンも動かしています。画面のないサーバーでの作り方は、「【KVM】画面のないAlmaLinux 9にWindows 11の仮想マシンを作る」にまとめています。



コメント