ゲスト 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を追加する方法