Настройка сети KVM в режиме bridge для Wi-Fi

KVM wi-fi bridge

В данной статье я расскажу как настроить работу виртуальной сети 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 адресов отданы под статику. Запустив

ipcalc 192.168.5.16/28

мы видим следующее

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’а.

Параметры виртуальной bridge сети KVM
Параметры виртуальной bridge сети
Настроенная виртуальная bridge сеть KVM
Виртуальная bridge сеть KVM

Настройка VM

В настройках сети необходимо выбрать режим маршрутизации и ваш физический интерфейс wi-fi. Далее нужно отключить виртуальную сеть по умолчанию (default) и подключить созданную bridged сеть к виртуальному сетевому интерфейсу нашей машины.

Настройка сетевого адаптера VM
Настройка сетевого адаптера VM

Настройка Proxy ARP

Последний штрих для создания нашего «моста» — это включить Proxy ARP для беспроводного интерфейса. Для этого идем в консоль и набираем следующее:

sudo bash -c 'echo 1 > /proc/sys/net/ipv4/conf/wlo1/proxy_arp'

Внимание! В строке выше wlo1 вам необходимо заменить на название вашего беспроводного интерфейса.

Проверка работы

Проверяем, что все работает в запущенной виртуальной машине:

Проверка работы в режиме bridge
Проверка работы в режиме bridge

3 комментария к “Настройка сети KVM в режиме bridge для Wi-Fi

  1. Мучался с этой проблемой несколько лет. Пробовал настроить, но потом забил. А сейчас все получилось! Спасибо вам большое!

  2. Ипсользую ваше обьяснение для интеграции Home Assistant на KVM.
    Все вышло прекрасно за вычетом настройки фаервола. Она оказалась действующей на сессиюю и после перезагрузки доступ к IP гостей прекращается. Возможно я пока не уловил смысл точно, но повторный запуск bash помог.
    sudo bash -c ‘echo 1 > /proc/sys/net/ipv4/conf/wlo1/proxy_arp’

    Можете подсказать, как пременить это перманентно?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *