iptables para transferir o UDP através de um túnel SSH

2

O problema

Eu tenho dois programas que são executados em dois computadores distantes e se comunicam por meio de um protocolo específico. Tudo o que sei é que este protocolo só se comunica através do UDP e usa as portas 1101 e 1102 e que ambos os computadores precisam estar na mesma rede local.

Eu já consegui fazer isso usando uma VPN (p2p), mas gostaria de saber se é possível usar o iptables através do túnel SSH (o túnel SSH é obrigatório aqui).

Eu uso dois servidores wheezy Linux Debian para abrir um túnel na Internet entre os dois programas. Eu consegui criar um túnel SSH que redireciona o tráfego UDP de um lado para o outro (para todas as portas), mas isso não funciona. Para fazer isso eu uso socat (aqui a representação para a porta 1101):

transmission from computer1 --> port 1101/server1 --> socat to port 61101 --->
---> ssh tunnel ---> 
---> socat from port 61101--> port 1101/server2 --> reception on computer2

Meu objetivo é fazer com que "server2" se comporte exatamente como era "computer1" do ponto de vista de "computer2" (e vice-versa). Os endereços IP devem ser traduzidos corretamente quando a transmissão de pacotes e os dados transferidos tiverem que ser alterados de acordo.

O SSH é configurado com login automático usando arquivos-chave.

Minha configuração de túnel

Foi assim que configurei o túnel para redirecionar as duas portas nas duas direções.

#From server1's shell 
$ ssh -f -N -T -R51101:localhost:51101 login@server2 # reverse tunnel for port 1101
$ ssh -f -N -T -R51102:localhost:51102 login@server2 # reverse tunnel for port 1102
$ ssh -f -N -T -L61101:localhost:61101 login@server2 # tunnel for port 1101
$ ssh -f -N -T -L61102:localhost:61102 login@server2 # tunnel for port 1102

#socat redirection on server1
$ socat TCP4-LISTEN:51101,fork UDP4:server1:1101 #redirects from the tunnel to the local 1101 port
$ socat TCP4-LISTEN:51102,fork UDP4:server1:1102 #redirects from the tunnel to the local 1102 port
$ sudo socat -d -d UDP4-LISTEN:1101,fork,bind=1101 TCP4:localhost:61101  #redirects to both tunnel and local UDP port 1101
$ sudo socat -d -d UDP4-LISTEN:1102,fork,bind=1102 TCP4:localhost:61102  #redirects to both tunnel and local UDP port 1102

#From server2's shell 
#socat redirection on server2
$ socat TCP4-LISTEN:61101,fork UDP4:server1:1101 #redirects from the tunnel to the local 1101 port
$ socat TCP4-LISTEN:61102,fork UDP4:server1:1102 #redirects from the tunnel to the local 1102 port
$ sudo socat -d -d UDP4-LISTEN:1101,fork,bind=1101 TCP4:localhost:51101  #redirects to both tunnel and local UDP port 1101
$ sudo socat -d -d UDP4-LISTEN:1102,fork,bind=1102 TCP4:localhost:51102  #redirects to both tunnel and local UDP port 1102

Acho que é possível fazer isso usando o iptables, mas não sei como fazer isso.

Alguém está tendo uma solução? Ou uma receita sobre como fazer tradução correta de endereços usando o iptables?

    
por lauhub 12.08.2014 / 16:19

0 respostas