Iptables przekierowuje do localhost?

13

Załóżmy, że mam sieć z serwerem kierującym wszystkie połączenia z sieci do Internetu. Jak skonfigurować iptables, aby zamiast przekierowywać połączenia przychodzące do Internetu, przekierowywał je do portu hosta lokalnego 8080. Cała pomoc jest mile widziana.

DankMemes
źródło
Problem polega na tym, że po prostym przekierowaniu (docelowy adres IP NAT) utracisz oryginalny docelowy adres IP. Czy chcesz skonfigurować przezroczysty serwer proxy HTTP, czy też powinien on przetwarzać inne protokoły niż HTTP?
pabouk
Nie ma znaczenia, czy jest przezroczysty, czy nie
DankMemes 18.10.13
Przekierowanie całego ruchu do serwera proxy jest bazą dla przezroczystego serwera proxy :)
pabouk
Oto kolejna odpowiedź, która naprawdę mi pomogła: unix.stackexchange.com/questions/111433/...
Wren T.

Odpowiedzi:

6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
Alex Antonov
źródło
1
nie używaj pogrubienia ....
Dzięki! Jeszcze tego nie próbowałem, ale podejrzewam, że brakowało mi polecenia przekazywania IP. I następnym razem użyj bloków kodu, a nie pogrubionych.
DankMemes
@AlexAntonov proszę użyć bloków kodu. Wybierz tekst w trybie edycji i kliknij ikonę nawiasów.
DankMemes
@ZoveGames, przepraszam, naprawiłem to.
Alex Antonov
2
Eksperymentowałem z tym. System ip_forward nie jest konieczny. Jednak tutaj opcja route_localnet . Widzę teraz, że właśnie tak stwierdza odpowiedź Juana Cespedesa .
Matt Joiner
31

można to zrobić za pomocą iptables, ale tylko z jądrem> = 3.6.

Będziesz musiał zrobić:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardnie jest konieczne, ponieważ pakiet nie jest przesyłany dalej, ale jeśli nie podasz sysctl dla route_localnet(który działa tylko w jądrach> = 3,6), pakiet zostanie odrzucony przez jądro, ponieważ uważa, że ​​jest to „marsjański”, nadchodzący z zewnątrz i posiadający adres docelowy 127.0.0.1

Juan Cespedes
źródło
Tak, to działa
Nick De Greek
Nie wiedziałem o route_localnet. Tak stara szkoła i nie mogłem zrozumieć, dlaczego ip_forward nie działa (podejrzewałem, że to nie było potrzebne, ale i tak próbowało).
dmourati,
1
Upewnij się, że zapisałeś, net.ipv4.conf.all.route_localnet=1w /etc/sysctl.confprzeciwnym razie nie będzie trwały, a po ponownym uruchomieniu zmienna wróci do 0, powodując upuszczenie pakietu. Wtedy byłoby bardzo trudno zrozumieć, dlaczego teraz wszystko nie działa ... stało się ze mną. ;)
mianowicie
Przykro mi, że nekropytuję stare pytanie, ale czy istnieje odpowiednik ipv6 net.ipv4.conf.all.route_localnetdo użycia z ip6tables?
Kebian