• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Настройка сервера proxmox для работы виртуальных машин по wifi с помощью NAT.

21 сентября, 2024

Работа протестирована на МиниПК на Ryzen 7 5700U с двумя HDD 3.5: https://alii.pub/71mcyu?erid=2SDnjcCC1yC

Я написал более правильный способ настройки wifi, для работы в proxmox с помощью маршрутизации. Там нет никаких ограничений по работе. Все-же этот способ через NAT и тут надо будет пробрасывать порты постоянно. А маршрутизацию один раз настроил и забыл.

Самый правильный способ настройки wifi в proxmox можно найти тут:

Wifi в proxmox с помощью маршрутизации

Мы часто используем для домашнего сервера всякие миниПК и устанавливаем туда Proxmox. Зачастую на этих миниПК есть wifi и дома мы используем Wifi сеть, а вот proxmox не любит wifi и практически с ним не работает. Работает только по ethernet.

Я описывал один способ по настройке wifi адаптера но для прокидывания его в одну виртуалку:

Настройка wi-fi на Proxmox.

Тут опишу и покажу другой способ. Он тоже хитрый, костыльный -да, но позволит работать от одного wifi подключения все Виртуальные машины которые установлены в proxmox.

Будет это работать с помощью проброса портов (примерно так-же как Вы это делаете на роутере). То есть подключаясь на Ip адрес проксмокса и на определенный порт, попадаем на нужную нам виртуальную машину.

 

В чем основная суть решения:
– создаем новый мост/bridge в Proxmox с, по сути, произвольным IP-адресом на выбор. Я выбрал 10.10.10.1/24
– wifi модули в Proxmox сложно или невозможно стандартными способами использовать в мостах по аналогии с ethernet, поэтому используем iptables. iptables это модуль ядра, с помощью правил в котором мы роутим пакеты от и в наш сетевой wifi интерфейс.
См. конфигурацию /etc/network/interfaces
– к wifi подключаемся через wpa_supplicant так проще и надежнее
– через wifi не будет работать DCHP для тех LXC/VM которым в настройках добавим мост vmbr0. Поэтому нужно использовать отдельный DCHP, например dnsmasq. Он будет выдавать IP адреса всем LXC. Устанавливается на сервере Proxmox.
– отдельный аспект — это переадресация портов с и на IP выданные dnsmasq, поскольку получается NAT в котором vmbr0 выступает как бы роутером. Для того, что подключить к web-интерфейсу LXC в подсети dnsmasq нужно нужные порты пробросить до реального IP-адреса wi-fi устройства.
Для этого есть скрипт run-portforwarding.sh

Итоговая сетевая схема:
Роутер (192.168.1.1) <-> Proxmox (wifi, 192.168.1.111) <-> Proxmox + dnsmasq (vmbr0, 10.10.10.1) <-> Proxmox LXC (vmbr0, DCHP -> 10.10.10.*)
На роутере настроен фиксированный адрес для Proxmox, 192.168.1.111. На хосте Proxmox установлен dnsmasq.

Приступаем к настройке:

Ставим пакет для работы с wifi под названием wpasupplicant
apt install -y wpasupplicant

Определяем как называется у нас wi-fi интерфейс:

ip a

 

У меня интерфейс имеет имя -> wlp3s0

Идем редактировать файл /etc/network/interfaces

nano /etc/network/interfaces

 

Приводим к такому содержимому:

auto lo
iface lo inet loopback

### ethernet setup
#auto enp0s10
allow-hotplug enp0s10
iface enp0s10 inet manual

### wifi setup
auto wlp3s0
iface wlp3s0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

### default ethernet bridge setup
#auto vmbr0
#iface vmbr0 inet static
# address 192.168.1.112/24
# gateway 192.168.1.1
# bridge-ports enp0s10
# bridge-stp off
# bridge-fd 0

auto vmbr0
iface vmbr0 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up echo 1 > /proc/sys/net/ipv4/conf/vmbr0/proxy_arp
post-up iptables -t nat -A POSTROUTING -s '10.10.10.1/24' -o wlp3s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.1/24' -o wlp3s0 -j MASQUERADE

