手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 KVM Bridge ネットワークの基本設定

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 の KVM ホストで、仮想マシンをネットワークへ接続するための Bridge ネットワークを整理します。VM は仮想 NIC を持つだけでは外部と通信できないため、ホスト側で bridge を作り、物理 NIC や VLAN、OVS / OVN との接続関係を決めます。

この記事では、まず Linux bridge を使った基本構成を扱い、そのあと Open vSwitch と OVN localnet を使う場合の確認ポイントをまとめます。実際の環境では構成管理で固定していても、手動で確認できる単位を理解しておくと、VM の疎通トラブルを切り分けやすくなります。

Bridge ネットワークの考え方

KVM では、VM の仮想 NIC をホスト上の bridge に接続します。bridge は仮想スイッチのように動作し、VM 同士、または VM と物理ネットワークを接続します。

  • br0 のような Linux bridge を作る
  • 物理 NIC を bridge の配下に入れる
  • ホスト自身の IP アドレスは物理 NIC ではなく bridge 側に持たせる
  • VM 作成時に --network bridge=br0 のように指定する
  • VLAN や複数ネットワークを扱う場合は bridge を分けるか、OVS / OVN を使う

現在の NIC と bridge を確認する

設定前に、ホストの NIC 名、IP アドレス、既存 bridge の有無を確認します。

ip -br link
ip -br addr

bridge link
bridge vlan show

virsh net-list --all

物理 NIC を bridge に入れると、その NIC に直接設定していた IP アドレスは bridge 側へ移します。リモート作業中に間違えると接続が切れるため、コンソールや別経路を確保してから変更します。

Netplan で Linux bridge を作成する

例として、物理 NIC enp1s0br0 に接続し、ホスト自身の IP アドレスを br0 に持たせます。IP アドレスやゲートウェイは環境に合わせて変更してください。

sudo tee /etc/netplan/50-kvm-bridge.yaml >/dev/null <<'EOF'
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces:
        - enp1s0
      addresses:
        - 192.0.2.10/24
      routes:
        - to: default
          via: 192.0.2.1
      nameservers:
        addresses:
          - 192.0.2.53
      parameters:
        stp: false
        forward-delay: 0
EOF

sudo netplan generate
sudo netplan try

netplan try で疎通が維持できることを確認してから適用します。

sudo netplan apply

ip -br addr show br0
bridge link show
ping -c 3 192.0.2.1

VM 作成時に bridge を指定する

VM を作成するときは、ネットワーク指定で bridge を指定します。ここでは実行例だけを示します。ISO や cloud-init を使った詳細な VM 作成は、後続の VM 作成記事で整理します。

sudo virt-install   --name test-vm   --memory 2048   --vcpus 2   --disk size=20,bus=virtio   --os-variant ubuntu26.04   --network bridge=br0,model=virtio   --graphics none   --console pty,target_type=serial   --cdrom /var/lib/libvirt/images/iso/ubuntu-26.04-live-server-amd64.iso

作成済み VM のインターフェースは virsh domiflist で確認できます。

virsh list --all
virsh domiflist test-vm

ip link show master br0
bridge fdb show br br0

libvirt の default network との違い

libvirt には default という NAT 型ネットワークがあります。検証用には便利ですが、VM を同一 L2 セグメントへ参加させたい場合や、外部から直接 VM へ接続したい場合は bridge 接続の方が扱いやすくなります。

virsh net-list --all
virsh net-info default
virsh net-dumpxml default
  • NAT 型: VM はホスト経由で外へ出る。外部から VM へ直接入るには追加設定が必要
  • bridge 型: VM が物理ネットワーク上のホストに近い形で見える
  • 検証環境では NAT、本番や常設 VM では bridge という使い分けもできる

VLAN を扱う場合

VLAN を使う場合は、物理 NIC の VLAN サブインターフェースを作り、その VLAN ごとに bridge を作る構成が分かりやすいです。

sudo tee /etc/netplan/51-kvm-vlan-bridge.yaml >/dev/null <<'EOF'
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: false
      dhcp6: false
  vlans:
    enp1s0.100:
      id: 100
      link: enp1s0
  bridges:
    br100:
      interfaces:
        - enp1s0.100
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0
EOF

sudo netplan generate
sudo netplan apply

ip -br link show br100 enp1s0.100

この構成では、VM 作成時に bridge=br100 を指定すると VLAN 100 側へ接続できます。複数 VLAN を扱う場合は、ネットワークごとに bridge 名と用途を明確にしておくと運用しやすくなります。

Open vSwitch を使う場合

Open vSwitch を使う場合は、provider bridge を作成し、物理 NIC を port として追加します。VLAN trunk を扱う場合は、port 側に trunks を設定します。

sudo ovs-vsctl add-br br-provider
sudo ovs-vsctl add-port br-provider enp1s0

sudo ovs-vsctl set Interface br-provider mtu_request=1500
sudo ovs-vsctl set Interface enp1s0 mtu_request=1500

sudo ovs-vsctl show

VLAN trunk を明示する場合は、対象 port に trunks を設定します。

sudo ovs-vsctl set Port enp1s0 trunks=100,200,300
sudo ovs-vsctl list Port enp1s0

OVN localnet を使う場合

OVN で物理ネットワークへ接続する場合は、OVS の bridge mapping と、OVN logical switch の localnet port を対応させます。ここでは概念を確認するための最小例を示します。

sudo ovs-vsctl set Open_vSwitch . external_ids:ovn-bridge-mappings=provider:br-provider

sudo ovn-nbctl --may-exist ls-add ls-provider
sudo ovn-nbctl --may-exist lsp-add ls-provider ln-provider
sudo ovn-nbctl lsp-set-type ln-provider localnet
sudo ovn-nbctl lsp-set-options ln-provider network_name=provider
sudo ovn-nbctl lsp-set-addresses ln-provider unknown

sudo ovn-nbctl show
sudo ovs-vsctl get Open_vSwitch . external_ids

OVN localnet では、network_name と OVS 側の ovn-bridge-mappings が対応します。ここがずれていると、論理スイッチを作っても物理ネットワークへ出られません。

確認ポイント

  • ホスト自身の IP アドレスが物理 NIC ではなく bridge 側にあること
  • bridge link で物理 NIC が bridge に接続されていること
  • VM の NIC が意図した bridge に接続されていること
  • VLAN 構成では VLAN ID と bridge 名の対応が分かること
  • OVS を使う場合は provider bridge と port が存在すること
  • OVN を使う場合は ovn-bridge-mappings と localnet の network_name が一致すること

Bridge ネットワークが整理できると、VM 作成時にどのネットワークへ接続するかを明確に指定できます。次は、同じ構成を何度も作れるように VM テンプレートを準備します。

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 KVM Bridge ネットワークの基本設定

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る