Różnica między DNAT i REDIRECT w IPTABLES

14

OK, może dlatego, że jestem gęsty, a może po prostu nie znajduję odpowiedniego źródła, ale nie rozumiem, dlaczego jedna z tych konfiguracji IPTABLES byłaby lepsza od drugiej.

Oto moja konfiguracja:

Mam pudełko, które służy jako przezroczysty serwer proxy i router lub sortuje. Ma dwa interfejsy: ETH0 i ETH1 oraz następujący schemat adresów:

ETH0 = DHCP ETH1 = 192.168.5.1/24 obsługujący DHCP dla sieci 192.168.5.0/24 klientom znajdującym się za nim w sieci LAN

Mam zainstalowany pakiet prywatny i nasłuchuję na porcie 8080 jako przezroczysty serwer proxy. Osiągam to dzięki tej konfiguracji, aby móc upuścić to pole do istniejącej sieci przy minimalnej konfiguracji i podłączonych klientach do serwera proxy.

Oto mój oryginalny plik 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

Ta konfiguracja działa dobrze, a ruch przepływa tam iz powrotem bez problemu. Dostaję adres IP klienta źródłowego do plików logów prywatnych, a życie jest dobre.

Moje zamieszanie pojawia się, gdy zaczynam patrzeć na konfiguracje innych ludzi i widzę, że używają DNAT zamiast REDIRECT, i staram się zrozumieć prawdziwą korzyść jednej z nich. Oto przykładowa konfiguracja:

*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

Ponownie ta konfiguracja również działa i daje mi wszystko, czego potrzebuję z perspektywy logowania ...

Która jest właściwa, a może WIĘCEJ, niż druga?

Dziękujemy za poświęcenie czasu na przeczytanie do tej pory ...

QWade
źródło

Odpowiedzi:

14

REDIRECTzmienia docelowy adres IP, aby wysłać do samego urządzenia. Innymi słowy, lokalnie generowane pakiety są mapowane na adres 127.0.0.1. Służy do przekierowywania lokalnych pakietów. Jeśli chcesz przekierować ruch między usługami na komputerze lokalnym, będzie to dobry wybór.

DNATjest rzeczywistym tłumaczeniem adresu sieciowego . Jeśli chcesz, aby pakiety przeznaczone poza systemem lokalnym miały zmienić miejsce docelowe, jest to lepszy wybór, ponieważ REDIRECTnie zadziała.

Warner
źródło
dobrze, więc jeśli mam klienta siedzącego za serwerem proxy, powiedzmy 192.168.5.234, i chcę „przetworzyć” jego żądania HTTP za pośrednictwem serwera proxy 192.168.5.1, sugerujesz, że powinienem DNAT wychodzić z portu 80 na port 192.168 .5.1: 8080 w proxy. Mogę to kupić, ale DLACZEGO ???? Czy ma to coś wspólnego z tym, jak obsługiwany jest ruch, gdy opuszcza ETH0 proxy w drodze przez domyślną bramę do Internetu? Muszę to
pogłaskać, bo
2
DNAT zmienia adres, gdy pakiet przechodzi przez zaporę, tak że dociera do żądanego hosta, a na odwrót wydaje się, że pochodzi z zapory. DNAT prawie nigdy nie ma zastosowania do ruchu wychodzącego, który jest obsługiwany przez regułę MASQUERADE. Jeśli prywatność znajdowała się na innym hoście, wtedy DNAT byłaby odpowiednia, z odpowiednim wyjątkiem dla tego hosta.
BillThor,
Bill, dziękuję. Właśnie tam zmierzał mój gadzi mózg, ale czy zawsze miło jest mieć potwierdzenie. Więc jeśli wyślę pakiet przeznaczony dla google.com z 192.168.5.234 i ma on domyślnie ustawiony gw 192.168.5.1 (eth1 na proxy), powinienem „WYREDYTOWAĆ” ten pakiet do portu 8080 na proxy i pozwolić na to reszta. Powodem tego jest to, że privoxy żyje na 192.168.5.1, a nie na innym hoście. Czy palę coś, czego nie powinienem?
QWade,
9

REDIRECTzmienia docelowy adres IP, który ma zostać wysłany do samego urządzenia, zgodnie z odpowiedzią Warner @. Ale powiedziałbym, że odpowiedź nie jest całkowicie poprawna lub nieco myląca.

REDIRECTsłuży nie tylko do przekierowywania lokalnych pakietów. To jest naprawdęDNAT to domniemany domyślny docelowy adres IP, 127.0.0.1, jeśli jest to pakiet lokalny lub adres IP interfejsu maszyny w przeciwnym razie, 192.168.5.1 w przypadku OP.

Tak więc w tym pytaniu, bez względu na ostateczny cel, pakiety powinny najpierw dotrzeć do serwera proxy, więc REDIRECTidealnie nadaje się.

Ponieważ REDIRECTnie musisz podawać adresu IP, po prostu wybierze właściwy, ma pewne zalety w stosunku do DNAT:

  • Jeśli adres IP urządzenia zmieni się z jakiegokolwiek powodu, nie musisz modyfikować swoich reguł, a w szczególności DNATnie będzie działać dla interfejsów kontrolowanych przez DHCP.

  • Możesz pisać i utrzymywać te same reguły dla kilku systemów (na przykład kilka instancji proxy) bez utrzymywania różnych nieznacznych wersji z powodu określonych adresów IP.

Julio Diez
źródło
jakoś snat / maskarada.
Jichao
@Hod, słyszę, że REDIRECT jest szczególnym przypadkiem DNAT, ale używam REDIRECT, a TOR zna rzeczywiste miejsce docelowe pakietu, więc stwierdzam, że daddr i dport struktur iphdr i tcphdr są nienaruszone, a pakiet właśnie wrócił do miejsca docelowego REDIRECT przez jądro. DNAT faktycznie zmodyfikuje struktury. Czy się mylę?
knot