Utilizzo di NAT Traversal per connettere gli utenti in modalità passiva

Questo articolo è una traduzione libera di una delle voci in Blog degli sviluppatori DC++.

Con il permesso dell'autore (oltre che per chiarezza e interesse), l'ho colorato di link e integrato con alcune ricerche personali.

Introduzione

Almeno un utente della coppia di connessione deve essere in modalità attiva in questo momento. Il meccanismo di attraversamento NAT sarà utile quando la modalità attiva non è configurata su nessuno dei due lati. Ciò è solitamente dovuto a un firewall o un dispositivo NAT che blocca le connessioni in entrata.

Se entrambi i client sono in modalità attiva

Il client che ha avviato invia un comando contenente il proprio indirizzo IP e la propria porta $Connetti a me ad un altro cliente. Utilizzando questi dati, il client che ha ricevuto il comando stabilisce una connessione con l'iniziatore.

Se uno dei client è in modalità passiva

Attraverso l'hub, un client passivo A invia un comando $RevConnectToMe cliente attivo Bche poi risponde con il comando $ConnectToMe.

Utilizzo di NAT Traversal per connettere gli utenti in modalità passiva
Come servitore S nel caso sopra è presente un hub DC

Se entrambi i client sono in modalità passiva, attivo Mozzo dell'ADC

Client dietro diversi NAT A и B si è unito all'hub S.

Utilizzo di NAT Traversal per connettere gli utenti in modalità passiva
Ecco come appare la connessione all'hub dal lato client A

L'hub accetta connessioni sulla porta 1511. Client A effettua connessioni in uscita dalla sua rete privata tramite la porta 50758. L'hub, a sua volta, vede l'indirizzo del dispositivo NAT, lavora con esso e lo trasmette ai client in base ai loro identificatori.

Cliente A invia al server S messaggio che chiede aiuto per connettersi con un cliente B.

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

Anche in modalità passiva, il client B, ricevuto questo comando, dovrà segnalare la propria porta privata utilizzata per connettersi all'hub tramite NAT.

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

Dopo aver ricevuto queste informazioni il cliente A tenta immediatamente di stabilire una connessione con il client B e segnala il proprio porto privato.

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

Qual è l'interesse? L'interesse è spostare l'endpoint della stessa connessione creando una nuova connessione ad un indirizzo pubblico attraverso una porta privata già utilizzata.

Utilizzo di NAT Traversal per connettere gli utenti in modalità passiva
Bingo!

Naturalmente, in questo caso il client NAT B ha tutto il diritto di rifiutare la prima richiesta di connessione da parte di un client A, ma la sua stessa richiesta si precipita nel “buco” creato proprio da questa connessione, e la connessione viene stabilita.

Utilizzo di NAT Traversal per connettere gli utenti in modalità passiva
Illustrazione adatta all'intero processo con l'avvertenza che protocollo non utilizza le porte pubbliche aperte dalla sessione NAT-S, nonché indirizzi privati.

Finale

Al momento della stesura dell'articolo (originale), circa la metà dei client DC lavora in modalità passiva. Ciò significa che un quarto di tutti i collegamenti possibili non può essere realizzato.

In futuro DC++ sarà in grado di bypassare NATutilizzando le connessioni esistenti A-S и B-S stabilire una connessione diretta cliente-cliente, anche se A и B sono in modalità passiva.

Fonte: habr.com

Aggiungi un commento