У меня на одном хосте работает Proxmox VE.
Я установил 3 виртуальных моста vmbr[0-2]
для удовлетворения моих сетевых потребностей: vmbr0
работает непосредственно на главном интерфейсе для виртуальных машин с общедоступными IP-адресами, vmbr1
позволяет использовать виртуальные машины с NAT, и vmbr2
сеть только для хоста. Скажем, мой основной общедоступный IP-адрес - 12.34.56.78.
Чтобы NAT работал, я настроил следующие iptables
набор правил:
-A PREROUTING -d 12.34.56.78 -i vmbr0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 192.168.1.101
# and other rules like this one for different ports to different local IPs
-A POSTROUTING -s 192.168.10.0/24 -o vmbr0 -j SNAT --to-source 12.34.56.78
Теперь предположим, что у меня есть виртуальная машина. vmbr1
с IP 192.168.1.102.
Эта машина не может получить доступ к веб-серверу по адресу 192.168.1.101, используя общедоступный IP-адрес 12.34.56.78.
Я изначально думал, что POSTROUTING
указанной выше директивы было достаточно для работы фиксированного NAT.
Прочитав канонический Обратная связь с перенаправляемым общедоступным IP-адресом из локальной сети - NAT и несколько других ответов на тот же вариант, я пробовал:
установка -P [INPUT|FORWARD|OUTPUT] ACCEPT
временно на хосте, чтобы проверить, может ли это быть вызвано некоторыми правилами фильтрации
добавление -A POSTROUTING -d 192.168.1.101 -p tcp --dport 80 -j MASQUERADE
к набору правил, пробуя его как до, так и после текущего POSTROUTING
правило
но все равно это не работает.
Идеи?
Спасибо.
Чтобы использовать метод NAT со шпилькой, вам нужно будет ввести следующие команды.
iptables -t nat -A PREROUTING -d 12.34.56.78 -i vmbr1 -p tcp -m multiport --dports 80,443 -j DNAT \
--to-destination 192.168.1.101
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o vmbr1 -d 192.168.1.254 -p tcp \
--dport 80 -j SNAT --to-source 192.168.1.101