Usando NAT Traversal para conectar usuários no modo passivo

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

Com a permissão do autor (bem como para maior clareza e interesse), colori-o com links e complementei-o com algumas pesquisas pessoais.

Introdução

Pelo menos um usuário do par de conexão deve estar no modo ativo neste momento. O mecanismo de passagem NAT será útil quando o modo ativo não estiver configurado em nenhum dos lados. Isso geralmente ocorre devido a um firewall ou dispositivo NAT bloqueando as conexões de entrada.

Se ambos os clientes estiverem no modo ativo

O cliente inicial envia um comando contendo seu próprio endereço IP e porta $Conecte-me para outro cliente. Utilizando esses dados, o cliente que recebeu o comando estabelece uma conexão com o iniciador.

Se um dos clientes estiver no modo passivo

Através do hub, um cliente passivo A envia um comando $RevConnectToMe cliente ativo Bque então responde com o comando $ConnectToMe.

Usando NAT Traversal para conectar usuários no modo passivo
Como um servidor S no caso acima há um hub DC

Se ambos os clientes estiverem no modo passivo em Centro ADC

Clientes por trás de diferentes NATs A и B juntou-se ao hub S.

Usando NAT Traversal para conectar usuários no modo passivo
Esta é a aparência da conexão com o hub do lado do cliente A

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

Cliente A envia para o servidor S mensagem pedindo ajuda para se conectar com um cliente B.

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

Também no modo passivo, o cliente B, tendo recebido este comando, deve reportar sua porta privada usada para conectar-se ao hub via NAT.

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

Depois de receber esta informação o cliente A tenta imediatamente estabelecer uma conexão com o cliente B e relata seu próprio porto privado.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

Qual é o interesse? O interesse está em mudar o ponto final da mesma conexão criando uma nova conexão para um endereço público através de uma porta privada já utilizada.

Usando NAT Traversal para conectar usuários no modo passivo
Bingo!

Claro, neste caso o NAT do cliente B tem todo o direito de rejeitar a primeira solicitação de conexão de um cliente A, mas seu próprio pedido corre para o “buraco” criado por essa mesma conexão, e a conexão é estabelecida.

Usando NAT Traversal para conectar usuários no modo passivo
Ilustração adequada para todo o processo com a ressalva de que protocolo não usa portas públicas abertas pela sessão NATS, bem como endereços privados.

Epílogo

No momento em que este artigo (original) foi escrito, aproximadamente metade dos clientes DC estavam trabalhando em modo passivo. Isto significa que um quarto de todas as ligações possíveis não pode ser feito.

No futuro DC++ será capaz de ignorar o NATusando conexões existentes AS и BS estabelecer uma conexão direta cliente-cliente, mesmo que A и B estão no modo passivo.

Fonte: habr.com

Adicionar um comentário