Redirecione a porta 80 a 8080 e faça-a funcionar na máquina local

61

Redirecionei o tráfego para as portas 80 a 8080 na minha máquina com

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Funciona bem para todo o mundo, exceto minha própria máquina. Sou desenvolvedor e preciso redirecionar a porta 80 a 8080 para mim.

Meu IP é 192.168.0.111

Meu servidor web é executado na porta 8080

Desejo abrir o site em http://192.168.0.111/vez da http://192.168.0.111:8080/mesma máquina em que o servidor é executado.

Máx.
fonte
Desculpe-me pela aberração, mas qual é o objetivo de encaminhar a porta 80 a 8080?
ma11hew28
2
@mattdipasquale, os usuários normais não podem acessar a porta 80, então você não pode executar um serviço da web como o python flask como um usuário normal.
Christian
Por que você não vincula o servidor da web à porta 80?
David Foerster
5
Eu acho que é porque usuário não-raiz não pode vincular a portas 80/443 e ele não quer correr o seu serviço web como root ..
Pavel K.

Respostas:

80

Você precisa usar a OUTPUTcadeia, pois os pacotes destinados à interface de loopback não passam pela PREROUTINGcadeia. O seguinte deve funcionar; executar como root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
heemail
fonte
11
A porta 80 precisa ser globalmente acessível? Eu tentei sua solução, meu número de porta 8080 está acessível, mas 80 não é, portanto, não funcionou. @heemayl
alper
2
Isso não funcionou, não sei por que isso foi votado
diyoda_
@Diyoda_ Por favor, defina não funcionou .
heemayl
3
Posso confirmar que isso não funciona no Ubuntu 18.04
Ahmed Hamdy
2
Não funcionou para mim no Ubuntu 18.10
Christopher Bradshaw
6

Simples, basta usar o iptables, permitindo que as portas 80 e 8080, em seguida, redirecionem 80 para 8080, verifique se você está atribuindo ao nic correto .. no exemplo, eu uso eth0

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
tmac
fonte
Obrigado! Está funcionando no Ubuntu 19
Vladimir Ishenko
11
Depois seria bom salvar as alterações do iptablesudo apt-get install iptables-persistent
Vladimir Ishenko
6

Isso funcionou para mim.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sanket Chaudhari
fonte
+1 funciona para mim no Ubuntu 18.04 (pelo menos para TCP), a porta 7000-> 7001 e os servidores que escutam na porta 7001 receberam conexões de entrada da porta 7000 :)
hanshenrik em
11
certifique-se de usar a interface de rede correta, embora não seja chamada eth0em todos os sistemas
hanshenrik
4

Em vez de iptables, você pode tentar: sudo ssh -gL 80:127.0.0.1:8080 localhost

Gregor
fonte
2
Essa é uma opção, mas não é exatamente o que eu quero, porque eu já tenho um servidor web na porta 80. Prefiro fazer isso com o iptables e manter o servidor web na porta 80 em execução. Acho que só tem que aplicar regra a etapa diferente em vez dePREROUTING
Max
Sim - isso causará um conflito de porta se você tiver algo escutando para o qual está encaminhando a porta, conforme sugerido por Max. A resposta acima é o caso mais geral.
cgseller
Recebo uma "Conexão recusada" ao tentar esta solução.
mitchus 21/10