Wie leite ich Port 80 an einen anderen Port auf der Samemachine weiter?

39

Wie kann ich Anfragen, die über Port 80 eingehen, an einen anderen Port auf demselben Linux-Computer weiterleiten?

Früher habe ich das durch Ändern gemacht nat.conf, aber dieser Computer, den ich verwende, hat kein NAT. Was ist die Alternative?

Nohsib
quelle
Kein NAT oder nur keine nat.conf? Haben Sie Iptables-Regeln mit NAT ausprobiert?
Ben Swinburne

Antworten:

47

Sie können die Umleitung mit iptables durchführen:

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
quelle
+1. Ich mache das schon seit Jahren
Alexander Pogrebnyak
1
Wie wäre es mit Windows Server?
Luc
Oh Mann, das ist genau das, wonach ich gesucht habe, ein dickes Lob!
Neurosnap
Für mich getan hat zunächst keine Arbeit, aber es war in Ordnung , wenn ich gebrauchtsudo
mdiscenza
1
was tun wenn keine eth0 schnittstelle warum nicht Loopback-Schnittstelle verwenden?
Harschware
15

Ich befand mich gerade in dieser Frage und konnte keinen einfachen Weg finden. Ich möchte Nginx nicht auf meinem Computer installieren, um diese einfache Portweiterleitung durchzuführen.

Rinetdhat bei mir nicht funktioniert, kein Arbeitspaket für meine Distribution. Ich ging socatstattdessen für . Super einfach:

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

Muss sulaufen, um am Port mithören zu können 80.

Alfetopito
quelle
Rinetd-Setup ist meiner Meinung nach einfacher.
Johnshen64
socat funktioniert perfekt!
viv
10

Sie sollten einen Reverse-Proxy wie Nginx verwenden . Sie könnten beispielsweise Folgendes in Ihre nginx.confDatei einfügen:

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
quelle
2
Warum? Ich bin nicht unbedingt anderer Meinung, aber gibt es einen guten Grund, warum Sie nicht möchten, dass dies einfach im Netzwerkstapel passiert?
Oli
@Oli Diese Reverse-Proxy-Methode wirkt sich nicht auf zahlreiche andere virtuelle Hosts auf dem Server aus. Dies würde der Fall sein, wenn iptables dies tun würde, da iptables nichts über virtuelle Hosts weiß.
Asche