Usando o NAT Traversal para conectar usuários passivamente

Este artigo é uma tradução gratuita de uma das entradas do blog do desenvolvedor do DC ++ .

Com a permissão do autor (bem como por uma questão de clareza e interesse, por uma questão de beleza), acrescentei links e adicionei algumas pesquisas pessoais.


Introdução

Atualmente, pelo menos um usuário de um par de usuários conectados deve estar no modo ativo. O mecanismo de “desvio” do NAT será útil se o modo ativo não estiver configurado em nenhum dos lados. Isso geralmente acontece porque o firewall ou dispositivo NAT de entrada bloqueia as conexões de entrada.

Se os dois clientes estiverem no modo ativo, o Cliente Iniciante envia o

comando $ ConnectToMe contendo seu próprio endereço IP e porta para outro cliente. Usando esses dados, o cliente que recebe o comando estabelece uma conexão com o iniciador.

Se um dos clientes estiver no modo passivo

Por meio do hub, o cliente passivo A envia o comando $ RevConnectToMe ao cliente ativo Bque responde com o comando $ ConnectToMe.


Como o servidor S no caso do acima age hub DC

Se ambos os clientes de um modo passivo, o hub ADC

localizado atrás diferentes clientes NAT A e B se juntou ao hub S .


Portanto, a conexão com o hub fica do lado do cliente A. O

hub aceita conexões na porta 1511. O cliente A faz conexões de saída de sua rede privada pela porta 50758. O hub, por sua vez, vê o endereço do dispositivo NAT, trabalha com ele e transmite os clientes de acordo com seus identificadores.

O cliente A envia para o servidor Suma mensagem pedindo ajuda para se conectar com o cliente Bed and . Por estar também no modo passivo, o cliente B , após receber este comando, deve informar sua porta privada usada para conectar-se ao hub via NAT. Depois de receber essas informações, o cliente A tenta imediatamente estabelecer uma conexão com o cliente B e relata sua própria porta privada.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991



Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991



Hub: [Outgoing][178.79.159.147:1511] DRNT AAAA BBBB ADCS/0.10 50758 1649612991

Qual é o interesse? O interesse é mudar o terminal da mesma conexão, criando uma nova conexão para um endereço público através da porta privada já usada.


Bingo!

É claro que, ao mesmo tempo, o NAT do cliente B tem o direito total de rejeitar a primeira solicitação de conexão do cliente A , mas sua própria solicitação já entra no "buraco" criado por essa conexão e a conexão é estabelecida.


Ilustração adequada para todo o processo, com a ressalva de que o protocolo não usa portas públicas abertas pela sessão NAT - S , bem como endereços privados.

Epílogo

No momento da redação do artigo (original), aproximadamente metade dos clientes da DC era passiva. Isso significa que um quarto de todas as conexões possíveis não pode ser feito.

No futuro, o DC ++ poderá "ignorar" o NATusando conexões A - S e B - S existentes para estabelecer uma conexão direta cliente - cliente, mesmo que A e B estejam no modo passivo.

All Articles