Настройка 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.

Proxmox_network
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 на другой

5 thoughts on “Настройка NAT для виртуальных машин Proxmox.

  1. Заметил ошибки:
    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′ кавычки не те. Должны быть такие ‘

  2. в 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

    но один фиг не работает пробро(

    1. в общем заработало) дело было в том что я цеплялся с хоста(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

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.