Porturile UDP fixe pot ocoli redirecționarea porturilor, dar nu orice NAT
Un firewall cu stare admite pachetul partenerului ca trafic de retur atunci când ambele capete fixează un port. Iată când funcționează și ce îi pune capăt în tăcere.
Două routere de acasă, niciun port redirecționat și un VPN care uneori totuși se conectează. UDP permite asta, pentru că un firewall va admite un pachet pe care îl poate potrivi cu un flux pe care mașina l-a început deja. Este un truc condiționat, nu o funcție, iar condițiile sunt ușor de enunțat odată ce știi ce compară firewallul. Ele sunt și motivul pentru care profiluri identice se comportă diferit în rețele diferite.
Comparația pe care o face un firewall
Fiecare datagramă de ieșire creează o intrare de scurtă durată: adresa sursă, portul sursă, adresa destinație, portul destinație. Orice sosește și corespunde intrării este tratat ca răspuns și lăsat să treacă. Regulile pentru traficul de intrare nu intră în discuție.
Așadar întrebarea nu este dacă firewallul lasă partenerul să intre. Este dacă pachetul partenerului arată ca răspunsul pe care îl așteaptă intrarea. Schimbă un câmp din acel tuplu cu patru părți și pachetul devine un străin. De aceea o configurație care funcționează se poate strica atunci când se schimbă doar numărul portului, și de aceea același port poate funcționa pe un router și poate eșua pe următorul.
Fixează portul sursă local și același număr apare pe ambele părți ale schimbului. Acesta este întregul mecanism și explică de ce trucul este fragil, nu misterios.
Fixarea unui port la fiecare capăt
Portul UDP implicit al OpenVPN este 1194, iar lport stabilește portul sursă din care trimite. Fixează ambii parteneri și tuplul de ieșire al fiecăruia indică un port pe care ascultă celălalt:
# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194
Asta funcționează doar atât timp cât niciun router dintre ei nu rescrie portul sursă. Când pachetele apar într-o captură, dar nu se ridică niciun tunel, rescrierea este primul suspect.
Unde tuplul nu mai corespunde
Un NAT care mapează după destinație dă fiecărui partener un port extern diferit. Adresa pe care i s-a spus partenerului tău să o folosească nu este adresa care ajunge la el, așa că pachetul de intrare nu corespunde nimic și este aruncat în tăcere.
Traducerea la nivel de operator, NAT-ul suprapus și randomizarea porturilor se termină toate la fel. La fel orice cutie intermediară care rescrie porturi și lasă adresele în pace.
Transporturile de flux stau mai rău. Un handshake TCP este urmărit pas cu pas, așa că un VPN bazat pe TCP nu poate fi străpuns deloc în acest fel și are nevoie de un ascultător undeva pe traseu.
De obicei o parte eșuează prima
În practică cele două rețele rareori se comportă la fel. Un router poate oferi o mapare previzibilă, în timp ce celălalt oferă porturi după destinație, iar rezultatul este o configurație care funcționează între două case și eșuează dintr-o rețea mobilă. Rapoartele care se contrazic descriu de obicei două perechi diferite de routere. Niciun autor nu greșește și niciun rezultat nu se generalizează.
Află care parte a aruncat pachetul înainte de a atinge profilurile. Capturile la ambele capete lămuresc asta într-o singură încercare: datagramele care pleacă din A și nu ajung niciodată la B înseamnă că fluxul a fost rescris în tranzit, în timp ce datagramele care ajung la B fără să se întoarcă vreun răspuns înseamnă că firewallul nu le-a acceptat ca fiind înrudite.
Doi parteneri cu adrese IPv6 publice ocolesc toată problema. Fără traducere nu e nimic de potrivit, așa că este suficientă o regulă de firewall care numește partenerii și designul nu mai depinde de comportamentul routerului.
Când să te oprești
Un host cu adresă publică este răspunsul de încredere. Poate termina tunelul pentru ambii parteneri sau pur și simplu îi poate ajuta să descopere adresa externă actuală a celuilalt, iar ambele aranjamente funcționează indiferent ce fac NAT-urile. Un strat suprapus administrat oferă aceeași coordonare dacă politica permite.
Niciuna dintre acestea nu are nevoie de un firewall dezactivat. Oprirea protecției pentru a câștiga conexiunea directă aruncă motivul pentru care încercarea directă era atractivă și lasă mașina deschisă pe toată durata testului.
Încearcă mai întâi aranjamentul direct, apoi notează ce ai văzut. Comportamentul NAT și captura care l-a arătat valorează mai mult decât perechea de porturi pe care ai folosit-o în final, pentru că următoarea rețea va fi diferită. manualul OpenVPN 2.6 documentează lport și opțiunile remote de care depinde asta.