Hairpinning no Linux

5

Eu tenho um roteador no qual eu instalei um sistema Linux.

Eu quero que meu roteador suporte o hairpinning NAT.

Existe tal recurso no Kernel Linux? Se sim como ativá-lo? Existe um patch para aplicá-lo no meu kernel para suportar hairpinning?

Explicação de hairpinning da Wikipedia:

Let us consider a private network with the following:

    Gateway address: 192.168.0.1
    Host 1: 192.168.0.5
    Host 2: 192.168.0.7

    The gateway has an external IP : 192.0.2.1
    Host 1 runs a P2P application P1 on its port 12345 which is externally mapped to 4444.
    Host 2 runs a P2P application P2 on its port 12345 which is externally mapped to 5555.

If the NAT device supports hairpinning, then P1 application can connect to the P2 application using the external endpoint 192.0.2.1:5555.
If not, the communication will not work.
    
por Mohamed KALLEL 04.11.2015 / 16:29

1 resposta

1

Como apontado nos comentários, a maneira de fazer isso é criar duas regras de NAT para ambos os serviços internos, como este:

iptables -t nat -A PREROUTING -d public.ip -p tcp --dport 4444 -j DNAT --to inthost1:12345
iptables -t nat -A PREROUTING -d public.ip -p tcp --dport 5555 -j DNAT --to inthost2:12345
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d inthost1 -p tcp --dport 12345 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d inthost2 -p tcp --dport 12345 -j MASQUERADE

Desta forma, se um host interno envia um pacote para o outro, ele parecerá vir do "gateway" (a caixa NAT), para que a caixa NAT receba a resposta e possa encaminhá-lo para a outra caixa interna.

    
por 13.01.2016 / 21:59