Назад | Перейти на главную страницу

Как выполнить DNAT для разных локальных IP-адресов в зависимости от того, к какому общедоступному IP-адресу был осуществлен доступ с Shorewall?

На моем сервере есть несколько общедоступных 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

Или измените адрес по умолчанию для первого правила.

Я надеюсь, что это помогает!