Проблема "двойного NAT'a" звучит устрашающе для новичков, да что греха таить, подчас может ввести в ступор и бывалых админов.
Откуда ноги растут? Есть обычных домашний Wifi-роутер который умеет только прокидывать порты сквозняком (без переназначения номеров) и позволяет настроить примитивную маршрутизацию и раздачу DHCP либо статику с подсетью 192.168.1.0/24
В локалке за роутером стоит сервак HP G7 с Proxmox KVM на борту. Своим единственным сетевым интерфейсом он смотрит на роутер с шлюзом 192.168.1.1. На нём крутятся виртуалки с внутренними IP 10.10.10.0/24
Задача: обеспечить виртуалкам доступ в глобальную сеть по определённым портам, например RDP.
Первым делом, пробрасываю порт сквозняком, включаю роутинг на вайфае в подсетку 10.10.10.0 и бриджинг из подсети на интерфейс сервака, смотрящий на вайфай-роутер.
Нифиганеработает!
Идём по цепочке двойного проброса:
после собственно проброса нужного порта на вайфае:
33389 192.168.1.2 33389 TCP или UDP Включено
вносим конфигурационные изменения в конфиг сети сервака с Proxmox:
nano /etc/network/interfaces
находим там виртуальный интерфейс vmbr1(2,3...и т.п.) который связан с нужной нам виртуалкой и добавляем в конец конфига следующие строки:
auto vmbr1
iface vmbr1 inet static
address 10.10.10.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADEVmbr0 это интерфейс сервака, смотрящий на вайфай роутер с айпи в моем случае 192.168.1.2 - он может называться eth0, eth1 и т.п.
В моём конфиге он выглядит так:
auto vmbr0
iface vmbr0 inet static
address 192.168.1.2/24
gateway 192.168.1.1
bridge-ports eth0
bridge-stp on
bridge-fd 0
network 192.168.1.0
dns-nameservers 192.168.1.1 8.8.8.8
pre-up ifconfig eth0 mtu 9000Дальше добавляем правило в iptables:
(схематично, не копируйте втупую, а подставьте свои данные:
iptables -A PREROUTING -t nat -i vmbr0 -p tcp -d %IP_external% --dport %ext_port% -j DNAT --to %IP_internal%:%int_port%
где
%IP_external% - внешний IP, но не глобальный инетовский, а внешний для виртуалки, т.е. адрес интерфейса сервака, смотрящий на роутер
%ext_port% - внешний порт, тот что задан вторым в проброске на роутере (в моем случае они одинаковы)
%IP_internal% - внутренний айпи виртуалки
%int_port% - айпи самой виртуалки, который и нужно пробросить
т.е. в моем случае это выглядит так:
iptables -A PREROUTING -t nat -i vmbr0 -p tcp -d 192.168.1.2 --dport 33389 -j DNAT --to 10.10.10.2:3389
Теперь нужно сохранить правила iptables, чтобы при перезагрузке они сохранялись:
iptables-save > /etc/iptables.rulesСоздадим скрипт загрузки правил:
nano /etc/network/if-pre-up.d/iptablesИ впишем в него команду загрузки правил из сохраненного ранее файла:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.rules
дадим ему права на исполнение:
chmod +x /etc/network/if-pre-up.d/iptablesвсё, теперь при перезагрузке правила сохранятся
И ВСЁ ЗАМЕЧАТЕЛЬНО РАБОТАЕТ!!! Проверено.
Спасибо за мануал:
https://skobk.in/2012/03/kvm-vps-proxmox-wi...ort-forwarding/
Всегда найдется в Африке хотя бы один негр, который станет учить норвежца на лыжах кататься!
Формула успеха: (СБЛ50+Бизнес10+СМТС+БУМ+Наши Люди)*Мультисим+CDMA=Безлимитка за 150грн/мес!