Como faço para encaminhar o tráfego do host local para um host remoto com iptables?

3

Eu gostaria de configurar minha caixa do CentOS 6.5 para encaminhar conexões para o host local (127.0.0.1) para a mesma porta em uma máquina remota (por exemplo, 10.0.3.10).

Eu tentei a regra iptables abaixo, mas quando tento me conectar, ela simplesmente trava:

iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 8888 \
    -j DNAT --to-destination=10.0.3.10:8888

Executando tcpdump na máquina remota, vejo que não houve tráfego de entrada. Eu fiz algumas pesquisas no google, mas não encontrei nada particularmente útil. Eu também confirmei que meu arquivo sysctl.conf contém net.ipv4.ip_forward = 1 .

Editar Adicionei o registro em resposta a um dos comentários abaixo. Ele não produz saída quando eu vou para 127.0.0.1:8888 mas produz saída quando vai para 10.0.3.10:

# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [11:1008]
:OUTPUT ACCEPT [11:1008]
:LOGGING - [0:0]
-A OUTPUT -p tcp -m tcp -d 10.0.3.10 --dport 8888 -j LOGGING
-A LOGGING -j LOG --log-prefix "IPTABLES: "
-A LOGGING -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 8888 -j DNAT --to-destination 10.0.3.10:8
888
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*filter
:INPUT ACCEPT [50:2776]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:4336]
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
    
por Jonathan 29.07.2014 / 14:22

2 respostas

2

Eu não sei como configurar o iptables nesta máquina para fazer o que você quiser. Eu costumo usar em tal caso tunelamento SSH. Eu acho fácil de configurar (opinião pessoal aqui!) ;-) mas ... você precisa ter uma conexão SSH em seu host local (não precisa ser acessível pelo controle remoto!).

A sintaxe do comando, neste caso, é:

ssh -f -C -N -L [<bind address>:]<local port>:<remote host name>:<remote service port> [-p <ssh port>] [<username>@]<remote host outside name>

Então, para você, isso significaria:

ssh -f -C -N -L 127.0.0.1:8888:10.0.3.10:8888 localhost
    
por 29.07.2014 / 23:03
3

O truque envolve ativar o processamento de rota localhost / localnet para sua interface de saída com:

sysctl -w net.ipv4.conf.all.route_localnet=1

Então isso funciona:

iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.10
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
    
por 07.01.2015 / 23:09