Настройка NAT в Proxmox позволяет использовать адрес одного сервера хостинга для нескольких виртуальных машин, что существенно может сэкономить ваши средства и ресурсы. Инструкцию по настройке NAT на Proxmox мы разбили на три этапа:
1. Настройка интерфейсов Proxmox для использования NAT;
2. Настройка сети на виртуальных машинах;
3. Проброс портов для управления виртуальными машинами Proxmox.
В статье есть видео, которое на практике показывает все перечисленные этапы.
1. Настройка Proxmox для NAT.
1.1. В сетевых настройках Proxmox вы видите интерфейс, например vmbr0 с типом Linux Bridge, у которого ip-адресом является внешний адрес вашего сервера, по которому вы и подключаетесь к вашему серверу.
Для настройка NAT Proxmox необходим еще один Linux Bridge интерфейс, который будет является внутренней сетью для виртуальных машин. Создадим его и назовем например, vmbr100, с адресом 192.168.100.0/24 (поле IPv4/CIDR) и Comment NAT.
1.2. Теперь подключаемся в Linux-машине (Debian), на которой развернут Proxmox и настроим сетевой интерфейс аналогично настройкам в Proxmox, который будет являться шлюзом виртуальных машин, для выхода в интернет.
Настройки сетевого интерфейса выполняем в /etc/network/interfaces, которые выглядят примерно так:
auto vmbr0 iface vmbr0 inet static address 4X.XX.XX.X4/26 gateway 4X.XX.XX.XX bridge-ports enp0sXXX bridge-stp off bridge-fd 1 pointtopoint 4X.XX.XX.XX bridge_hello 2 bridge_maxage 12 auto vmbr100 iface vmbr100 inet manual bridge-ports none bridge-stp off bridge-fd 0
где iface vmbr0 — это внешний интерфейс сервера, который трогать нельзя, а iface vmbr100 — это созданный нам в proxmox интерфейс для NAT, который требуется настроить со статическим адресом 192.168.100.1, с пробросом трафика, настройками NAT и привести к такому виду:
auto vmbr0 iface vmbr0 inet static address 4X.XX.XX.X4/26 gateway 4X.XX.XX.XX bridge-ports enp0sXXX bridge-stp off bridge-fd 1 pointtopoint 4X.XX.XX.XX bridge_hello 2 bridge_maxage 12 auto vmbr100 iface vmbr100 inet static address 192.168.100.1 netmask 255.255.255.0 bridge-ports none bridge-stp off bridge-fd 0 #NAT post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '192.168.100.0/24' -o vmbr0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '192.168.100.0/24' -o vmbr0 -j MASQUERADE
Проброс портов мы выполнили строчкой post-up echo 1 > /proc/sys/net/ipv4/ip_forward, можно аналогично выполнить настройку в файле /etc/sysctl.conf, дописав в него строчку:
net.ipv4.ip_forward=1
Перезагружаем сервер:
sudo reboot
На этом настройка сервера и Proxmox завершена, переходим ко второму этапу.
2. Сетевые настройки виртуальных машин Proxmox.
2.1. Переходим к виртуальной машине с операционной системой Ubuntu 20.04, созданной на Proxmox.
Узнаем имя интерфейса виртуальной машины, который надо будет настроить в ранее созданную сетку 192.168.100.0/24, командой:
sudo ip a // Или sudo lshw -class network
В выводе команды запоминаем имя интерфейса (ens18), который смотрит в Proxmox (можно сравнить mac-адрес в выводе команды с mac-адресом в настройках proxmox виртуальной машины — Hardware — Network Device (net0)).
Переходим к сетевым настройкам, которые в Ubuntu 20.04 находятся не в /etc/network/interfaces как Debian, а в /etc/netplan/00-installer-config.yaml.
Основные настройки файла 00-installer-config.yaml:
addresses — ip адрес который будет назначен вашей сетевой карте, в нашем случае 192.168.100.10.
gateway4 — ip адрес вашего роутера, в нашем случае это адрес сервера proxmox, который является шлюзом — 192.168.100.1.
nameservers — DNS сервера, шлюз или 8.8.8.8.
Настройки файла должны выглядеть следующим образом:
network: ethernets: enp0s3: addresses: - 192.168.100.10/24 gateway4: 192.168.100.1 nameservers: addresses: [192.168.100.1, 8.8.8.8] optional: true version: 2 renderer: networkd
Для применения настроек выполняем команды:
sudo netplan generate sudo netplan apply
Если при попытке применить настройки у вас выходит ошибка в виде:
/etc/netplan/00-installer-config.yaml:5:1: Invalid YAML: tabs are not allowed for ident: addresses:
Значит у вас не соблюдена табуляция (пробелы) в строке 5:1, либо ошибка связана с орфографией(текстовка другая будет).
Перезапускаем сервер:
sudo reboot
2.2. В сетевых настройках виртуальной машины в Proxmox необходимо изменить сетевые настройки Bridge, где скорее всего у нее стоит интерфейс vmbr0, а нужно изменить на vmbr100. Для этого выбираем виртуальную машину и переходим в меню Hardware — Network Device (net0). В открывшемся окне в поле Bridge меняем vmbr0, на vmbr100, который мы создавали для NAT ранее.
Перезапускаем виртуальную машину и командой traceroute adminwin.ru проверяете, что первым хопом у вас указывается адрес 192.168.100.1, что подтверждает успешную настройку NAT.
В следующем этапе покажу как пробросить порты до виртуальной машины за NAT.
3. Проброс портов для управления виртуальными машинами Proxmox.
3.1. Итак у нас на виртуальных машинах заработал NAT и нам необходимо настроить до машин доступ из внешней сети для управления, например — SSH. Подключаемся к машине, на которой у нас развернут Proxmox, которую мы настраивали в первую очередь и перейти к настройке iptables.
Для просмотра текущих настроек iptables выполним команду:
iptables -L -t nat
По дефолту правила iptables выглядят следующим образом + к ним настройка MASQUERADE, которую мы прописали в файле /etc/network/interfaces 1 этапа настроек:
Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 192.168.100.0/24 anywhere
3.1. Добавим правило, для проброса порта SSH (tcp/22) на виртуальную машину за NAT с заменой 22 порта на 2222:
iptables -t nat -A PREROUTING -p tcp -d 4X.XX.XX.X4 --dport 2222 -i vmbr0 -j DNAT --to-destination 192.168.1.10:22
где,
4X.XX.XX.X4 — внешний IP адрес;
—dport 2222 — внешний порт по которому будут обращаться для подключения к виртуальной машине за NAT.
—to-destination 192.168.1.10:22 — внутренний IP виртуальной машины и порт, к сервису которого мы хотим подключиться.
Сохраняем правила iptables:
iptables-save
Предлагаю прочитать статью, где рассказывается как изменить стандартный порт подключения к SSH на другой
Заметил ошибки:
iptables -t nat -A PREROUTING -p tcp -d 4X.XX.XX.X4 —dport 2222 -i vmbr100 -j DNAT —to-destination 192.168.1.10:22
должно быть vmbr0
а тут:
ost-up iptables -t nat -A POSTROUTING -s ‘192.168.100.0/24′ -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s ‘192.168.100.0/24’ -o vmbr0 -j MASQUERADE
в ‘192.168.100.0/24′ кавычки не те. Должны быть такие ‘
Спасибо! все верно.
Правило проброса порта после перезагрузки proxmox пропадает
в iptables -t nat -A PREROUTING -p tcp -d 4X.XX.XX.X4 —dport 2222 -i vmbr0 -j DNAT —to-destination 192.168.1.10:22
тоже ошибка -to-destination 192.168.100.10:22
но один фиг не работает пробро(
в общем заработало) дело было в том что я цеплялся с хоста(proxmox) на его же ip по ssh а надо было с других ip
вот конфиг для виртуальной сети с пробросом ssh может кому поможет)
auto vmbr100
iface vmbr100 inet static
address 192.168.100.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
#NAT
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s ‘192.168.100.0/24’ -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s ‘192.168.100.0/24’ -o vmbr0 -j MASQUERADE
#SSH
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp —dport 2222 -j DNAT —to 192.168.100.20:22
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp —dport 2222 -j DNAT —to 192.168.100.20:22
а если проксмокс смотрит в инет не через мост, а прямо через интерфейс?
пробовал мост сделать по аналогии со скринами,
но тогда из инета не виден проксмокс по порту 8006
в общем, проблема в ufw оказалась.
копаюсь. из-за него, при включении ната начинает ключить веб-морда на порту 8006.
выключаешь файер — все норм, включаешь — часть функций, например, консоль ВМ не работает.