Linux上でKVMやQEMUを使っていると、こういったネットワーク設計の課題にぶつかることがあります。
この記事では、nmcliコマンドを使ってLinuxにブリッジインターフェースを設定する手順を、RHEL 9.4 / Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認した実機出力付きで解説します。KVM仮想マシンをブリッジ経由で物理LANに直接参加させる構成から、
bridge link による動作確認・STP遅延への対処まで、現場で実際に使えるレベルで解説します。この記事のポイント
・nmcli connection add type bridge でブリッジデバイスを作成できる
・物理NICはbridge-slaveとしてブリッジに追加し、元のプロファイルは削除する
・bridge link showでスレーブのforwarding状態を確認し疎通を検証する
・STP遅延(約30秒)が発生する場合はbridge.stp noで即時収束させられる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
LinuxブリッジとNATの違い|なぜ仮想化でブリッジが必要か
KVMで仮想マシンを作成すると、デフォルトでは virbr0(NAT構成) が使われます。NAT構成では仮想マシンはホストOSを中継してインターネットに出られますが、物理LAN上の他の機器からVMに直接接続することができません。ブリッジ構成では、仮想マシンが物理NICと同じL2ネットワークセグメントに直接参加します。VMには物理LAN側のDHCPサーバーからIPアドレスが払い出され、ホストを経由しないフラットな通信が実現します。
| 方式 | VMのIPアドレス帯 | 物理LANからVMへの直接接続 | 主な用途 |
|---|---|---|---|
| NAT(virbr0・デフォルト) | 192.168.122.x(独立セグメント) | 不可(ポート転送が必要) | インターネット接続が目的の開発VM |
| ブリッジ(br0) | 物理LANと同じセグメント | 可(直接通信) | 社内サービス・検証サーバーの公開 |
事前確認|nmcliで現在のNIC構成を把握する
ブリッジを設定する前に、現在のネットワーク接続プロファイルとデバイス名を確認します。# 接続プロファイルとデバイスの対応を確認する nmcli connection show # デバイス一覧と状態を確認する nmcli device status
$ nmcli connection show NAME UUID TYPE DEVICE enp1s0 a1b2c3d4-e5f6-7890-abcd-ef1234567890 ethernet enp1s0 lo 00000000-0000-0000-0000-000000000000 loopback lo $ nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet connected enp1s0 lo loopback unmanaged --
enp1s0 が物理NICです。実際のデバイス名は環境によって eth0 や ens3 など異なりますので、出力に合わせて読み替えてください。【重要】コンソールから作業することを強く推奨します。ブリッジ設定中に物理NICのプロファイルを削除するため、SSHで接続している場合はその瞬間に接続が切断されます。KVMのvirt-manager・iDRAC・BMCなど、ネットワークに依存しないコンソールから作業してください。
nmcliでブリッジを設定する手順
1. ブリッジデバイスを作成する
まず、ブリッジのマスターデバイスとなる接続プロファイルbr0 を作成します。# ブリッジ接続プロファイルを作成する nmcli connection add type bridge con-name br0 ifname br0 # DHCPでIPを取得する場合(デフォルト。変更不要) nmcli connection modify br0 ipv4.method auto # 固定IPを設定する場合 nmcli connection modify br0 ipv4.addresses "192.168.1.100/24" nmcli connection modify br0 ipv4.gateway "192.168.1.1" nmcli connection modify br0 ipv4.dns "192.168.1.1" nmcli connection modify br0 ipv4.method manual
2. 物理NICをブリッジのスレーブとして追加する
次に、物理NIC(enp1s0)をブリッジのスレーブとして追加します。type bridge-slave と master br0 の指定が重要です。# enp1s0をブリッジ br0 のスレーブとして追加する nmcli connection add type bridge-slave con-name br0-slave ifname enp1s0 master br0
3. 元のEthernetプロファイルを削除する
物理NICの元のプロファイル(enp1s0)が残っていると、ブリッジスレーブと競合してネットワークが不安定になります。元のプロファイルを削除します。# 元のEthernetプロファイルを削除する(SSHの場合はここで切断される) nmcli connection delete enp1s0
4. ブリッジとスレーブを有効化する
スレーブ側から先に有効化し、続いてブリッジをアクティブにします。# スレーブ側を先に有効化する nmcli connection up br0-slave # ブリッジを有効化する(DHCPの場合、IPアドレス取得まで数秒かかる) nmcli connection up br0
ip addr show br0 でIPアドレスが取得できていることを確認します。$ ip addr show br0 4: br0:
mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:1a:2b:3c brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute br0 valid_lft 86382sec preferred_lft 86382sec
inet 行にIPアドレスが表示されていれば、ブリッジへのIP割り当てが完了しています。KVM仮想マシンをブリッジに接続する
ホスト側のブリッジが設定できたら、KVM仮想マシンのネットワークをブリッジ経由に変更します。1. virshで既存VMのネットワークを変更する
# VMの現在のネットワーク設定を確認する virsh domiflist testvm # XMLを開いてネットワーク設定を編集する virsh edit testvm
virsh edit で開いたXMLの <interface> セクションを次のように変更します。<!-- 変更前(NAT構成 default network)--> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> <!-- 変更後(ブリッジ構成)--> <interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> </interface>
2. virt-installで新規VMをブリッジ接続で作成する
新規VMを作成する場合は、--network オプションでブリッジを直接指定します。virt-install --name testvm --vcpus 2 --memory 2048 --disk size=20 --cdrom /path/to/rocky9.iso --network bridge=br0,model=virtio --os-variant rhel9.4
動作確認手順
1. bridge link showでスレーブの状態を確認する
$ bridge link show 2: enp1s0:
mtu 1500 master br0 state forwarding priority 32 cost 100
state forwarding が表示されれば、スレーブNICがブリッジ経由でパケットを正常に転送できています。state learning や state blocking の場合はSTPの収束待ち中です(次節のトラブルシュート参照)。2. ip link showでブリッジデバイスを確認する
$ ip link show type bridge 4: br0:
mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:1a:2b:3c brd ff:ff:ff:ff:ff:ff
state UP と表示されればブリッジデバイスが正常に動作しています。3. ゲートウェイへのpingで疎通を確認する
$ ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.812 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.743 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.788 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2048ms rtt min/avg/max/mdev = 0.743/0.781/0.812/0.029 ms
ブリッジ設定のトラブルシュート
【問題1】ブリッジ有効化後に30秒以上ネットワークが通じない
原因:STP(スパニングツリープロトコル)が有効になっており、ブリッジポートがblocking → listening → learning → forwarding の状態遷移に約30秒かかっています。対処:単一ホストのシンプルな構成ではSTPが不要なため、
bridge.stp no を設定して遅延をなくします。# STPを無効化して即時収束させる nmcli connection modify br0 bridge.stp no nmcli connection up br0 # STPの設定状態を確認する nmcli connection show br0 | grep bridge.stp
【問題2】ブリッジは起動しているがVMからDHCPアドレスが取得できない
確認手順:・ホスト側のルーティングテーブルでデフォルトゲートウェイが
br0 経由になっているか確認します・
nmcli connection show br0 で IP4.ADDRESS が表示されているか確認します・VMの仮想NICが
br0 に接続されているか virsh domiflist <vmname> で確認します# ルーティングテーブルを確認する(br0経由のデフォルトゲートウェイが期待値) ip route show # 期待される出力例 default via 192.168.1.1 dev br0 proto dhcp metric 425 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.100 # ブリッジに参加しているインターフェースを確認する bridge fdb show | grep -v permanent | head -20
【問題3】nmcli connection upでエラーになる
原因と対処:NetworkManagerが古いプロファイルのキャッシュを保持している場合があります。サービスを再起動してから再試行します。# NetworkManagerを再起動してプロファイルを再読み込みする systemctl restart NetworkManager # 接続状態を確認する nmcli connection show --active
Ubuntu 24.04 LTSでのnmcli利用について
Ubuntu 24.04 LTSのデフォルトはnetplanですが、nmcliもそのまま使えます。netplanとnmcliを同時に使うと設定が競合することがあるため、/etc/netplan/ 配下の設定ファイルを確認してから作業することを推奨します。# Ubuntu でのnetplanバックエンド確認 networkctl status # nmcli が管理しているデバイスを確認する nmcli device status
本記事のまとめ
nmcliでLinuxブリッジを設定する際の主要コマンドをまとめます。| やりたいこと | コマンド |
|---|---|
| ブリッジデバイスを作成する | nmcli connection add type bridge con-name br0 ifname br0 |
| 物理NICをスレーブとして追加する | nmcli connection add type bridge-slave con-name br0-slave ifname enp1s0 master br0 |
| 元のEthernetプロファイルを削除する | nmcli connection delete enp1s0 |
| ブリッジを有効化する | nmcli connection up br0 |
| スレーブの転送状態を確認する | bridge link show |
| STPを無効化する(シングルホスト用) | nmcli connection modify br0 bridge.stp no |
| KVM新規VMにブリッジを指定する | virt-install --network bridge=br0,model=virtio |
| ブリッジのFDBを確認する | bridge fdb show |
ブリッジ設定も含めたLinuxサーバー構築の体系的な知識を身につけたい方は、Linuxサーバー構築セミナーをご覧ください。
>> Linuxサーバー構築セミナーの詳細はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:resolvectlコマンドの使い方|DNSキャッシュをクリアしてDNS設定を確認する手順
- この記事の属するカテゴリ:ネットワーク管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます