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.
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 é:
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).
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.
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 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
Tags port-forwarding linux