Como encaminhar a porta 80 para outra porta na mesma máquina?

39

Como encaminhar solicitações que chegam na porta 80 para outra porta na mesma máquina Linux?

Eu costumava fazer isso alterando nat.conf, mas esta máquina que estou usando não tem NAT. Qual a alternativa?

Nohsib
fonte
Não existe nenhum NAT ou apenas nat.conf? Você já tentou alguma regra do iptables usando NAT?
211111 Ben Ben Swinburne

Respostas:

47

Você pode realizar o redirecionamento com o 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
fonte
+1. Fazendo isso há anos #
Alexander Pogrebnyak
11
Que tal no Windows Server?
Luc
Oh cara, isso é exatamente o que eu estava procurando, parabéns!
Neurosnap
Não funcionou para mim em primeiro lugar, mas foi bom quando eu useisudo
mdiscenza
11
o que fazer se não houver interface eth0? por que não usar interface de loopback?
harschware
15

Acabei de me encontrar nessa questão e não consegui encontrar uma maneira fácil. Não quero instalar o Nginx na minha máquina para fazer esse simples encaminhamento de porta.

Rinetdnão funcionou para mim, nenhum pacote de trabalho para minha distribuição. Eu fui em socatvez disso. Super simples:

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

Deve ser executado supara poder ouvir na porta 80.

alfetopito
fonte
A configuração do Rinetd é mais fácil, eu acho.
johnshen64
socat funciona perfeitamente!
viv
10

Você deve usar um proxy reverso , como o Nginx . Por exemplo, você pode colocar algo assim no seu nginx.confarquivo:

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
fonte
2
Por quê? Eu não discordo necessariamente, mas há um bom motivo para você não querer que isso aconteça ™ na pilha de rede?
Oli
@Oli Esse método de proxy reverso não afetará muitos outros hosts virtuais no servidor, o que ocorreria se o iptables o fizesse, pois o iptables não sabe nada sobre hosts virtuais.
ash