Utilizzo del NAT Traversal per collegare gli utenti in modalità passiva

Questo articolo è una traduzione libera di uno dei post nel blog degli sviluppatori DC++.

Con il permesso dell'autore (e anche per chiarezza e interesse) l'ho arricchito con collegamenti e ho aggiunto alcune mie considerazioni personali.

Introduzione

Attualmente almeno un utente della coppia di collegamenti deve essere in modalità attiva. Il meccanismo di 'bypass' NAT sarà utile quando la modalità attiva non è configurata su nessuna delle parti. Questo di solito accade a causa del blocco delle connessioni in entrata da parte di un firewall o di un dispositivo NAT.

Se entrambi i client sono in modalità attiva

Il client iniziatore invia un comando contenente il proprio indirizzo IP e porta $ConnectToMe all'altro client. Utilizzando questi dati, il client che riceve il comando stabilisce una connessione con l'iniziatore.

Se uno dei client è in modalità passiva

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

Utilizzo del NAT Traversal per collegare gli utenti in modalità passiva
In qualità di server S in questo caso funge da hub DC

Se entrambi i client sono in modalità passiva su un hub ADC

I client dietro diversi NAT A e B si sono uniti all'hub S.

Utilizzo del NAT Traversal per collegare gli utenti in modalità passiva
Questa è l'aspetto della connessione con l'hub dal lato del client A

L'hub accetta connessioni sulla porta 1511. Il client A effettua connessioni uscenti dalla propria rete privata attraverso la porta 50758. L'hub, a sua volta, vede l'indirizzo del dispositivo NAT, lavora su di esso e trasmette ai client rispettivamente ai loro identificatori.

Cliente A invia al server S un messaggio chiedendo aiuto per connettersi a un client B.

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

Essendo anch'esso in modalità passiva, il client B, ricevendo questo comando, deve comunicare la propria porta privata utilizzata per la connessione 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 client A prova immediatamente a connettersi al client B e comunica la propria porta privata.

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 sta nel deviare il punto finale della stessa connessione creando un nuovo collegamento a un indirizzo pubblico attraverso una porta privata già utilizzata.

Utilizzo del NAT Traversal per collegare gli utenti in modalità passiva
Bingo!

Senza dubbio, il NAT del client B ha tutto il diritto di rifiutare la prima richiesta di connessione da parte del client A, ma già la sua richiesta stessa si dirige verso il 'buco' creato da questa connessione, e la comunicazione viene stabilita.

Utilizzo del NAT Traversal per collegare gli utenti in modalità passiva
Un'illustrazione pertinente a tutto il processo, con l'avvertenza che per l'invio di queste query e delle risposte ad esse. SPARQL è una raccomandazione non utilizza porte pubbliche, aperte dalla sessione NATS, così come indirizzi privati.

Epilogo

Al momento della scrittura dell'articolo (originale), circa metà dei client DC opera in modalità passiva. Ciò significa che un quarto di tutte le possibili connessioni non può essere effettuato.

In seguito DC++ sarà in grado di "bypassare" il NAT, utilizzando le connessioni esistenti AS e BS per stabilire una connessione diretta client-client, anche se A e B sono in modalità passiva.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster