Questo articolo è una traduzione libera di un post nel .
Con il permesso dell'autore (e per chiarezza e curiosità) l'ho arricchito con collegamenti e aggiunto alcune osservazioni personali.
Introduzione
Attualmente almeno un utente della coppia di connessioni deve essere in modalità attiva. Il meccanismo di 'bypass' NAT sarà utile nel caso in cui nessuna delle parti abbia configurato la modalità attiva. Questo accade generalmente a causa del blocco delle connessioni in ingresso da parte di un firewall o di un dispositivo NAT.
Se entrambi i client sono in modalità attiva
Il client initiatore invia un comando contenente il proprio indirizzo IP e porta all'altro client. Utilizzando questi dati, il client che riceve il comando stabilisce la connessione con l'initiatore.
Se uno dei client è in modalità passiva
Attraverso l'hub, il client passivo A invia il comando al client attivo B, che poi risponde con il comando $ConnectToMe.

Come server S nel caso sopra funge da hub DC
Se entrambi i client sono in modalità passiva su
Client dietro diversi NAT A e B si sono uniti all'hub S.

Ecco come appare la connessione al hub dal lato del cliente A
Il hub accetta connessioni sulla porta 1511. Il cliente A effettua connessioni in uscita dalla propria rete privata attraverso la porta 50758. Il hub, a sua volta, vede l'indirizzo dell'apparato NAT, lavora con esso e trasmette ai clienti in base ai loro identificatori.
Cliente A invia al server S un messaggio chiedendo aiuto per connettersi al cliente B.
Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991
Essendo anch'esso in modalità passiva, il cliente B, ricevuta questa istruzione, deve comunicare la propria porta privata utilizzata per la connessione al 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 prova immediatamente a stabilire una connessione con il cliente 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> 1649612991Qual è l'interesse? L'interesse sta nel dislocare il punto finale della stessa connessione creando una nuova connessione a un indirizzo pubblico tramite una porta privata già utilizzata.

Bingo!
Sicuramente, in questo caso il NAT del cliente B ha tutto il diritto di rifiutare la prima richiesta di connessione dal cliente A, ma già la sua propria richiesta si dirige verso il "foro" creato da questa stessa connessione, e la comunicazione viene comunque stabilita.

Un'illustrazione adatta all'intero processo con la condizione che non utilizzi porte pubbliche aperte dalla sessione NAT‒S, così come indirizzi privati.
Epilogo
Al momento della scrittura (dell'articolo originale), circa metà dei clienti DC opera in modalità passiva. Ciò significa che un quarto di tutte le possibili connessioni non può essere stabilito.
In futuro , utilizzando connessioni esistenti A‒S e B‒S per stabilire una connessione diretta client-client, anche se A e B si trovano in modalità passiva.
Fonte: habr.com
