Ponte entre duas portas na mesma interface de rede em um servidor Linux

2

Eu preciso construir uma ponte entre duas portas de rede em um servidor, então tudo o que chega na porta A vai para a porta B e tudo que chega na porta B vai para a porta A.

Eu tenho dois dispositivos (dA e dB) que estão atrás de NATs diferentes em redes diferentes, ambos podem fazer qualquer conexão de saída, no entanto, todas as conexões de entrada são bloqueadas. Então eles não podem se conectar diretamente. Não é possível configurar nenhum encaminhamento de porta nesses NATs.

Por isso vou colocar um servidor S que possa escutar em todas as portas da rede. Ele aceita conexões nas portas A e B e cria uma ponte entre elas, então o tráfego flui de A para B como se elas estivessem conectadas diretamente.

O resultado final que eu quero arquivar é:

  1. O dispositivo dA se conecta ao servidor S na porta A. Por exemplo. ele se conecta ao server.com:A
  2. O dispositivo dB conecta-se ao servidor S na porta B. Por exemplo. ele se conecta ao server.com:B
  3. dA fala com dB através de S

Existe alguma maneira de fazer isso usando um servidor Linux? O servidor executa um Linux baseado no Debian wheezy.

Seria ótimo fazê-lo usando comandos / ferramentas de linha de comando, portanto, se necessário, as portas podem ser alteradas sem editar nenhum arquivo (usando um script).

    
por Tiago Queiroz 26.03.2014 / 05:07

4 respostas

1

A ferramenta socat faz o que eu preciso de uma maneira simples.

socat  TCP4-LISTEN:5060,reuseaddr TCP4-LISTEN:5061,reuseaddr

Bloqueia o terminal, no entanto, é a melhor solução que pude encontrar.

    
por 28.03.2014 / 20:05
1

Você pode fazer isso com o xinetd usando sua redirect diretiva . Eu pessoalmente prefiro isso usando socat porque xinetd a configuração está em um lugar óbvio (tornando mais fácil para gerenciar com Puppet ou Chef) e será iniciado automaticamente no momento da inicialização.

    
por 28.03.2014 / 20:25
0

Você parece estar falando sobre o proxy reverso. Existem muitos daemons úteis (especificamente proxies SOCKS), mas você procura por uma solução de linha de comando.

Isso pode ser alcançado com o encaminhamento de porta ssh. Você pode encaminhar uma porta com:

user@dA:~$ ssh -R :1111:localhost:1111 [email protected]

Ele irá abrir a porta: 1111 no server.com. Depois de aceitar a conexão nessa porta, o ssh encaminhará essa solicitação para o dA e fará uma conexão local em dA para localhost:1111 encaminhando todo o tráfego sobre o canal ssh existente.

Assim, enquanto sua sessão ssh estiver em funcionamento, todos os hosts que se conectarem ao server.com:1111 se conectarão efetivamente a dA: 1111

Por favor, note o ponto e vírgula inicial. Isso significa que server.com deve aceitar conexões externas (por padrão, ele só escutará conexões do localhost).

Você também precisará ativar a opção GatewayPorts em ssh config no server.com. Caso contrário, o sshd não permitirá aceitar conexões externas.

    
por 26.03.2014 / 22:08
0

Por que você não usa o iptables?

iptables -t nat -I PREROUTING --src $SRC_IP_MASK --dst $DST_IP -p tcp --dport $portNumber -j REDIRECT --to-ports $rediectPort
    
por 26.03.2014 / 22:46