Tento redirecionar pacotes, saindo em 127.0.0.1:8095 para outro host na minha rede local 10.11.12.5 : 22 . Por exemplo, gostaria de implementar:
ssh [email protected] -p 8095
e ser redirecionado para
ssh [email protected]
Estou usando a cadeia OUTPUT da tabela nat:
iptables -t NAT -A OUTPUT -p tcp --dport 8095 -j DNAT --to-destination 10.11.12.5:22
mas não funciona. Tentei expandir a regra acima usando opções como:
-o lo
--source 127.0.0.1
--destination 127.0.0.1
mas ninguém ajudou a lidar com esse problema. Eu também tenho no meu /etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv4.conf.eth0.route_localnet = 1
Você poderia, por favor, explicar o que estou fazendo errado?
Pacotes de e para localhost são um caso especial para Tradução de Endereço de Rede.
Quando você se conecta ao localhost, o endereço de origem em seus pacotes também será localhost
127.0.0.1
(ou::1
para IPv6)As regras DNAT não reescrevem o endereço IP de origem
Existem regras especiais de roteamento na pilha de rede do Linux que impedem explicitamente que pacotes com endereços de origem localhost vazem para a internet e/ou outras redes às quais seu sistema está conectado.
Ergo: Após o DNAT, os pacotes com origem localhost e destino
10.11.12.5:22
serão descartados automaticamente.O último é provavelmente apenas um dos problemas que você está enfrentando.
Esse último problema pode ser amenizado configurando
route_localnet=1
a interface correta, por exemplosysctl -w net.ipv4.conf.eth0.route_localnet=1
; o que deve evitar que esses pacotes sejam descartados imediatamente.Além disso, eu acho (mas não tenho certeza do que exatamente você precisa): Você provavelmente ainda precisará reescrever mais pacotes, você precisará definir algum tipo de regra SNAT para reescrever o endereço de origem do host local para o endereço IP da interface que você usará para alcançar
10.11.12.5