nmcliでLinuxブリッジを設定する方法|KVMや仮想化環境のブリッジネットワーク設計と動作確認

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxコマンド > ネットワーク管理コマンド > nmcliでLinuxブリッジを設定する方法|KVMや仮想化環境のブリッジネットワーク設計と動作確認
「KVMで仮想マシンを起動したのに外部ネットワークから直接アクセスできない」「NATでは仮想マシンのIPアドレスが物理LANに見えなくて困っている」
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で即時収束させられる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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と同じセグメント 可(直接通信) 社内サービス・検証サーバーの公開
ブリッジはOSI第2層(データリンク層)で動作する仮想スイッチです。物理NIC(enp1s0など)とVMの仮想NICをブリッジデバイス(br0)配下に束ねることで、同一セグメント上のMACアドレス学習と透過的なフレーム転送が実現します。

事前確認|nmcliで現在のNIC構成を把握する

ブリッジを設定する前に、現在のネットワーク接続プロファイルとデバイス名を確認します。

# 接続プロファイルとデバイスの対応を確認する nmcli connection show # デバイス一覧と状態を確認する nmcli device status

実機での出力例(RHEL 9.4):

$ 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

有効化後にSSH接続が回復したら、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>

変更を保存してVMを再起動すると、VMが物理LANのDHCPサーバーからIPアドレスを取得します。

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

注意:複数のスイッチやブリッジが接続されたネットワークで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

ブリッジ設定後にネットワーク越しの疎通が取れない場合、Linux ポート確認の全コマンドを参考にssやlsofでソケット状態を確認してください。

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環境では、ブリッジネットワークの設計は避けて通れない知識です。nmcliを使ったブリッジ設定を身につけると、KVMだけでなくDockerのmacvlanネットワークや、将来的なOpenStackの構築にも応用できます。
ブリッジ設定も含めたLinuxサーバー構築の体系的な知識を身につけたい方は、Linuxサーバー構築セミナーをご覧ください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
>> Linuxサーバー構築セミナーの詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。