На моем сервере есть несколько общедоступных IP-адресов, и на нем запущено несколько виртуальных машин с частными IP-адресами.
В качестве примера я хочу сопоставить порты 80, 443 и 8080 232.21.23.23 (общедоступные) с 192.168.122.12 (частные). Я пробовал несколько разных сопоставлений NAT, но ни одно из них не работает:
# This doesn't work.
DNAT net loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
# Neither does this.
DNAT $FW loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
# Nor this.
DNAT net:232.21.23.23 loc:192.168.122.12 tcp 80,443,8080
# I have no idea what I'm doing.
DNAT $FW:232.21.23.23 loc:192.168.122.12 tcp 80,443,8080
Может кто-то указать мне верное направление?
Ваше первое правило верно:
DNAT net loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
Так что проблема должна быть в другом. Вы можете увидеть основные правила iptables, созданные с помощью этого:
iptables -t nat -nvL net_dnat
Пакеты с NAT по-прежнему должны пройти цепочку FORWARD и быть приняты. Попробуйте добавить следующее правило для приема трафика к виртуальным машинам на этих портах:
ACCEPT net loc:192.168.122.12 tcp 80,443,8080
В качестве дополнительного комментария к предыдущим ответам укажите порядок, в котором вы размещаете правила.
Пример:
Допустим, вы настроили свои правила следующим образом:
DNAT net loc:172.17.20.25 tcp 80 0.0.0.0 DNAT net loc:172.17.20.47 tcp 80 200.x.y.z
Если вы хотите перейти на 172.17.20.47 на порт 80, вы всегда будете иметь 172.17.20.25, потому что адрес назначения по умолчанию - 0.0.0.0.
Итак, если вы хотите попасть на 172.17.20.47 через общедоступный IP-адрес 200.x.y.z, вам следует изменить порядок правил:
DNAT net loc:172.17.20.47 tcp 80 200.x.y.z DNAT net loc:172.17.20.25 tcp 80 0.0.0.0
Или измените адрес по умолчанию для первого правила.
Я надеюсь, что это помогает!