Введение
Подключение виртуальных машин KVM к физической сети через мост — типовая задача для лаборатории или тестового стенда. Однако настройка bridge в Linux имеет подводные камни. В этой статье — пошаговое руководство с разбором типичных ошибок.
Типичная ошибка: enp0s31f6 как bridge
Распространённая ошибка — попытка назначить IP-адрес непосредственно на физический интерфейс (например, enp0s31f6), который добавляется в мост. При создании bridge IP-адрес должен быть на интерфейсе br0, а не на физическом интерфейсе.
Создание моста с nmcli
# Создаём bridge-интерфейс
nmcli connection add type bridge ifname br0 con-name br0
# Настраиваем IP (статический или DHCP)
nmcli connection modify br0 ipv4.addresses “192.168.1.100/24”
nmcli connection modify br0 ipv4.gateway “192.168.1.1”
nmcli connection modify br0 ipv4.dns “192.168.1.1”
nmcli connection modify br0 ipv4.method manual
# Добавляем физический интерфейс как slave
nmcli connection add type bridge-slave
ifname enp0s31f6 master br0
# Поднимаем bridge
nmcli connection up br0
Добавление физического интерфейса как slave
Физический интерфейс (enp0s31f6) добавляется как bridge-slave. При этом его собственное сетевое соединение деактивируется — весь трафик идёт через br0. Важно делать это через консоль или IPMI, так как SSH-соединение прервётся.
Настройка VM NIC
В конфигурации виртуальной машины (virsh edit или virt-manager) сетевой интерфейс привязывается к br0:
<!-- Фрагмент XML-конфигурации VM –>
<interface type=‘bridge’>
<source bridge=‘br0’/>
<model type=‘virtio’/>
</interface>
Проверка с bridge link и tcpdump
# Проверяем участников моста
bridge link show
# Проверяем трафик на bridge
tcpdump -i br0 -n
# Проверяем ARP-таблицу
ip neigh show dev br0
# Проверяем маршрутизацию
ip route show
Устранение проблем с подключением
Если VM не получает IP через DHCP: проверьте STP (spanning tree protocol) — для одного моста его можно отключить через nmcli connection modify br0 bridge.stp no. Убедитесь, что firewalld не блокирует bridge-трафик. Проверьте, что net.bridge.bridge-nf-call-iptables установлен в 0.
# Отключаем фильтрацию bridge-трафика через iptables
sysctl net.bridge.bridge-nf-call-iptables=0
sysctl net.bridge.bridge-nf-call-ip6tables=0
# Или отключаем STP для простого моста
nmcli connection modify br0 bridge.stp no
nmcli connection up br0
Полезные советы
- Всегда настраивайте bridge через консоль, не через SSH
- Используйте virtio для NIC виртуальных машин — это значительно увеличивает пропускную способность
- Для нескольких VLAN используйте VLAN sub-interfaces на bridge
- Документируйте конфигурацию — сетевые настройки легко потерять при обновлении системы
Заключение
Настройка KVM bridge networking через nmcli — несложная процедура при понимании принципов работы. Ключевые моменты: IP-адрес на br0, физический интерфейс как slave, отключение STP для простых конфигураций и проверка firewall-правил.