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

Перекрытие MASQUERADE и DNAT

Как я могу перекрыть маскировку IP (PAT / Overload) с NAT назначения, используя iptables во внутреннем IP-пространстве?

Я пытаюсь создать частную сеть, т.е. 10.0.0.0/24 где некоторые общедоступные IP-адреса отображаются на различные адреса внутри него. Однако, если есть соединение, которое исходит из 10.0.0.0/24, независимо от того, имеет ли он общедоступный IP-адрес DNAT или нет, оно будет перегружено на конкретный общедоступный IP-адрес.

Надеюсь, я понял ваш вопрос здесь ...

Похоже, вы хотите, чтобы стандартный NAT из вашей внутренней сети исходил к одному IP снаружи - да? Эта часть достигается с помощью этого:

iptables -t nat -A POSTROUTING -o $EXTERNAL_NIC -j MASQUERADE

Что касается сопоставления общедоступных IP-адресов с внутренними IP-адресами, это должно работать для каждого из них:

iptables -t nat -A PREROUTING -d $EXTERNAL_IP -j DNAT --to $INTERNAL_IP

Это даст вам одностороннюю карту для внешних IP-адресов. Трафик, поступающий с одного общедоступного IP-адреса, будет передан внутреннему блоку, а затем он будет отвечать, но ответ будет передан через внешний IP-адрес по умолчанию. Это может быть не тот. Это может вызвать проблемы с клиент-серверными приложениями.

Надеюсь, я тоже понимаю ваш вопрос. Ваш ответ Люку в комментариях к ответу Баумгарта заставил меня усомниться в моем понимании ваших требований, но я все равно опубликую это.

То, что Баумгарт говорит вам в своем ответе, сработает, но его последний абзац, где он говорит о «... вероятно, вызовет проблемы с клиент-серверными приложениями ...» неверен. Он забывает, что реализация NAT Netfilter сохраняет состояние. Этот постоянный характер механизма NAT в Netfilter - ваш друг.

Когда диалог между Интернет-хостом и одним из ваших общедоступных IP-адресов получает DNAT-соединение с частным IP-адресом, Netfilter не будет «МАСКАДАТЬ» ответные пакеты, приходящие с частного IP-адреса обратно на Интернет-хост. Это не значит, что ответные пакеты не имеют NAT, но они не "ЗАМАСКИРОВАНЫ". Скорее, неявность Netfilter «делает правильные вещи», и SNAT отправляет ответные пакеты с частного IP-адреса обратно на общедоступный IP-адрес, с которым узел Интернета инициировал диалог. Это действительно очень красиво.

Между тем, для разговоров, исходящих с частного IP-адреса в Интернет (не в ответ на входящие запросы из Интернета), будет применяться правило «MASQUERADE».

По сути, Netfilter делает то, что вы хотите, «из коробки». Я потратил некоторое время и смоделировал это на тестовой установке, чтобы быть уверенным, и, пока я правильно понимаю ваши требования, он делает именно то, что вы ищете.

(Извините за то, что не смог ответить ранее днем ​​- я был занят некоторыми вещами ранее сегодня и не мог, знаете, играть в Server Fault так часто, как мне хотелось бы.)