Сервер в кармане, или просто о сложном!

главная - Статьи - Виртуализация

Создаем сетевой мост (bridge, br0). Например, для виртуальных машин KVM

Теги: Виртуальные машины Linux kvm

При установке kvm изначально создается виртуальная локальная сеть, из которой гостевые VM могут выходить "наружу", но с ними снаружи до настройки DST-NAT/FORWARD никто не сможет взаимодействовать. Если необходимо, чтобы виртуальные машины были доступны так же, как и обычные компьютеры, их можно подключить к сети черед мост (bridge). Предположим, есть хост Linux, на нем настроен KVM. На хосте есть два физических сетевых адаптеров, один из которых планируется отдать для подключения виртуальных машин к физической сети (LAN, WAN, не имеет значения).

Пусть есть два сетевых адаптера: eno1 и eno2.
eno2 - управляющий, ему будет назначен какой-то ip-адрес, через него хост настраивается.
eno1 - адаптер, подключенный к сети LAN, в которой будут доступны виртуальные машины.
При этом eno1 и eno2 могут быть подключены в одну и ту же сеть, не важно.

Создадим bridge br0, привязанный к адаптеру eno1.

На примере хоста KVM на CentOS 7.

Спойлер1: модуль bridge

Проверим, подгружен ли модуль bridge:

# modinfo bridge

Если не подгружен, можно подгрузить:

# modprobe --first-time bridge

Возможно, потребуется установить утилиты bridge:

# yum install bridge-utils

Спойлер2: выключаем NetworkManager

NetwokManager выключаем, он на практике только мешает на сервере:

# chkconfig NetworkManager off
# chkconfig network on
# service NetworkManager stop

На всякий случай, копируем конфиг сетевого адаптера eno1 (у меня это были базовые, нетронутые настройки):

# cp /etc/sysconfig/network-scripts/ifcfg-eno1 /root/ifcfg-eno1.bak

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eno1
UUID=3af09c3d-cf02-40a5-9bf0-c296d5a05c89
DEVICE=eno1
ONBOOT=no

Создаем конфиг бриджа br0:

# nano /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
ONBOOT=yes
DELAY=0

Совет: обратите внимание, что Bridge пишется в конфиге с большой буквы!

Изменяем конфиг eno1:

# nano /etc/sysconfig/network-scripts/ifcfg-eno1

TYPE=Ethernet
BOOTPROTO=none
IPV4_FAILURE_FATAL=no
IPV6INIT=none
IPV6_AUTOCONF=none
IPV6_DEFROUTE=none
IPV6_PEERDNS=none
IPV6_PEERROUTES=none
IPV6_FAILURE_FATAL=no
NAME=eno1
UUID=3af09c3d-cf02-40a5-9bf0-c296d5a05c89
DEVICE=eno1
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0

Фактически полностью сохраняется конфиг, внизу появляется привязка к bridge br0.

Кто-то после этого делает service network restart, я все же хочу убедиться, что все будет ок и после перезагрузки, поэтому reboot. При этом не забывайте, что если вы что-то напутаете (например, если для eno1 у вас были какие-то правила iptables, или в конфиге ошибетесь), то лучше вам быть рядом с хостом и его физической клавиатурой.

После перезагрузки если все ок и в листинге ip link бридж br0 присутствует, можно приступать или к настройке KVM (на CentOS 7) или, если уже настроено, виртуальные машины можно подключать к сети через br0, например:

# virt-install --network bridge:br0 --name vm1 --description='Windows 7' --ram=1024 --vcpus=1 --disk path=/vms/vm1.iso,size=30,format=qcow2,bus=virtio --graphics vnc,password=12345 --cdrom /data/vms-iso/Windows-7-64-prof-from-orig-dvd.iso --boot cdrom,hd,menu=on

Все, мы создали выделенный сетевой мост br0 (на базе адаптера eno2) который не имея собственного IP адреса, подключает виртуальные машины к нужному сегменту реальной сети. При этом что бы ни случилось с трафиком VM, есть отдельный административный сетевой адаптер eno2.

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?