Как создать и настроить Bridge Networking для KVM в Linux

Как создать и настроить Bridge Networking для KVM в Linux

 

В сегодняшнем руководстве мы рассмотрим, как создать и настроить мостовую сеть для KVM в Linux — RHEL / CentOS / Ubuntu / Debian / Arch Linux и т. д. Мост Linux при использовании в KVM позволяет виртуальной машине получать доступ к внешней сети и службам вне Виртуальная среда.

Существуют различные способы настройки мостовой сети в Linux для использования в KVM. Сеть по умолчанию, используемая виртуальной машиной, запущенной в KVM, — это сеть NAT. В сети NAT создается виртуальная сеть для гостевых машин, которая затем сопоставляется с сетью хоста для обеспечения подключения к Интернету.

Когда вы настраиваете и используете мостовую сеть, гостевые операционные системы получают доступ к внешней сети, подключенной непосредственно к хост-машине. Мост можно создать либо с помощью диспетчера виртуальных машин, либо с помощью инструмента командной строки virsh  , либо путем прямого редактирования сетевых сценариев, либо с помощью инструментов управления сетью Linux.

Шаг 1. Создание мостовой сети с помощью диспетчера виртуальных машин.

Выполните следующие действия, чтобы создать мост Linux из диспетчера виртуальных машин (GUI). В вашей системе должен быть установлен KVM.

Откройте диспетчер виртуальных машин и перейдите в меню «Правка»> «Сведения о подключении»> «Виртуальные сети».

Настройте новый сетевой интерфейс, щелкнув + в нижней части окна. Дайте виртуальной сети имя.

Нажмите кнопку «Вперед», в следующем окне укажите информацию о виртуальной сети.

Щелкните «Вперед» и выберите, следует ли включить IPv6.

Выберите тип сети и политику пересылки.

Завершите настройку и сохраните свои конфигурации. Новая виртуальная сеть должна отображаться на странице обзора.

Для сети автоматически создается мост в хост-системе.

$ brctl show virbr4      
bridge name	bridge id		STP enabled	interfaces
virbr4		8000.525400c2410a	yes		virbr4-nic

Шаг 2: Создайте мост KVM с помощью команды virsh.

Создайте новый XML-файл моста.

vim br10.xml

Добавьте в файл детали моста.

<network>
  <name>br10</name>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='br10' stp='on' delay='0'/>
  <ip address='192.168.30.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.30.50' end='192.168.30.200'/>
    </dhcp>
  </ip>
</network>

Чтобы определить сеть из файла XML без его запуска, используйте:

$ sudo virsh net-define  br10.xml
Network br1 defined from br10.xml

Чтобы запустить (ранее определенную) неактивную сеть, используйте:

$ sudo virsh net-start br10
Network br10 started

Чтобы настроить автоматический запуск сети при запуске службы:

$ sudo virsh net-autostart br10
Network br10 marked as autostarted

Установите флажок «Подтвердить», если флаг автозапуска установлен на  yes — Постоянный также должен читать «да».

$ sudo virsh net-list --all
 Name              State    Autostart   Persistent
----------------------------------------------------
 br10              active   yes         yes
 default           active   yes         yes
 docker-machines   active   yes         yes
 fed290            active   no          yes
 vagrant-libvirt   active   no          yes

Подтвердите создание моста и IP-адрес.

$ ip addr show dev br10
28: br10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:94:00:f5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.1/24 brd 192.168.30.255 scope global br10
       valid_lft forever preferred_lft forever

Шаг 3: Создайте мост, отредактировав сетевые скрипты (CentOS / RHEL / Fedora):

Ниже скрипт создаст мост под названием br10.

$ sudo vim /etc/sysconfig/network-scripts/ifcfg-br10

С участием:

DEVICE=br10
STP=no
TYPE=Bridge
BOOTPROTO=none
DEFROUTE=yes
NAME=br10
ONBOOT=yes
DNS1=8.8.8.8
DNS2=192.168.30.1
IPADDR=192.168.30.3
PREFIX=24
GATEWAY=192.168.30.1

Конфигурация интерфейса eth0, к которому я подключаюсь, будет следующей:

$ cat /etc/sysconfig/network-scripts/ifcfg-eno1 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br10

Перезагрузите сетевой демон.

sudo systemctl disable NetworkManager && sudo systemctl stop NetworkManager
sudo systemctl restart network.service

Шаг 4: Создайте мост, отредактировав сетевые сценарии (Debian / Ubuntu):

