Estou executando aplicativos legados nos quais não tenho acesso ao código-fonte. Esses componentes conversam entre si usando texto simples em uma porta específica. Eu gostaria de ser capaz de proteger as comunicações entre os dois ou mais nós usando algo como stunnel para facilitar a comunicação peer-to-peer ao invés de usar um pacote VPN mais tradicional (e centralizado) como o OpenVPN, etc.
Idealmente, o fluxo de tráfego seria assim:
- app @ hostA: 1234 tenta abrir uma conexão TCP para app @ hostB: 1234.
- O iptables captura e redireciona o tráfego na porta 1234 para stunnel em execução no hostA na porta 5678.
- stunnel @ hostA negocia e estabelece uma conexão com stunnel @ hostB: 4567.
- stunnel @ hostB encaminha qualquer tráfego descriptografado para app @ hostB: 1234.
Essencialmente, estou tentando configurar para onde qualquer tráfego de saída (gerado na máquina local) redireciona a porta N através do stunnel para a porta N + 1, e o lado de recebimento recebe na porta N + 1, descriptografa e encaminha para a aplicação local no porto N.
Não estou particularmente preocupado em perder a identidade do endereço IP / máquina do hostA quando stunnel @ hostB encaminha para app @ hostB porque a carga útil de comunicações contém informações de identificação.
O outro truque é que normalmente com stunnel você tem uma arquitetura cliente / servidor. Mas esta aplicação é muito mais P2P, porque os nós podem entrar e sair dinamicamente e codificar um tipo de "connection = hostN: port" na configuração do stunnel não funcionará.
EDIT: Uma outra possibilidade pode estar configurando algum tipo de rota padrão de forma que o tráfego de saída para a porta N seja encaminhado através do stunnel configurado como um gateway ...