O que você provavelmente está procurando é chamado de TCP Hole Punching .
Você pode fazer isso quando não tem nenhum controle sobre o roteador NAT (nem mesmo a porta) na condição que você usa um intermediário de terceiros para sincronizar a comunicação e seu NAT é um NAT simples, não um "Operador" Grau NAT ", incluindo, portanto, não alterando portas vistas, apenas IPs (tudo se torna mais difícil mais). O corretor pode ser qualquer coisa, até mesmo um telefonema real, mas é claro que a automação exigiria algo especializado. A função do intermediário é sincronizar as ações, além de permitir que os dois pares conheçam seus IPs públicos. Um servidor STUN pode ser parte de uma solução automática.
O princípio básico é que o TCP, como inicialmente definido no RFC 793 , permite que o SYN, SYN, seja o usual / ACK, ACK handcheck triplo, ou também para fazer SYN + SYN simultâneos, SYN + ACK e ACK simultâneos (veja link anterior , figura 8). Ao fazer isso, os dois roteadores NAT abrirão o "fluxo de retorno" da conexão TCP.
Ressalva: as comunicações devem ser sincronizadas (possivelmente com NTP), ou um RST será enviado pelo roteador NAT do par mais lento e pode fechar o "buraco" no outro roteador NAT. Isso não é um problema se o roteador descartar pacotes em vez de enviar um RST. Muitos roteadores NAT domésticos simplesmente descartam esses pacotes, então não há problema.
Assim, um exemplo a ser feito: o dono do 198.51.100.27 A telefonou para o proprietário B do 203.0.113.11 e eles concordam que em um determinado momento, depois de ter verificado seus IPs usando sites on-line ("Qual é o meu IP"? ...) e usando a versão tradicional do netcat,
A digitará:
nc -p 7777 203.0.113.11 8888
B irá simultaneamente digitar:
nc -p 8888 198.51.100.27 7777
O que acontecerá é que cada usuário verá uma única conexão TCP estabelecida, a conexão mesma .
A agora está livre para digitar "hello world", que será lido por B.
Na verdade, eu fiz uma resposta semelhante em stackoverflow, com talvez mais detalhes, mas ela nunca foi verificada como uma solução: link
Em vez de usar o netcat, o socat deve ser preferido porque pode se integrar mais facilmente a qualquer outra coisa para automação.