source /etc/network/interfaces.d/*

 

В этом файле интерфейсы на свои нужно переименовать. а именно wlp3s0 который  у меня. Так-же старый конфиг который был я заккоментил.

Далее Создаем и редактируем файл wpa_supplicant.conf

nano /etc/wpa_supplicant/wpa_supplicant.conf

Содержимое:

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="Keenetic"
psk="*******"
scan_ssid=1
}

Где в ssid – указываете SSID вашей WIFI сети, а в psk указываете пароль от неё.

После этого устанавливаем dnsmasq как внутренний DCHP на Proxmox

apt install dnsmasq dnsutils -y

Далее редактируем файл и добавляем в него содержимое в самый конец:

nano /etc/dnsmasq.conf

Содержимое:

domain=dnsmasq.local
interface=vmbr0

# Интервал выдаваемых адресов и время аренды адресов (в данном случае 12 часов).
dhcp-range=10.10.10.51,10.10.10.200,12h

# Задать значение опции DHCP с номером 1. Опция с номером 1 — это маска подсети (netmask).
dhcp-option=1,255.255.255.0

# Задать значение опции DHCP с номером 3. Опция с номером 3 — это шлюз по умолчанию (default gateway).
dhcp-option=vmbr0,3,10.10.10.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=10.10.10.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 адреса свои из сети 10.10.10.0 , так-же настроили сетевые интерфейсы так, чтоб мост для виртуалок вел на интерфейс wifi.

Ну и получается, что после этих шагов у наших виртуалок есть выход в интернет, но они за NAT’ом находятся. И чтоб до этих виртуалок достучаться, нужно делать проброс портов. Иначе к сожалению ни как. По этому далее идут шаги по настройке проброса портов.

Переадресация портов:

Создаем файл скрипта run-portforwarding.sh

nano /root/run-portforwarding.sh

Содержимое:

#!/bin/bash

EXT_IP="192.168.1.111" # внешний, реальный IP-адрес шлюза;
INT_IP="10.10.10.1" # внутренний IP-адрес шлюза, в локальной сети;
EXT_IF=wlp3s0 # внешний и внутренний интерфейсы.
INT_IF=wlp3s0 # внутренний интерфейс шлюза, с адресом $INT_IP;
FAKE_PORT=$1 # как первый параметр, передаём скрипту "нестандартный" порт на внешнем интерфейсе,
LAN_IP=$2 # второй параметр, внутренний IP-адрес сервера, предоставляющего службы/сервисы внешнему миру;
SRV_PORT=$3 # порт службы/сервиса. Для веб-сервера равен 80, для SMTP - 25 и т.д.;

iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp --dport $FAKE_PORT -j DNAT --to-destination $LAN_IP:$SRV_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP
iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

 

Даём права на запуск скрипта:

chmod +x /root/run-portforwarding.sh

# Запуск скрипта например для Home Assistant
/root/run-portforwarding.sh 8123 10.10.10.10 8123

Суть скрипта выше, пробросить 8123 порт Home Assistant с адресом (10.10.10.10) на порт 8123 реального IP адреса wi-fi устройства (192.168.1.111). На этом порту можно будет открыть luci.

Проверка через iptables

iptables -t nat -L
iptables -L

 

Ну и теперь у нас проброшен порт и когда мы введем 192.168.1.111:8123, то попадём в Home Assistant. Далее если например мы другой экземляр еще Home Assistant установили, то проброс портов будет вот такой:

/root/run-portforwarding.sh 8124 10.10.10.11 8123

Что означает, что введя 192.168.1.111:8124 мы попадём на адрес 10.10.10.11:8123 другой виртуалки.

Ну и так-же можно будет пробрасывать например ssh порты для других виртуалок и так далее.

Да к сожалению это все костыли и мы задолбаемся порты прокидывать. Но иначе никак.  В Home Assitant надо много всего пробрасывать. Например еще порт mqtt.

 

Автозапуск скрипта проброса портов:

Так-же мы вручную запускали скрипт для проброса портов, а как сделать это автоматически, чтоб при запуске системы у нас все пробрасывалось.

 

Создаем новый сервис в systemd:

nano /etc/systemd/system/pve-home-assistant.service

Содержимое файла будет такое:

 

[Unit]
Description=Run Port Forwarding Script

[Service]
ExecStartPre=/bin/bash -c "sleep 30; /root/run-portforwarding.sh 23 10.10.10.145 22"
ExecStartPre=/bin/bash -c "sleep 30; /root/run-portforwarding.sh 24 10.10.10.146 22"
ExecStart=/bin/bash -c "sleep 30; /root/run-portforwarding.sh 8123 10.10.10.13 8123"
Restart=always
User=root

[Install]
WantedBy=multi-user.target

 

 

Для примера тут указан запуск скрипта 3 раза, для трёх виртуалок. В первых двух мы пробрасываем порт 23 и порт 24 на порт 22 виртуалок.

А в третьем для Home Assistant мы пробрасываем 8123 на порт 8123.

Так-же если у Вас будет 4тая виртуалка, то для неё запуск скрипта должен начинаться с ExecStartPre и находиться выше чем последний запуск скрипта.

Так-же мы могли заметить, что тут стоит задержка sleep 30 на 30 секунд (можно меньше поставить), чтоб все успевало прогрузиться на сервере proxmox после запуска системы.

 

После этого сохраняем файл и добавляем его в автозагрузку:

systemctl enable pve-home-assistant.service

И запускаем его:

systemctl start pve-home-assistant.service

 

Настройка ESPHome для работы через NAT:

Так-же давайте покажу для примера как настроить ESPHome для такой работы.

В Home Assistant в ESPHome для начала в “Показать неиспользуемые дополнительные параметры конфигурации” включаем ” Use ping for status“.

 

И теперь когда создаём устройство в ESPHome, в конфигурации в блоке wifi указываем ip адрес вручную:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  use_address: 10.155.222.1
Но это нужно для прошивки по воздуху. Если Вам это не нужно, то добавляя по ip адресу в Home Assistant -> интеграции-> ESPHome устройство, оно будет давать данные в сам Home Assistant без этих манипуляций.
P.S. ну а вообще проще конечно избегать всего этого решения и пользоваться нормальным Ethernet подключением, Мы сразу тогда решим массу проблем и проще будет житься.

Primary Sidebar

Поиск

Новые записи

  • Интеграция ИИ Deepseek в Home Assistant
  • Выводим уведомления из умного дома Home Assistant на Android TV с помощью программы TvOverlay.
  • Автоматизация оповещения о надвигающимся дожде в Home Assistant
  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·