Jak przekierować port 80 do innego portu w samemachine?

39

Jak mogę przekazywać żądania przychodzące przez port 80 do innego portu na tym samym komputerze z systemem Linux?

Robiłem to przez zmianę nat.conf, ale ten komputer, którego używam, nie ma NAT. Jaka jest alternatywa?

Nohsib
źródło
Brak NAT lub po prostu brak nat.conf? Czy wypróbowałeś już jakieś reguły iptables przy użyciu NAT?
Ben Swinburne,

Odpowiedzi:

47

Przekierowanie można wykonać za pomocą iptables:

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Thomas Vincent
źródło
+1. Robi to od lat
Alexander Pogrebnyak
1
Co powiesz na Windows Server?
Luc
O rany, właśnie tego szukałem, uwielbiam!
neurosnap
Początkowo nie działało dla mnie, ale było w porządku, gdy go użyłemsudo
mdiscenza
1
co zrobić, jeśli nie ma interfejsu eth0? dlaczego nie skorzystać z interfejsu pętli zwrotnej?
harschware
15

Właśnie znalazłem się w tym pytaniu i nie mogłem znaleźć łatwego sposobu. Nie chcę instalować Nginx na moim komputerze, aby wykonać to proste przekierowanie portów.

Rinetdnie działało dla mnie, brak działającego pakietu dla mojej dystrybucji. socatZamiast tego poszedłem . Super proste:

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

Należy uruchomić, suaby móc nasłuchiwać na porcie 80.

alfetopito
źródło
Myślę, że konfiguracja Rinetd jest łatwiejsza.
johnshen64
socat działa idealnie!
viv
10

Powinieneś rozważyć użycie odwrotnego proxy , takiego jak Nginx . Na przykład możesz umieścić coś takiego w swoim nginx.confpliku:

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}

Tilo
źródło
2
Czemu? Nie muszę się z tym nie zgadzać, ale czy istnieje dobry powód, dla którego nie chciałbyś, aby tak się stało ™ na stosie sieciowym?
Oli
@Oli Ta metoda odwrotnego proxy nie wpłynie na wiele innych wirtualnych hostów na serwerze, co miałoby miejsce, gdyby zrobił to iptables, ponieważ iptables nic nie wie o wirtualnych hostach.
popiół