Подробный гайд: Настройка сетевого моста (Bridged Networking) в Linux для виртуализации
1. Что такое сетевой мост и зачем он нужен
Сетевой мост (bridge) — это виртуальный коммутатор уровня L2, работающий в ядре Linux. Он объединяет физические и виртуальные интерфейсы в единый широковещательный домен.
В контексте виртуализации мост позволяет:
- ВМ получать IP-адреса из той же подсети, что и хост (через внешний DHCP или статически)
- ВМ быть видимыми в локальной сети как самостоятельные устройства
- Размещать сетевые сервисы (веб-серверы, DNS) без NAT-пробросов
- Использовать VLAN, QoS и политики маршрутизации на уровне хоста
Важно:
Мост работает на канальном уровне (L2). Он не требует включения IP-форвардинга (net.ipv4.ip_forward=1), если только вы не планируете также маршрутизацию.
2. Подготовка и важные предупреждения
1. Определите основной сетевой интерфейс:
ip link show
ip addr show
Обычно это enp3s0, eth0, ens18 и т.д. Запомните его имя.
Запишите текущие параметры сети: IP-адрес, маску, шлюз, DNS. При переносе адреса с физического интерфейса на мост временный разрыв сети неизбежен.
Критично при удалённом доступе: Если вы настраиваете сервер через SSH, настройка моста может разорвать соединение.
Рекомендуется:
- Использовать консоль (IPMI, KVM, LXC/Proxmox console)
- Или настроить скрипт с таймаутом возврата на старый конфиг
- Или использовать
tmux/screen+atдля автоматического восстановления
4. Убедитесь, что ядро поддерживает мосты (включено по умолчанию в современных дистрибутивах):
lsmod | grep bridge
Если пусто, загрузите модуль: sudo modprobe bridge
3. Выбор инструмента настройки
| Дистрибутив / Система | Рекомендуемый инструмент | Примечание |
|---|---|---|
| Ubuntu 18.04+, Debian 10+ | netplan |
YAML-конфиг, применяется через netplan apply |
| RHEL 8/9, CentOS Stream, Fedora, Rocky, AlmaLinux | NetworkManager |
nmcli или nmtui |
| Arch, Gentoo, Alpine, системные серверы без NM | systemd-networkd |
Нативные .netdev и .network файлы |
| Любая (для тестов) | iproute2 |
Временная настройка, сбрасывается после перезагрузки |
bridge-utils (brctl) объявлен устаревшим. Используйте ip link, bridge или сетевые менеджеры.
4. Пошаговая настройка (постоянная)
Ubuntu / Debian (netplan)
1. Создайте/отредактируйте файл: /etc/netplan/01-bridge.yaml
network:
version: 2
renderer: networkd # или NetworkManager, если используется
ethernets:
enp3s0: # замените на ваш интерфейс
dhcp4: no
dhcp6: no
bridges:
br0:
interfaces: [enp3s0]
dhcp4: yes # или используйте static:
# addresses: [192.168.1.100/24]
# routes: [{ to: default, via: 192.168.1.1 }]
# nameservers:
# addresses: [8.8.8.8, 1.1.1.1]
parameters:
stp: true # отключите, если не нужны петли
forward-delay: 4
2. Примените:
sudo netplan generate
sudo netplan apply
- Проверьте:
ip addr show br0,networkctl status br0
RHEL / CentOS / Fedora / Rocky / AlmaLinux (NetworkManager)
# Создаём мост
sudo nmcli con add type bridge ifname br0 con-name br0
sudo nmcli con modify br0 bridge.stp yes
sudo nmcli con modify br0 ipv4.method auto # или manual + адрес/шлюз
# Подключаем физический интерфейс к мосту
sudo nmcli con add type bridge-slave ifname enp3s0 master br0 con-name enp3s0-bridge
# Активируем
sudo nmcli con up br0
sudo nmcli con up enp3s0-bridge
Графический аналог:
nmtui → Edit a connection → Add → Bridge / Bridge Slave
Arch / systemd-networkd
1. /etc/systemd/network/10-bridge.netdev
[NetDev]
Name=br0
Kind=bridge
2. /etc/systemd/network/20-bridge.network
[Match]
Name=br0
[Network]
DHCP=yes
# Или статика:
# Address=192.168.1.100/24
# Gateway=192.168.1.1
# DNS=8.8.8.8
3. /etc/systemd/network/20-enp3s0.network
[Match]
Name=enp3s0
[Network]
Bridge=br0
4. Перезапуск:
sudo systemctl restart systemd-networkd
sudo networkctl reload
Временная настройка (iproute2)
Для тестов или восстановления:
sudo ip link add name br0 type bridge
sudo ip link set enp3s0 down
sudo ip addr flush dev enp3s0
sudo ip link set enp3s0 master br0
sudo ip link set enp3s0 up
sudo ip addr add 192.168.1.100/24 dev br0
sudo ip link set br0 up
sudo ip route add default via 192.168.1.1 dev br0
После перезагрузки исчезнет. Используйте только для диагностики.
5. Подключение виртуальных машин к мосту
KVM / libvirt
- Убедитесь, что
br0существует и активен.
2. В virt-manager:
- Создайте/отредактируйте ВМ →
Add Hardware→Network - Source:
Host device br0 - Mode:
Bridge
3. Или через XML (добавить в <devices>):
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
libvirt по умолчанию создаёт NAT-мост virbr0. Он не мешает, но для bridged networking используйте ваш системный br0.
VirtualBox
- Settings → Network → Attached to:
Bridged Adapter - Name: выберите
br0(или физический интерфейс, если VirtualBox собран с поддержкой мостов) - Убедитесь, что у вашего пользователя есть права на
/dev/vboxnetctlи модульvboxnetadpзагружен.
Proxmox VE
Использует мосты нативно. Обычно vmbr0 уже настроен при установке. Добавьте ВМ к vmbr0 в настройках сети.
6. Проверка и диагностика
# Состояние моста и портов
ip link show br0
bridge link show
ip addr show br0
# Таблица MAC-адресов (кто подключён)
bridge fdb show dev br0
# Проверка маршрутов и шлюза
ip route show
ping -c 3 192.168.1.1
ping -c 3 8.8.8.8
# Сниффинг трафика на мосту
sudo tcpdump -i br0 -nn -v
7. Безопасность и типичные проблемы
| Проблема | Решение |
|---|---|
| Разрыв SSH при настройке | Используйте консоль, tmux + at, или скрипт с sleep && rollback |
| STP блокирует порты | Отключите: bridge link set dev enp3s0 guard off или stp: false в конфиге |
| Нет доступа в интернет у ВМ | Проверьте шлюз на мосту, DHCP сервер, DNS, firewall зоны |
| Фаервол блокирует трафик | Добавьте br0 в разрешённую зону: firewall-cmd --zone=public --add-interface=br0 --permanent или настройте nftables/iptables с учётом br0 |
| Switch ограничивает MAC-адреса | На коммутаторах включите port-security или используйте macvlan/ipvlan вместо bridge |
| Promiscuous mode не включается | Некоторые драйверы/switches требуют ethtool -K enp3s0 rxvlan off или ip link set br0 promisc on |
| libvirt не видит br0 | Убедитесь, что пользователь libvirt-qemu имеет доступ: sudo usermod -aG libvirt $(whoami) |
Рекомендации по безопасности:
- Изолируйте мосты для разных VLAN (
br0_vlan10,br0_vlan20) - Используйте
ebtables/nftablesдля фильтрации на уровне L2 - Отключите DHCP-сервер на хосте, если он конфликтует с сетевым
- Регулярно обновляйте ядро (мосты зависят от сетевых подсистем ядра)
8. Чек-лист успешной настройки
- [ ]
br0виден вip linkи имеет IP/маршруты - [ ] Физический интерфейс добавлен в мост (
bridge link show) - [ ] ВМ получает IP из той же подсети, что и хост
- [ ] Пинг до ВМ и из ВМ во внешнюю сеть работает
- [ ] Конфиг сохранён и переживает перезагрузку
- [ ] Фаервол/SELinux/AppArmor не блокируют bridge-трафик
Дополнительные ресурсы
man 5 bridge(Linux kernel networking)man 8 ip-link,man 8 bridge- Netplan: netplan.io
- systemd-networkd: freedesktop.org/software/systemd/man/systemd.network.html
- libvirt networking: libvirt.org/formatnetwork.html
Совет:
Если вам нужна изоляция ВМ, но без NAT, рассмотрите macvlan или ipvlan. Если требуется сложный роутинг/QoS — используйте veth пары + tc + nftables.