Разница между DNAT и REDIRECT в IPTABLES

Разница между DNAT и REDIRECT в IPTABLES

Ладно, возможно, это из-за того, что я тупой, а может, просто не нашёл нужный источник, но я не могу понять, почему одна из этих настроек IPTABLES лучше другой.

Вот моя установка:

У меня есть ящик, который служит прозрачным прокси и маршрутизатором или сортами. На нем есть два интерфейса, ETH0 и ETH1, и следующая схема адресации:

ETH0 = DHCP ETH1 = 192.168.5.1/24 обслуживает DHCP для сети 192.168.5.0/24 для клиентов за ней в локальной сети

У меня установлен Privoxy, который прослушивает порт 8080 как прозрачный прокси. С помощью этой настройки я хочу подключить этот ящик к существующей сети с минимальной конфигурацией и прикрепить клиентов к прокси.

Вот мой оригинальный файл IPTABLES

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

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

Мое замешательство начинается, когда я начинаю смотреть на конфигурации других людей и вижу, что они используют DNAT вместо REDIRECT, и я пытаюсь понять реальное преимущество одного над другим. Вот пример конфигурации:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Опять же, эта конфигурация тоже работает и дает мне все, что нужно с точки зрения ведения журнала...

Какой из них правильный или, может быть, БОЛЕЕ правильный, чем другой?

Спасибо, что уделили время и дочитали до этого места...

решение1

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

DNATявляется реальнымТрансляция сетевых адресов. Если вы хотите, чтобы пакеты, отправляемые за пределы локальной системы, имели измененный пункт назначения, то это лучший выбор из двух, поскольку он REDIRECTне будет работать.

решение2

REDIRECTизменяет IP-адрес назначения для отправки на саму машину, как ответил Warner@. Но я бы сказал, что этот ответ не совсем правильный или немного вводит в заблуждение.

REDIRECTне только для перенаправления локальных пакетов. Это действительно то, DNATв котором IP-адрес назначения для использования неявный, 127.0.0.1, если это локальный пакет или IP-адрес интерфейса машины в противном случае, 192.168.5.1 в случае OP.

Итак, в этом вопросе, независимо от конечного пункта назначения, пакеты должны сначала достичь прокси-сервера, поэтому REDIRECTэто идеально подходит.

Поскольку REDIRECTвам не нужно указывать IP-адрес, он просто возьмет нужный, у него есть некоторые преимущества по сравнению с DNAT:

  • Если IP-адрес машины по какой-либо причине изменится, вам не нужно будет изменять правила, в частности, DNATэто не будет работать для интерфейсов, контролируемых DHCP.

  • Вы можете написать и поддерживать одни и те же правила для нескольких систем (например, нескольких экземпляров прокси-сервера), не сохраняя при этом различные версии из-за конкретных IP-адресов.

решение3

DNAT и REDIRECT — это абсолютно одно и то же, если вы хотите отправить трафик на локальную машину.

В документации это описывается так: «[Перенаправление] — это особый случай целевого NAT, называемый перенаправлением: это простое удобство, которое в точности эквивалентно выполнению DNAT к адресу входящего интерфейса».

https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2

Связанный контент