KVM (libvirt) 仮想環境のゲスト VM (Alma Linux) の構成変更 (仮想NIC追加)

ゲスト VM に仮想 NIC を追加

ゲスト VM 間通信用の Linux Bridge 作成

ホスト OS となる Ubuntu Desktop 側にて Linux Bridge を作成する。
※ KVM 側から Bridge モードの Linux Bridge を作成しようとすると、ゲスト VM 起動時にエラーが発生するため、ホスト OS 側で作成する。(NAT モードなら行けるみたい)

$ virsh start VM-01
error: Failed to start domain 'VM-01'
error: Cannot get interface MTU on 'virbr2': そのようなデバイスはありません

Ubuntu より、 nmcli コマンドにて Bridge を作成する。この時、 IP, STP 等は設定しない。

$ sudo nmcli connection add type bridge connection.id virbr2 connection.interface-name virbr2
Connection 'virbr2' (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) successfully added.

$ sudo nmcli connection modify virbr2 ipv4.method disabled ipv6.method disabled
$ sudo nmcli connection modify virbr2 bridge.stp off
$ sudo nmcli connection down virbr2
Connection 'virbr2' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/17)

$ sudo nmcli connection up virbr2
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/18)

Linux Bridge のデバイスが作成されたか確認する。

$ nmcli device show virbr2
GENERAL.DEVICE:                         virbr2
GENERAL.TYPE:                           bridge
GENERAL.HWADDR:                         86:DB:C4:xx:xx:xx
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     virbr2
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/18
IP4.GATEWAY:                            --
IP6.GATEWAY:                            --

$ nmcli connection show virbr2

次に KVM (libvirt) 側にこの Linux Bridge を関連付けする。
以下のように仮想 Bridge 用定義ファイルを作成する

$ cat virbr2.xml
<network>
  <name>internal-virbr2</name>
  <bridge name='virbr2'/>
  <forward mode='bridge'>
  </forward>
</network>

作成した定義ファイルよりホストOSの Linux Bridge と仮想 Bridge を関連付けする。

$ virsh
virsh # net-define --file /home/penguin/virbr2.xml
Network internal-virbr2 defined from /home/penguin/virbr2.xml

virsh # net-list --all
 Name              State      Autostart   Persistent
------------------------------------------------------
 default           active     yes         yes
 guest-virbr1      active     yes         yes
 internal-virbr2   inactive   no          yes

virsh # net-autostart internal-virbr2
Network internal-virbr2 marked as autostarted

virsh # net-start internal-virbr2
Network internal-virbr2 started

ゲスト VM に仮想 NIC の追加

ゲスト VM に仮想 NIC を追加する。

virsh # attach-interface --type network --source internal-virbr2 --model virtio --domain VM-01 --persistent
Interface attached successfully

仮想 NIC を削除する場合は、ゲスト VM の MAC アドレスを調べてから削除を実施する。

virsh # attach-interface --type network --source internal-virbr2 --model virtio --domain VM-01 --persistent
Interface attached successfully


virsh # domiflist --domain VM-01
 Interface   Type      Source            Model    MAC
---------------------------------------------------------------------
 -           network   guest-virbr1      virtio   52:54:00:xx:xx:01
 -           network   internal-virbr2   virtio   52:54:00:xx:xx:02

virsh # detach-interface --type network --mac 52:54:00:xx:xx:02 --domain VM-01
Interface detached successfully

ゲスト VM を起動し、NIC の設定等を行う。

virsh # start --domain VM-01
virsh # console --domain VM-01
Connected to domain 'VM-01'
Escape character is ^] (Ctrl + ])
vm-01 login: root
Password:

# nmcli device show
# nmcli connection add type ethernet connection.id enp7s0 connection.interface-name enp7s0
# nmcli connection modify enp7s0 ipv4.method manual ipv4.address 192.168.254.1/24 ipv6.method disable
# nmcli connection modify enp7s0 connection.zone trusted
# nmcli connection down enp7s0; nmcli connection up enp7s0
# firewall-cmd --get-active-zones
public
  interfaces: enp1s0
trusted
  interfaces: enp7s0

参考URL
20.27. Host Machine Management
libvirt: virsh
仮想マシンにNICを追加する方法