UDP hole punching
Con "UDP hole punching" si intende una tecnica che consente di
stabilire connessioni UDP bidirezionali tra computer appartenenti a
reti private connesse tramite Internet utilizzando NAT.
Ogni host dietro un dispositivo NAT contatta un terzo server noto accessibile per mezzo di un indirizzo
pubblico e poi, una volta che il dispositivo NAT ha stabilito una
sessione UDP con tale host, può passare alla comunicazione
diretta sperando che il dispositivo NAT mantenga le informazioni di
stato, nonostante il fatto che i pacchetti provengono da host
differenti.
UDP hole punching non funziona con le Symmetric
NAT (note anche come NAT bi-direzionale ), che tendono ad
essere utilizzate all'interno di grandi reti aziendali. Con Symmetric
NAT, essendo l'indirizzo IP del server noto diverso da quello del punto
finale, la mappatura NAT che il server noto vede è diversa dalla
mappatura che l'endpoint avrebbe utilizzato per inviare pacchetti
attraverso il client.
Seguendo un approccio un po' più elaborato entrambi gli host
iniziano ad inviare pacchetti gli uni agli altri, effettuando diversi
tentativi. Su un " Restricted Cone NAT" , il primo pacchetto
proveniente dali altri host sarà bloccato. Dopo che la
periferica NAT avrà memorizzato un record conseguente all'invio
di un pacchetto destinato alle altre macchine, essa consentirà
che ogni pacchetto proveniente da questi indirizzi IP e con lo stesso
numero di porta passi attraverso.
La tecnica è ampiamente utilizzata nel software P2P e
telefonia VoIP. Si tratta di uno dei metodi utilizzati da Skype
per aggirare i firewall e dispositivi NAT. Può anche essere
utilizzato per stabilire connessioni VPN (utilizzando,
ad esempio, OpenVPN , strongSwan ).
La stessa tecnica è talvolta utilizzata con connessioni TCP,
anche se con molto meno successo.
Algoritmo
Siano A e B i due host, ciascuno nella propria rete privata;
N1 e N2 sono i due dispositivi NAT; S è un server pubblico con
un indirizzo IP pubblico e raggiungibile.
- A e B iniziano una conversazione UDP con S; i dispositivi NAT N1
e N2 creano traduzioni UDP e assegnano numeri di porta
temporanei per la comunicazione esterna.
- S comunica i rispettivi numeri di porta agli host A e B
- A e B contattano i rispettivi dispositivi NAT direttamente
sulle porte tradotte; il NAT utilizza le porte precedentemente create
per inviare i pacchetti di A e B