Хорошо, это может быть из-за того, что я тупой или, может быть, просто не нахожу правильный источник, но я не могу понять, почему одна из этих настроек 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
Опять же, эта конфигурация тоже работает и дает мне все, что мне нужно с точки зрения ведения журнала ...
Что правильно или, может быть, БОЛЬШЕ, чем другое?
Спасибо, что нашли время, чтобы прочитать это ...
REDIRECT
изменяет IP-адрес назначения для отправки на саму машину. Другими словами, локально сгенерированные пакеты отображаются на адрес 127.0.0.1. Это для перенаправления локальных пакетов. Если вы хотите перенаправить трафик только между службами на локальном компьютере, это будет хорошим выбором.
DNAT
актуально Трансляция сетевых адресов. Если вы хотите, чтобы для пакетов, предназначенных за пределами локальной системы, было изменено место назначения, это лучший выбор из двух, поскольку REDIRECT
не будет работать.
REDIRECT
изменяет IP-адрес назначения для отправки на саму машину в ответ на ответ Warner @. Но я бы сказал, что этот ответ не совсем правильный или немного вводящий в заблуждение.
REDIRECT
не только для перенаправления локальных пакетов. Это правда DNAT
в котором используется неявный IP-адрес назначения, 127.0.0.1, если это локальный пакет, или IP-адрес машинного интерфейса в противном случае, 192.168.5.1 в случае OP.
Итак, в этом вопросе, независимо от конечного пункта назначения, пакеты должны сначала достичь прокси-сервера, поэтому REDIRECT
идеально подходит.
Поскольку с REDIRECT
IP-адрес указывать не нужно, он просто выберет правильный, у него есть некоторые преимущества перед DNAT
:
Если IP-адрес машины изменится по какой-либо причине, вам не нужно изменять свои правила, в частности DNAT
не будет работать для интерфейсов, управляемых DHCP.
Вы можете написать и поддерживать одни и те же правила для нескольких систем (например, нескольких экземпляров прокси), не сохраняя при этом разные версии из-за определенных IP-адресов.