- Настройка сети KVM в режиме bridge для Wi-Fi
- Оглавление
- Введение
- Установка ПО
- Планирование сети
- Создание сети в Virt Manager
- Настройка VM
- Настройка Proxy ARP
- Проверка работы
- Как создать и настроить Bridge Networking для KVM в Linux
- Шаг 1. Создание мостовой сети с помощью диспетчера виртуальных машин.
- Шаг 2: Создайте мост KVM с помощью команды virsh.
- Шаг 3: Создайте мост, отредактировав сетевые скрипты (CentOS / RHEL / Fedora):
- Шаг 4: Создайте мост, отредактировав сетевые сценарии (Debian / Ubuntu):
- Шаг 5: Использование инструмента Nmcli
- Шаг 6. Подключите сетевой мост
Настройка сети KVM в режиме bridge для Wi-Fi
В данной статье я расскажу как настроить работу виртуальной сети KVM в режиме bridge при использовании Wi-Fi сетевой карты. Мы спланируем адресное пространство нашей сети и произведем необходимые настройки. Также я расскажу о том, почему сложно настроить режим bridge в KVM обычном понимании.
Оглавление
Введение
Недавно один из читателей блога в комментариях к моей статье про установку и настройку QEMU/KVM в Ubuntu задал вопрос, который показался мне интересным: «А возможно ли организовать Wi-Fi bridge на QEMU/KVM?». Для понимания того, почему этот вопрос вообще возник, давайте немного углубимся в различие в передаче данных Ethernet и WiFi.
Wi-Fi требует дополнительных MAC-адресов для связи: в дополнение к адресу источника (SA) и адресу назначения (DA), которые совпадают с MAC-адресами источника и назначения, в случае работы по Ethernet, Wi-Fi также требуется адрес передатчика (TA) и адрес получателя (RA). Всего в сумме получается 4 MAC-адреса.
Поскольку, в общем случае, когда клиент (STA) отправляет TA=SA, а когда точка доступа (AP) отправляет на клиента (STA) DA=RA, то обычно требуются только 3 адреса, и именно так настраивается AP: для использования только 3-х адресов из 4-х возможных.
Клиент-же в режиме моста означает, что (в указанном выше случае) TA!=SA или DA!=RA и, соответственно, необходимы все 4 адреса, в то время как AP настроена только для 3-х адресов. Вот почему в обычных конфигурациях невозможно подключить Wi-Fi в режиме моста. Для работы соединения в режиме моста необходимо включить 4-х адресный режим как на AP, так и на STA. Такой механизм обычно это называется беспроводной распределенной системой (WDS). И, ожидаемо, существует несколько несовместимых реализаций этого механизма. Следовательно необходимо, чтобы оборудование AP и все STA использовали совместимую реализацию.
Подводя итог, можно сказать, что это довольно непростой путь. Не у каждого окажется оборудование, которое сможет работать в этих режимах. Я же предлагаю пойти другим, более простым путем, используя подсеть меньшего размера и Proxy ARP.
Установка ПО
Итак, для упрощения задачи установим пакет virt-manager:
sudo apt install -y virt-manager
Далее нам необходимо выделить подсеть внутри вашей локальной сети меньшего размера для виртуальных машин. Для удобства расчета установим программу ipcalc :
sudo apt install -y ipcalc
Планирование сети
После установки приступим к планированию сети. Если у вас есть DHCP сервер, то потребуется его настройка. Например, вы используете сеть 192.168.5.0/24 . Вам нужно выделить из нее часть адресов для подсети, которая будет обслуживать виртуальные машины, а часть оставить для устройств с фиксированными ip-адресами, а остальное адресное пространство отдать для устройств в вашей сети, которые получают адреса с dhcp сервера.
Предположим, что DCHP сервер у вас настроен на роутере с диапазоном выдачи адресов клиентам 192.168.5.16-192.168.5.201 , а первые 15 адресов отданы под статику. Запустив
Address: 192.168.5.16 11000000.10101000.00000101.0001 0000 Netmask: 255.255.255.240 = 28 11111111.11111111.11111111.1111 0000 Wildcard: 0.0.0.15 00000000.00000000.00000000.0000 1111 => Network: 192.168.5.16/28 11000000.10101000.00000101.0001 0000 HostMin: 192.168.5.17 11000000.10101000.00000101.0001 0001 HostMax: 192.168.5.30 11000000.10101000.00000101.0001 1110 Broadcast: 192.168.5.31 11000000.10101000.00000101.0001 1111 Hosts/Net: 14 Class C, Private Internet
Создание сети в Virt Manager
Для наших виртуальных машин мы можем использовать сеть 192.168.5.16/28 из 14 хостов. Для этого на роутере мы меняем диапазон выдаваемых DHCP сервером адресов на 192.168.5.32-192.168.5.201 и создаем новую сеть для виртуальных машин, используя GUI Virt Manager’а.
Настройка VM
В настройках сети необходимо выбрать режим маршрутизации и ваш физический интерфейс wi-fi. Далее нужно отключить виртуальную сеть по умолчанию (default) и подключить созданную bridged сеть к виртуальному сетевому интерфейсу нашей машины.
Настройка Proxy ARP
Последний штрих для создания нашего «моста» — это включить Proxy ARP для беспроводного интерфейса. Для этого идем в консоль и набираем следующее:
sudo bash -c 'echo 1 > /proc/sys/net/ipv4/conf/wlo1/proxy_arp'
Внимание! В строке выше wlo1 вам необходимо заменить на название вашего беспроводного интерфейса.
Проверка работы
Проверяем, что все работает в запущенной виртуальной машине:
Как создать и настроить 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-файл моста.
Добавьте в файл детали моста.
Чтобы определить сеть из файла 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: 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 $ ifname $
Connection 'br0' (be6d4520-0257-49c6-97c2-f515d6554980) successfully added.
3. Измените мост, чтобы добавить IP-адрес, шлюз и DNS
sudo nmcli connection modify $ ipv4.addresses $ ipv4.method manual sudo nmcli connection modify $ ipv4.gateway $ sudo nmcli connection modify $ ipv4.dns $ +ipv4.dns $
4. Добавьте сетевое устройство как подчиненное устройство моста.
sudo nmcli connection delete $ sudo nmcli connection add type bridge-slave autoconnect yes con-name $ ifname $ master $
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.