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

14

Ладно, это может быть из-за того, что я плотный или просто не могу найти правильный источник, но я не могу понять, почему одна из этих установок 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

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

Что является правильным, или, может быть, более правильным, чем другой?

Спасибо, что нашли время, чтобы прочитать это далеко ...

QWade
источник

Ответы:

14

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

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

сигнализатор
источник
Итак, если у меня есть клиент, сидящий за прокси-сервером, скажем, на 192.168.5.234, и я хочу «обрабатывать» его HTTP-запросы через прокси на 192.168.5.1, вы предлагаете, чтобы я перешел с трафика исходящего порта 80 DNAT на 192.168 .5.1: 8080 на прокси. Я могу купить это, но ПОЧЕМУ ???? Это как-то связано с тем, как обрабатывается трафик, когда он покидает прокси-сервер ETH0 при выходе из шлюза по умолчанию в Интернет? Мне нужно это сделать, иначе моя голова взорвется
QWade
2
DNAT изменяет адрес при прохождении пакета через брандмауэр, чтобы он достиг нужного хоста, а с другой стороны, похоже, пришел от брандмауэра. DNAT почти никогда не применяется к исходящему трафику, который обрабатывается правилом MASQUERADE. Если privproxy находится на другом хосте, тогда DNAT будет подходящим, с соответствующим исключением для этого хоста.
BillThor
Билл, спасибо. Вот куда шел мой мозг рептилий, но всегда ли приятно иметь подтверждение. Поэтому, если я отправляю пакет, предназначенный для google.com, с 192.168.5.234, а его gw по умолчанию установлен как 192.168.5.1 (eth1 на прокси-сервере), я должен «НАПРАВИТЬ» этот пакет на порт 8080 на прокси и позволить privoxy сделать остальные. Причина этого в том, что privoxy живет на 192.168.5.1, а не на другом хосте. Я курю что-то, что не должен?
QWade,
9

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

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

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

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

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

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

Хулио Диес
источник
как-то вроде snat / masquerade.
Джичао
@Hod, я слышал, что REDIRECT - это особый случай DNAT, но я использую REDIRECT, и TOR знает фактическое место назначения пакета, поэтому я пришел к выводу, что daddr и dport структур iphdr и tcphdr не повреждены, и пакет только что вернулся к месту назначения REDIRECT ядро. DNAT фактически изменит структуры. Я ошибаюсь?
фитиль