Как 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
Может кто-то указать мне верное направление?
2 ответа
Ваше первое правило верно:
DNAT net loc:192.168.122.12 tcp 80,443,8080 - 232.21.23.23
Так что проблема должна лежать в другом месте. Вы можете увидеть основные правила iptables, созданные с помощью этого:
iptables -t nat -nvL net_dnat
Пакеты NATed все еще должны пройти цепочку 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.xyz
Если вы хотите добраться до 172.17.20.47 на порту 80, вы всегда будете в конечном итоге в 172.17.20.25, потому что адрес назначения по умолчанию 0.0.0.0.
Поэтому, если вы хотите получить доступ к 172.17.20.47 через публичный IP-адрес 200.xyz, вам следует изменить порядок правил:
DNAT net loc: 172.17.20.47 tcp 80 200.xyz DNAT net loc:172.17.20.25 tcp 80 0.0.0.0
Или измените адрес по умолчанию первого правила.
Я надеюсь, что это помогает!