Работа протестирована на МиниПК на Ryzen 7 5700U с двумя HDD 3.5: https://alii.pub/71mcyu?erid=2SDnjcCC1yC
Всем привет. Я долго бьюсь над тем, чтоб полноценно заработал wifi на proxmox. Proxmox как серверный софт, естественно из коробки заточен на то, чтоб работать по Ethernet интерфейсу. И wifi там даже и не пахнет.
Но так как proxmox работает на Linux, то в теории интерфейс можно на wifi перенастроить. Но как только Вы это сделаете, то поймёте, что почему-то виртуалки ваши недоступны.
А дело все в том, что wifi точка не пропускает через себя множество разных мак адресов, а только один. На этом мы и получаем блок.
- И чтоб все заработало, я сначала пробовал вариант, с пробросом wifi модуля к виртуалке. Это работало, но для одной виртуальной машины, а сам proxmox оставался работать по ethernet порту. Это конечно было не очень интересно. Смысл wifi тогда терялся. И такое применение можно использовать только в узких моментах. Почитать о нём можно тут.
- Второй способ который я попробовал, это был NAT. То есть ip адрес и MAC у нас у wifi интерфейса был один, а все виртуальные машины были за натом и выходили в сеть (как собственно и в сеть интернет). С этим способом уже можно было все виртуальные машины и сам Proxmox настроить на работу по wifi. Но тут были проблемы в том, что, чтоб достучаться до виртуальной машины, надо было пробрасывать порты (как мы делаем на роутере в случае подключения к домашней сети). И это очень неудобно, так как портов может быть огромное множество и одинаковые указывать нельзя. Что в конечном итоге приведёт к тому, что мы попросту запутаемся. Почитать о нём можно тут.
- Ну а в этой статье будет использоваться третий вариант. У этого варианта нет изъянов, кроме того, что нужно дополнительные настройки произвести. В этом варианте мы настроим сетевые интерфейсы так, что у нас будет внутренняя сеть 192.168.3.0 – в которой будут сидеть виртуальные машины. И настроим маршрутизацию, чтоб из нашей обычной локальной сети (у меня она 10.155.222.0) мы могли достучаться до виртуалок из сети 192.168.3.0 и виртуалки могли общаться с сеть 10.155.222.0 и выходить в интернет.
Вот в данной статье я и покажу как настроить данную работу. После настройки Вы сможете полноценно использовать wifi не подключаясь проводом. А мне такой способ просто необходим, так как живу в маленькой квартире и места под то, чтоб тянуть провода попросту нет, а у роутера размещать сервачек тоже нет возможности, для него там места не хватает.
По этому у меня план отнести сервер на балкон и там он будет работать через wifi.
Наверное я уже утомил вступлением, по этому давайте перейдём к настройке.
Настройка интерфейсов для работы wifi в Proxmox:
Настройка wifi интерфейса:
Обновляем пакеты:
apt update
Ставим пакет для работы с wifi под названием wpasupplicant
apt install wpasupplicant
Отключаем его из автозагрузки:
systemctl disable wpa_supplicant
Вписываем SSID и пароль от вашей wifi сети. Где NETGEAR
– нужно заменить на название Вашей SSID сети. А PASSWORD
заменить на пароль от Вашей wifi сети.
wpa_passphrase NETGEAR PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf
Далее проверяем файл с данными wifi сети:
cat /etc/wpa_supplicant/wpa_supplicant.conf
Должно выдать что-то такое:
Определяем как называется у нас wi-fi интерфейс:
ip a
У меня интерфейс имеет имя -> wlp3s0
Далее создаём Сервис, который будет автоматически запускать wifi сеть при загрузке системы:
nano /etc/systemd/system/wpa_supplicant.service
И вставим туда вот такое содержимое:
[Unit] Description=WPA supplicantBefore=network.target
After=dbus.service
Wants=network.target
IgnoreOnIsolate=true [Service] Type=dbus
BusName=fi.w1.wpa_supplicant1
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlp3s0
Restart=always
[Install] WantedBy=multi-user.target
Alias=dbus-fi.w1.wpa_supplicant1.service
Где wlp3s0
Указываем свой интерфейс wifi который узнали выше.
Далее сохраняем этот файл и программу wpa_supplicant
добавляем в автозагрузку.
systemctl enable wpa_supplicant
Настройка сетевых интерфейсов:
Следующим шагом редактируем Все Ваши сетевые интерфейсы в Proxmox:
nano /etc/network/interfaces
И приводим их к такому виду:
Показал скриншотом не просто так. Дело в том, что по какой-то причине, когда я сюда вставлял код, где-то видимо кодировка ломалась и при обратной вставке в файл с сайта, не поднимался порт vmbr0, который и отвечает за мост между wifi и виртуалками. По этому я оставлю тут ссылку на скачивание файла текстового, где все вбито. Ну либо руками набивайте.
Ссылка на скачивание: https://disk.yandex.ru/d/2vuTMdPdUD-jBQ
После скачивания файла, его нужно отредактировать под себя.
Тут нужно понимать что мы делаем. Во первых, указываем, что LAN интерфейсы у нас eno1
и enp2s0
просто в режиме получения адреса по DHCP. Это физические лан порты моего сервера, их мы не будем использовать.
Так-же назначаем и WIfi интерфейсу wlp3s0
Тоже получать ip адрес по DHCP. Но так как мы ранее wifi уже настроили, то этот интерфейс у нас получит ip адрес.
Виртуальному интерфейсу vmbr0
который создаёт сам proxmox указываем, что у него будет адрес 192.168.3.1/24
И собственно отсюда понятно, что внутренняя сеть у нас будет для виртуальных машин 192.168.3.0/24.
Так-же этому интерфейсу указываем iptables правила, по которым трафик будет заворачиваться исходящий на интерфейс wlp3s0 и обратно идти через интерфейс vmbr0. Это все делают 4 строчки правил iptables:
post-up iptables -A FORWARD -i wlp3s0 -j ACCEPT
post-up iptables -A FORWARD -0 wlp3s0 -j ACCEPT
post-up iptables -A FORWARD -i vmbr0 -j ACCEPT
post-up iptables -A FORWARD -0 vmbr0 -j ACCEPT
Далее сохраняем конфиг и перезапускаем сначала wifi:
systemctl restart wpa_supplicant
Потом перезапускаем сеть linux целиком, чтоб применились все настройки:
systemctl restart networking
Либо все это дело можно просто в reboot отправить:
reboot
Установка и настройка DHCP сервера DNSMASQ:
После этого устанавливаем dnsmasq как внутренний DCHP на Proxmox. То есть эта утилита будет раздавать по DHCP ip адреса нашим виртуалкам из сети 192.168.3.0/24
apt install dnsmasq dnsutils -y
Далее редактируем файл и добавляем в него содержимое в самый конец:
nano /etc/dnsmasq.conf
Содержимое:
domain=dnsmasq.local
interface=vmbr0
# Интервал выдаваемых адресов и время аренды адресов (в данном случае 12 часов).
dhcp-range=192.168.3.10,192.168.3.200,12h
# Задать значение опции DHCP с номером 1. Опция с номером 1 — это маска подсети (netmask).
dhcp-option=1,255.255.255.0
# Задать значение опции DHCP с номером 3. Опция с номером 3 — это шлюз по умолчанию (default gateway).
dhcp-option=vmbr0,3,192.168.3.1
# Read DHCP host information from the specified file. The format of a line is the same as text to the right of '=' in —dhcp-host.
dhcp-hostsfile=/etc/dnsmasq-hosts.conf
# DNS-серверы, на которые будут форвардиться запросы
server=192.168.3.1
server=1.1.1.1
server=8.8.8.8
# Файл аренды адресов
dhcp-leasefile=/var/log/dnsmasq/dnsmasq.leases
# Кеширование
cache-size=10000
all-servers
no-negcache
# Логирование
log-queries
log-facility=/var/log/dnsmasq/dnsmasq.log
После этого сохраняем файл и редактируем файл для хранения постов.
# Создаем файл для хранения хостов:
nano /etc/dnsmasq-hosts.conf
Содержимое, как пример для выдачи фиксированных адресов по MAC:
BC:24:11:DE:41:64,10.10.10.10 # OpenWRT
BC:24:11:50:BB:CC,10.10.10.11 # Alpine-Docker LXC
BC:24:11:3D:E1:6A,10.10.10.12 # Alpine-Base LXC
Как пример указаны 3 хоста, где указаны их маки и ip которые им присваивать. Меняем естественно на свои.
После этого создаем каталог для хранения лога:
mkdir /var/log/dnsmasq
Перезапускаем dnsmasq, чтобы применить изменения:
systemctl restart dnsmasq
Просмотреть лог можно командой (непрерывное чтение):
tail -f /var/log/dnsmasq/dnsmasq.log
# Проверить выданные IP адрес dnsmasq
cat /var/log/dnsmasq/dnsmasq.leases
По сути мы сейчас создали новый dhcp сервер, который будет раздавать внутри proxmox ip адреса свои из сети 192.168.3.0 , так-же настроили сетевые интерфейсы так, чтоб трафик вел на интерфейс wifi и обратно.
Ну и получается, что сейчас весь наш трафик который мы хотим отправить или получить через интернет, будет стучаться на интерфейс wifi wlp3s0
Но вот из нашей основной локальной сети (собственно в которой и работает наш wifi интерфейс) мы пока не можем достучаться до наших виртуалок, так как до них тоже нужно прописать маршрут и этот маршрут надо прописывать на роутере.
Маршрут прописываем на Keenetic:
У меня Роутер keeenetic, по этому покажу как сделать маршрутизацию на нём.
Идём в Сетевые правила-> Маршрутизация -> добавить маршрут:
Там выбираем в тип маршрута -> Маршрут до сети , описание произвольное, я указал Proxmox.
Адрес сети назначения у нас будет 192.168.3.0
Адрес шлюза будет ip адрес, который мы получили по wifi. у меня это 10.155.222.114
После добавления этого маршрута, мы сможем уже получать доступ к нашим виртуалкам внутри proxmox. Но у них по прежнему не будет интернета, потому что сети 192.168.3.0 нужно еще на роутере разрешить выходить в интернет.
Для этого прописываем маршрут, чтоб из сети 192.68.3.0 при обращении на роутер натились запросы. Это получилось сделать только через командную строку. По этому в случае с keenetic, подключаемся к консоли через telnet и вводим туда вот такую команду:
ip nat 192.168.3.0 255.255.255.0
И нужно далее сохранить конфигурацию, иначе после перезагрузки роутера по питанию это правило удалится. Сохраняется в командной строке командой:
system configuration save
Вывод:
На этом настройка сети закончена. И мы полноценно наконец-то можем пользоваться wifi сетью в proxmox. И наконец я этот домашний сервер умного дома proxmox отнесу на балкон, где он у меня будет трудиться по сети. Причем больше настроек таких сложных делать не придётся, а просто при установке новой виртуалки, ей выдастся адрес внутренним dhcp сервером dnsmasq. Ну а так как маршрутизация уже вся настроена, виртуалки сразу получат доступ в интернет и доступ с вашей локальной сети до виртуальной машины новой тоже будет доступен.
На этом я свою эпопею с настройкой wifi в proxmox заканчиваю. Вышло целых 3 статьи, все по сути рабочие но со своими минусами. Кроме этой. Тут все настраивается без изъянов. И получилась полная рабочая инструкция. Я по ней еще 5 раз попробовал установить все, пока отладкой занимался, по этому copy-paste будет работать.
P.S. Взял информацию частично с этой статьи: https://forum.proxmox.com/threads/howto-proxmox-ve-8-x-x-wifi-with-routed-configuration.147714/
Но я её причесал и лишнее убрал, ну а что-то добавил. По итогу получилось интереснее.