Настроить интерфейс Bridging:

$ sudo vim  /etc/network/interfaces
auto br10 
iface br10 inet static
address 192.168.1.10
network 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
bridge_ports eth0
bridge_stp off

Отключите все строки в разделе интерфейса eth0, чтобы они выглядели примерно так:

auto eth0
iface eth0 inet manual

Перезапустите сетевую службу.

 sudo systemctl restart networking.service

Шаг 5: Использование инструмента Nmcli

Используйте  nmcliинструмент командной строки управления сетью, чтобы создать мост Linux на желаемом интерфейсе. Давайте сначала перечислим все доступные подключения.

$ sudo nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
enp1s0              498869bb-0d88-4a4c-a83a-c491d1040b0b  ethernet  enp1s0 
Wired connection 1  0977f29f-fa2e-3d7f-831c-6f41f8782be3  ethernet  enp7s0

Поскольку мой мост будет создан на втором устройстве  enp7s0, я удалю существующее соединение, а затем создам мост с этим устройством.

$ sudo nmcli connection delete 0977f29f-fa2e-3d7f-831c-6f41f8782be3
Connection 'Wired connection 1' (0977f29f-fa2e-3d7f-831c-6f41f8782be3) successfully deleted.

1. Сохраните информацию, связанную с мостом, в переменных.

BR_NAME="br10"
BR_INT="enp7s0"
SUBNET_IP="192.168.30.10/24"
GW="192.168.30.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"

Где:

  • BR_NAME: имя создаваемого моста.
  • BR_INT: физическое сетевое устройство, которое будет использоваться в качестве ведомого моста.
  • SUBNET_IP: IP-адрес и подсеть, назначенные созданному мосту.
  • GW: IP-адрес шлюза по умолчанию.
  • DNS1 и DNS2: IP-адреса DNS-серверов, которые будут использоваться.

2. Определите новое мостовое соединение.

sudo nmcli connection add type bridge autoconnect yes con-name ${BR_NAME} ifname ${BR_NAME}

Вывод:

Connection 'br0' (be6d4520-0257-49c6-97c2-f515d6554980) successfully added.

3. Измените мост, чтобы добавить IP-адрес, шлюз и DNS

sudo nmcli connection modify ${BR_NAME} ipv4.addresses ${SUBNET_IP} ipv4.method manual
sudo nmcli connection modify ${BR_NAME} ipv4.gateway ${GW}
sudo nmcli connection modify ${BR_NAME} ipv4.dns ${DNS1} +ipv4.dns ${DNS2}

4. Добавьте сетевое устройство как подчиненное устройство моста.

sudo nmcli connection delete ${BR_INT}
sudo nmcli connection add type bridge-slave autoconnect yes con-name ${BR_INT} ifname ${BR_INT} master ${BR_NAME}

Пример вывода.

Connection 'enp7s0' (f033dbc9-a90e-4d4c-83a9-63fd7ec1cdc1) successfully added.

Проверить соединения.

$ sudo nmcli connection show 
NAME    UUID                                  TYPE      DEVICE 
br0     be6d4520-0257-49c6-97c2-f515d6554980  bridge    br0    
enp1s0  498869bb-0d88-4a4c-a83a-c491d1040b0b  ethernet  enp1s0 
enp7s0  f033dbc9-a90e-4d4c-83a9-63fd7ec1cdc1  ethernet  enp7s0

Шаг 6. Подключите сетевой мост

После того, как соединение с сетевым мостом будет создано, активируйте его.

$ sudo nmcli connection up br10
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

Просмотрите детали моста, запустив его.

sudo nmcli connection show br10

Команда  ip addr должна выдать результат, аналогичный приведенному ниже.

$ ip ad
3: enp7s0:  mtu 1500 qdisc fq_codel master br10 state UP group default qlen 1000
     link/ether 52:54:00:a2:f6:a8 brd ff:ff:ff:ff:ff:ff
 4: br10:  mtu 1500 qdisc noqueue state UP group default qlen 1000
     link/ether 52:54:00:a2:f6:a8 brd ff:ff:ff:ff:ff:ff
     inet 192.168.122.10/24 brd 192.168.122.255 scope global noprefixroute br10
        valid_lft forever preferred_lft forever
     inet6 fe80::4f2f:ce6d:dc6b:2101/64 scope link noprefixroute 
        valid_lft forever preferred_lft forever

Поздравляю !!. Вы успешно создали и настроили мостовую сеть для KVM в системе Linux.