Ce este un tunel VPN și unde se oprește protecția
Un tunel pune un al doilea plic în jurul anumitor pachete, peste legătura pe care o aveai deja. Urmărește o cerere și vezi ce adresă înregistrează de fapt un site.
Clientul spune conectat, lacătul este închis, iar un site înregistrează în continuare adresa apartamentului tău. Nimic nu a eșuat. Un tunel nu înlocuiește Wi-Fi-ul sau conexiunea mobilă; pune un al doilea plic în jurul anumitor pachete și trimite acel plic prin rețeaua pe care o aveai deja. Înțelegerea trucului înseamnă mai ales să urmărești o singură cerere și să observi unde se deschide plicul, pentru că aproape fiecare simptom derutant, de la o adresă de acasă care se scurge până la o descărcare mare blocată, vine de la acea limită.
Două plicuri, o legătură fizică
Laptopul tău își păstrează conexiunea normală la router, iar routerul își păstrează conexiunea normală la furnizor. Nimic pe acea cale nu se schimbă când apare un tunel. Ce se schimbă este că anumite pachete sunt predate unei interfețe virtuale, înfășurate într-un pachet nou adresat partenerului VPN și trimise ca trafic obișnuit prin legătura fizică.
Capătul receptor este un dispozitiv care deschide plicul și trimite mai departe pachetul original spre destinația sa. Între cele două capete, un observator vede antetul exterior și nimic despre cel interior, dacă protocolul nu îl criptează, ceea ce fac majoritatea protocoalelor de consum, iar tehnica generală nu cere asta.
De aceea interfața virtuală este în același timp reală și înșelătoare. Ea există ca obiect al nucleului cu o adresă și o unitate maximă de transmisie, iar sistemul de operare direcționează traficul în ea ca în orice altă interfață. Nu este un cablu, iar existența ei dovedește doar că un component este instalat. Dacă browserul tău o folosește decid rutele, nu faptul că interfața este activă.
Urmărește o cerere în călătorie
Alege o destinație și întreabă nucleul ce interfață va folosi. Această singură comandă rezolvă majoritatea disputelor despre dacă tunelul face ceva:
ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0
Dacă ieșirea rutei numește interfața tunelului, pachetul va fi înfășurat. Dacă numește interfața fizică, nu va fi, iar nicio repornire a clientului nu schimbă asta. A doua comandă arată ambele interfețe una lângă alta, și exact așa observi un tunel care a pornit fără adresă sau cu o adresă din familia greșită.
Apoi uită-te la primul salt din interiorul plicului și compară-l cu primul salt din exterior:
traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5
În interiorul tunelului primul salt este adresa interioară a partenerului, nu routerul tău. Captura pe interfața tunelului arată pachetele interioare, adică traficul pe care aplicația crede că îl trimite. Captura simultană pe interfața fizică arată pachetele exterioare, iar cele două împreună sunt cea mai clară demonstrație a ceea ce face de fapt un tunel.
Trei adrese, iar site-ul vede doar una
Oamenii le confundă constant, iar confuzia produce rapoarte false de scurgeri. Sunt câmpuri diferite în antete diferite cu durate de viață diferite.
| Address | Where it appears | Who can see it |
|---|---|---|
| Endpoint address | Outer header, the peer you connect to | Your access network and the path to it |
| Inner tunnel address | Inside the envelope, on the virtual interface | The peer, and anything the peer routes to |
| Exit address | Source of the packet that reaches the website | The website and its upstream |
Numărul de lângă adaptorul virtual este al doilea rând. Nu este adresa pe care o înregistrează un site, iar a-l cita ca IP public este pur și simplu greșit. Adresa pe care o vede un site este atribuită de ieșire, iar într-un tunel către o rețea privată poate să nu existe deloc o ieșire publică, pentru că destinația se află în interiorul organizației și nu pe internet.
Un tunel între locații este același mecanism cu alte capete. Două routere înfășoară trafic între rețele, iar niciun dispozitiv individual nu are un client instalat. Plicul este identic în principiu, granița administrativă nu.
Unde se deschide plicul și ce supraviețuiește acestuia
Tunelul se termină la partenerul său. Dacă criptarea aplicației proprii merge mai departe, ea supraviețuiește acelei granițe, ceea ce este cazul normal pentru HTTPS: sesiunea browserului se termină la site, deci ieșirea transmite text cifrat pe care nu îl poate citi.
Nimic altceva nu supraviețuiește implicit. O cerere necriptată este lizibilă la ieșire exact cum era lizibilă în Wi-Fi-ul cafenelei, iar tunelul nu adaugă o protecție pe care aplicația nu a avut-o niciodată. La fel, regulile de firewall și politica de redirecționare a ieșirii decid ce se întâmplă în continuare; un handshake reușit este un fapt despre conexiunea cu partenerul, nu despre restul călătoriei.
Suprasarcina este cealaltă consecință vizibilă. Fiecare pachet poartă un antet suplimentar, iar transportul exterior poate adăuga al său, așa că încărcătura utilă pe pachet scade. Pe o cale cu o unitate maximă de transmisie fixă, exact de aceea un tunel poate trece un ping și bloca o încărcare mare.
Verifică calea pe care a mers de fapt aplicația
Ultimul pas este să confirmi aplicația concretă, nu mașina în general. Rezolvă destinația, uită-te la ruta pentru acea adresă și apoi observă conexiunea cât timp este deschisă:
getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'
Dacă ruta numește tunelul dar lista de socketuri arată o conexiune cu o adresă sursă din interfața fizică, aplicația este legată de ceva anume, sau un al doilea tunel concurează pentru ruta implicită. Este o întrebare de rutare, iar răspunsul se poate da din aceste trei ieșiri, nu din ecranul de stare al clientului.
Arhitectura de securitate RFC 4301 descrie versiunea la nivel IP a acestei înfășurări pentru IPsec, iar aceeași logică pe straturi se aplică pentru WireGuard și OpenVPN. Odată ce poți indica pachetul interior și pachetul exterior ca obiecte separate, cea mai mare parte a comportamentului tunelului încetează să mai fie misterioasă și devine un tabel de rutare pe care îl poți citi.