KVMの仮想ネットワークをブリッジモードにして、VMを物理ネットワークセグメントに参加させてみた


libvirtを使用してVMを作成すると、デフォルトではNAT環境下に置かれます。
なので、ホストが接続しているネットワークセグメントには存在しておらず、NATを通して外部と通信することになります。
そこで今回はNATを通さなくても外部と通信でき、ホストと同一セグメント上にVMを作成する方法を書きたいと思います。

環境

  • HOST
    • CentOS 7.5 (CUI)
    • NIC eth0
    • bridge br0
    • virtual NIC vnet0
  • VM
    • CentOS 7.5
    • NIC eth0

完成図のイメージ

前提

  • 仮想化に必要な各種パッケージ(libvirtなど)はインストール済み
  • virt-installを使用してVMの作成した経験あり

上記に関係する説明は省略しますので、インストールがまだの人や不安な人は以下のページを参考にしてください。

ホストでブリッジを作成

まずはホストでブリッジを作成して、そのブリッジをeth0に接続してみたいと思います。

# nmcli con add type bridge ifname br0                     // ブリッジの作成
# nmcli con mod eth0 master bridge-br0 slave-type bridge   // eth0をbr0に接続
# systemctl restart network

// 以下確認
# nmcli con

NAME        UUID   TYPE      DEVICE  
bridge-br0  xxxxx  bridge    br0                    // br0が作成されました
eht0        xxxxx  ethernet  eth0

# brctl show
bridge name  bridge id    STP enabled   interfaces
br0          xxxxxxx         no           eth0             // eth0がbr0に接続されました

これでブリッジの作成は完了です。

VMの作成

virt-installを使用してVMを作成しましょう。

# virt-install --name demo --memory 1024 --vcpus 1 --disk size=20 --location /path/to/iso --graphics none --network bridge=br0 --extra-args 'console=tty0 console=ttyS0'

オプションのnetworkに作成したブリッジを指定すると、デフォルトのNATではなく、ホストと同一セグメント下にVMを作成
できます。インストール中にネットワーク設定をする際は、スタティックかDHCPサーバがあればDHCPを設定しましょう。

VMの作成が完了したら、ホストのブリッジに仮想インターフェースが接続されているか見てみましょう。

# brctl show
bridge name  bridge id    STP enabled   interfaces
br0          xxxxxxx         no           eth0
                                          vnet0           // 仮想インターフェース

このように正しくVMが作成できていれば、仮想インターフェースが増えていると思います。

これでVMをホストの同一セグメントに参加させることができました!

参考