Подробный гайд: Настройка bridge-интерфейса для ВМ в virt-manager

Пошаговая настройка bridge-интерфейса в virt-manager для ВМ: создание моста в Linux, подключение виртуальной машины к локальной сети, решение проблем

2026.05.16                  


Подробный гайд: Настройка bridge-интерфейса для ВМ в virt-managerПодробный гайд: Настройка bridge-интерфейса для ВМ в virt-manager

Важно:

В современных версиях libvirt (≥ 6.0+) рекомендуется создавать мост на уровне ОС, а не через виртуальные сети libvirt. Libvirt будет только подключать ВМ к уже существующему мосту. Это даёт стабильность, прозрачность и совместимость с NetworkManager/netplan.


Требования

  • Хост на Linux (Ubuntu/Debian, RHEL/CentOS/Fedora, Arch и др.)
  • Установлены libvirt, qemu-kvm, virt-manager
  • Доступ sudo или root
  • Знание имени основного сетевого интерфейса хоста (eth0, enp3s0, wlan0 и т.д.)

Если вы подключаетесь по SSH:

все действия, связанные с изменением сетевого интерфейса, могут разорвать сессию. Используйте tmux/screen или консоль хоста.


Шаг 1. Проверка текущей сети

ip -br a
nmcli dev status  # если используется NetworkManager
ip route show default

Найдите интерфейс, через который хост получает интернет/подключен к локальной сети. Запомните его имя (далее в гайде enp3s0).


Шаг 2. Создание bridge на хосте

Выберите вариант, соответствующий вашей системе управления сетью.

Вариант A: NetworkManager (RHEL, Fedora, Ubuntu Desktop, openSUSE)

# 1. Создаём мост br0
nmcli connection add type bridge ifname br0 con-name br0

# 2. Добавляем физический интерфейс как слейв моста
nmcli connection add type bridge-slave ifname enp3s0 master br0 con-name br0-slave

# 3. Если нужен статический IP (опционально, по умолчанию DHCP)
# nmcli connection modify br0 ipv4.method manual ipv4.addresses "192.168.1.10/24" ipv4.gateway "192.168.1.1" ipv4.dns "8.8.8.8"

# 4. Применяем
nmcli connection up br0
nmcli connection up br0-slave

Вариант B: netplan (Ubuntu Server 20.04+)

Отредактируйте /etc/netplan/01-netcfg.yaml (имя может отличаться):

network:
  version: 2
  renderer: networkd  # или NetworkManager
  ethernets:
    enp3s0:
      dhcp4: no
  bridges:
    br0:
      dhcp4: yes  # или статический IP
      interfaces: [enp3s0]
      parameters:
        stp: false

Примените:

sudo netplan generate
sudo netplan apply

Вариант C: systemd-networkd (Arch, Debian без NM)

Создайте два файла:

/etc/systemd/network/br0.netdev

[NetDev]
Name=br0
Kind=bridge

/etc/systemd/network/br0.network

[Match]
Name=br0

[Network]
DHCP=yes
# или Address=192.168.1.10/24
# Gateway=192.168.1.1

/etc/systemd/network/99-enp3s0.network (слейв)

[Match]
Name=enp3s0

[Network]
Bridge=br0

Перезапустите: sudo systemctl restart systemd-networkd


Проверка после создания моста

ip -br a | grep br0
ip route show default
ping -c 2 8.8.8.8

IP-адрес хоста теперь должен быть на br0, а enp3s0 будет без IP, но в состоянии UP.


Шаг 3. Настройка в virt-manager

  1. Откройте virt-manager
2. Edit → Connection Details → Virtual Networks

Здесь не нужно создавать новую сеть типа "Bridge". Мы будем использовать уже созданный br0. 3. Закройте окно сетей.


Шаг 4. Подключение ВМ к bridge

Через GUI (virt-manager)

  1. Выключите ВМ (если запущена)
  2. Open → Show virtual hardware details
  3. Add Hardware → Network
4. Параметры:
  • Network source: Bridge device
  • Device name: br0
  • Device model: virtio (рекомендуется)
  • MAC address: оставьте авто или укажите свой
    1. Finish → Apply → Запустите ВМ

Через CLI (virsh)

virsh attach-interface <vm_name> bridge br0 --model virtio --config
virsh start <vm_name>

Для проверки в XML:

virsh edit <vm_name>
# Ищите:
<interface type='bridge'>
  <source bridge='br0'/>
  <model type='virtio'/>
</interface>

Шаг 5. Настройка сети внутри ВМ

  • В большинстве дистрибутивов ВМ автоматически получит IP по DHCP из той же подсети, что и хост.
  • Проверьте: ip a, ip route, ping 8.8.8.8
  • Если нужен статический IP: настройте его в гостевой ОС как на обычной физической машине.

Дополнительные настройки

1. Включение IP-форвардинга (если ВМ должна маршрутизировать или нужен NAT в дополнение)

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-ipforward.conf
sudo sysctl -p /etc/sysctl.d/99-ipforward.conf

2. Файрвол

- firewalld (RHEL/Fedora):
  sudo firewall-cmd --permanent --zone=trusted --add-interface=br0
  sudo firewall-cmd --reload
- ufw (Ubuntu/Debian):
  sudo ufw allow in on br0
  sudo ufw enable  # если выключен

3. Отключение STP (если не требуется защита от петель)

nmcli connection modify br0 bridge.stp no
sudo netplan apply  # или nmcli con up br0

4. Разрешение доступа libvirt к мосту (редко требуется, но бывает)

sudo tee /etc/libvirt/qemu.conf <<EOF
clear_emulator_capabilities = 0
EOF
sudo systemctl restart libvirtd

Обычно достаточно, чтобы пользователь был в группе libvirt или kvm.


Решение типовых проблем

Симптом Причина Решение
Хост потерял сеть после создания br0 IP остался на физ. интерфейсе, а не на мосте Проверьте ip a, убедитесь, что IP на br0. Перезапустите сетевой менеджер.
ВМ не получает IP / нет интернета Мост не подключен к внешнему роутеру, DHCP не отвечает, файрвол блокирует Проверьте brctl show или bridge link, убедитесь, что br0 в UP. Откройте порты в файрволе.
virt-manager не видит br0 Либа virt не обновилась или нет прав sudo virsh net-list --all, перезапустите libvirtd, проверьте группу пользователя.
br0: carrier lost спам в логах Физический интерфейс отключён или кабель вынут Это нормально при hot-plug. Если критично: ethtool -K enp3s0 tx off или отключите carrier detect в NM.
ВМ видна в сети, но хост не пингует ВМ Архитектура сети (VLAN, изоляция порта, провайдерский DHCP) Проверьте ip neigh, убедитесь, что хост и ВМ в одной подсети и без NAT между ними.

Диагностика:

ip -d link show br0
bridge link show
journalctl -u NetworkManager --since "10 min ago" | grep br0
virsh domiflist <vm_name>

Заметки на будущее

  • Мост, созданный через ОС, переживёт обновления libvirt и не удалится при virsh net-destroy.
  • Для production рекомендуется использовать bonding + bridge, если нужно агрегирование каналов.
  • IPv6 работает прозрачно: убедитесь, что net.ipv6.conf.br0.forwarding=1 при необходимости.
  • Резервное копирование: сохраните конфиги NM/netplan до изменений.