Как я собственно и обещал продолжаем разбираться с Libvirt/KVM, но уже на более глубоком уровне.
Создаем сетевой мост при помощи NetPlan
Для интеграции виртуальных машин в локальную сеть организации будем использовать сетевой мост который в современных дистрибутивах Ubuntu создается при помощи NetPlan.
По умолчанию всему нашими настройками на десктопе управляет Network Manager.
# cat /etc/netplan/01-network-manager-all.yaml
# This file was written by calamares.
# Let NetworkManager manage all devices on this system.
# For more information, see netplan(5).
network:
version: 2
renderer: NetworkManager
Перепишем таким образом, чтобы мы управляли параметрами сети вручную. И переключаемся с Network Manager на systemd-networkd.
# systemctl enable systemd-networkd
Конфигурация с мостом.
network:
version: 2
renderer: networkd
ethernets:
enp7s0:
dhcp4: no
bridges:
vbridge-1:
dhcp4: yes
interfaces:
- enp7s0
Проверяем корректность настроек.
# netplan try --config-file ./01-network-manager-all.yaml
После применения настроек у нас появляется сетевой мост.
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vbridge-1 state UP group default qlen 1000
link/ether a8:a1:59:06:37:e4 brd ff:ff:ff:ff:ff:ff
inet6 fe80::b0ea:88ec:dfac:cf82/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: vbridge-1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 1e:aa:4e:c7:43:dd brd ff:ff:ff:ff:ff:ff
inet 192.168.3.117/24 metric 100 brd 192.168.3.255 scope global dynamic vbridge-1
valid_lft 572sec preferred_lft 572sec
inet6 fe80::1caa:4eff:fec7:43dd/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
Отключаем Network Manager так как он нам больше не нужен.
# systemctl disable NetworkManager.service
# systemctl disable NetworkManager-wait-online.service
# systemctl stop NetworkManager.service
# systemctl stop NetworkManager-wait-online.service
Получаем список зарегистрированных сетей LibVirt при помощи утилиты virsh.
# virsh net-list --all
Смотрим XML-описание нашей сети default.
$ virsh net-dumpxml default
<network>
<name>default</name>
<uuid>f5e8be56-0747-48de-8c85-3d098c68347b</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:9a:f3:61'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
Как мы видим это и есть наша NAT-сеть. Создаем XML-описание сети типа мост bridge.xml.
<network>
<name>main-bridge</name>
<forward mode="bridge" />
<bridge name="vbridge-1" />
</network>
Применяем описание сети, ставим на автостарт и запускаем.
$ virsh net-define ./bridge.xml
$ virsh net-start main-bridge
$ virsh net-autostart main-bridge
Основы работы с утилитой Virsh
Список всех виртуальных машин (включая отключенные).
# virsh list --all
Id Name State
-----------------------------------------
- srv-remoteapp-01 shut off
- srv-remoteapp-01-clone shut off
Подробная информация о виртуальной машине.
# virsh dominfo srv-remoteapp-01-clone
Id: -
Name: srv-remoteapp-01-clone
UUID: 981248c6-7d00-4add-84a3-41cbd501b4f3
OS Type: hvm
State: shut off
CPU(s): 2
Max memory: 4194304 KiB
Used memory: 4194304 KiB
Persistent: yes
Autostart: disable
Managed save: no
Security model: apparmor
Security DOI: 0
Старт-стоп-перезагрузка виртуальной машины.
# virsh start srv-remoteapp-01-clone
# virsh shutdown srv-remoteapp-01-clone
# virsh reboot srv-remoteapp-01-clone
Принудительная остановка (по питанию).
$ virsh destroy srv-remoteapp-01-clone
Подключение к виртуальной машине (отдельная утилита).
$ virt-viewer srv-remoteapp-01-clone

Установка флага автозапуска виртуальной машины при загрузке.
$ virsh autostart vadersrv-remoteapp-01-clone