O encaminhamento de porta com iptables não funciona para comandos enviados diretamente do console

2

Eu configurei seguindo a regra de tabelas ip:

sudo iptables -t nat -I PREROUTING --dst 192.168.0.116  -p tcp --dport 80 -j REDIRECT --to-ports 8000


sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             static.snake2.test tcp dpt:www redir   ports 8000

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (política ACCEPT)    target prot opt source destination

Isso encaminhará qualquer tráfego na porta 80 no ip fornecido para a porta 8000 no mesmo ip. Funciona perfeitamente através de um navegador.

O que não funciona é, se eu tentar executar algum teste diretamente do console:

lynx -head -dump link

ou o que eu pretendia fazer

ab -n 1000 -c20 192.168.0.116

Nesse caso, a regra de encaminhamento simplesmente não funciona. O cabeçalho retornado ainda é da porta 80 (apache) e não como esperado de nginx (8000).

    
por merlin 20.02.2012 / 17:02

1 resposta

3

Tenho certeza de que o motivo pelo qual você está vendo isso é que a cadeia PREROUTING não é aplicável aos pacotes que passam pela interface de loopback. Quando você diz que funciona a partir de um navegador, eu suponho que você quer dizer a partir de outra máquina, caso em que sua regra será aplicada. Você precisará adicionar uma regra à cadeia OUTPUT para que ela funcione no tráfego do host local. Algo parecido com isto:

iptables -t nat -I OUTPUT --source 0/0 --destination 0/0 -p tcp --dport 80 -j REDIRECT --to-ports 8000
    
por 20.02.2012 / 18:01

Tags