Šta je VPN tunel i gdje zaštita prestaje
Tunel umotava odabrane pakete u drugu kovertu preko veze koju ste već imali. Pratite jedan zahtjev i vidite koju adresu stranica zapravo bilježi.
Klijent tvrdi da je povezan, katanac je zatvoren, a stranica i dalje bilježi adresu vašeg stana. Ništa nije otkazalo. Tunel ne zamjenjuje vaš Wi-Fi ni mobilnu vezu; on stavlja drugu kovertu oko odabranih paketa i šalje tu kovertu kroz mrežu koju ste već imali. Razumijevanje trika uglavnom se svodi na praćenje jednog zahtjeva i primjećivanje gdje se koverta otvara, jer gotovo svaki zbunjujući simptom, od curenja kućne adrese do zaglavljenog velikog preuzimanja, dolazi upravo s te granice.
Dvije koverte, jedna fizička veza
Vaš laptop zadržava normalnu vezu s ruterom, a ruter zadržava normalnu vezu s provajderom. Ništa se na tom putu ne mijenja kada se tunel podigne. Mijenja se to što se odabrani paketi predaju virtuelnom interfejsu, umotaju u novi paket adresiran na VPN partnera i pošalju kao običan saobraćaj preko fizičke veze.
Prijemna strana je uređaj koji otvara kovertu i prosljeđuje originalni paket prema njegovom odredištu. Između dva kraja posmatrač vidi vanjsko zaglavlje i ništa o unutrašnjem, osim ako ga protokol šifruje, što većina potrošačkih protokola radi, a opšta tehnika ne zahtijeva.
Zato je virtuelni interfejs istovremeno stvaran i zavaravajući. On postoji kao objekat jezgra s adresom i maksimalnom jedinicom prenosa, a operativni sistem usmjerava saobraćaj u njega kao u bilo koji drugi interfejs. To nije kabl, a njegovo postojanje dokazuje samo da je komponenta instalirana. Da li ga vaš pregledač koristi odlučuju rute, a ne to što je interfejs podignut.
Posmatrajte kako jedan zahtjev putuje
Odaberite odredište i pitajte jezgro koji će interfejs koristiti. Ova jedna komanda rješava većinu rasprava o tome radi li tunel išta:
ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0
Ako izlaz rute navodi interfejs tunela, paket će biti umotan. Ako navodi fizički interfejs, neće biti, i nikakvo ponovno pokretanje klijenta to ne mijenja. Druga komanda prikazuje oba interfejsa jedan pored drugog, i tako primjećujete tunel koji se podigao bez adrese ili s adresom iz pogrešne familije.
Zatim pogledajte prvi skok iz unutrašnjosti koverte i uporedite ga s prvim skokom izvana:
traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5
Unutar tunela prvi skok je unutrašnja adresa partnera, a ne vaš ruter. Snimak na interfejsu tunela prikazuje unutrašnje pakete, to je saobraćaj za koji aplikacija vjeruje da ga šalje. Istovremeni snimak na fizičkom interfejsu prikazuje vanjske pakete, a zajedno su najjasnija demonstracija šta tunel zapravo radi.
Tri adrese, a stranica vidi samo jednu
Ljudi ovo stalno brkaju, a zabuna stvara lažne izvještaje o curenju. To su različita polja u različitim zaglavljima s različitim trajanjem.
| 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 |
Broj pored virtuelnog adaptera je drugi red. To nije adresa koju stranica bilježi, i navoditi ga kao svoju javnu IP adresu jednostavno je pogrešno. Adresu koju stranica vidi dodjeljuje izlaz, a kod tunela u privatnu mrežu javnog izlaza možda uopšte nema, jer odredište živi unutar organizacije, a ne na internetu.
Tunel između lokacija isti je mehanizam s drugim krajnjim tačkama. Dva rutera umotavaju saobraćaj između mreža, i nijedan pojedinačni uređaj nema instaliran klijent. Koverta je u principu identična, a administrativna granica nije.
Gdje se koverta otvara i šta je preživljava
Tunel završava kod svog partnera. Ako se sopstveno šifrovanje aplikacije proteže dalje, ono preživljava tu granicu, što je normalan slučaj za HTTPS: sesija pregledača završava na stranici, pa izlaz prosljeđuje šifrat koji ne može pročitati.
Ništa drugo ne preživljava po defaultu. Nešifrovani zahtjev čitljiv je na izlazu baš kao što je bio čitljiv na Wi-Fi-ju u kafiću, a tunel ne dodaje zaštitu koju aplikacija nikada nije imala. Isto tako, pravila firewall-a i politika prosljeđivanja na izlazu odlučuju šta slijedi; uspješan handshake je činjenica o vezi s partnerom, a ne o ostatku putovanja.
Dodatni trošak je druga vidljiva posljedica. Svaki paket nosi dodatno zaglavlje, a vanjski transport može dodati svoje, pa se korisni teret po paketu smanjuje. Na putu s fiksnom maksimalnom jedinicom prenosa upravo zato tunel može propustiti ping i zaglaviti veliko otpremanje.
Provjerite put koji je aplikacija stvarno prešla
Posljednji korak je potvrditi konkretnu aplikaciju, a ne mašinu uopšte. Razriješite odredište, pogledajte rutu za tu adresu, a zatim posmatrajte vezu dok je otvorena:
getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'
Ako ruta navodi tunel, ali lista soketa pokazuje vezu s izvornom adresom s fizičkog interfejsa, aplikacija je vezana za nešto konkretno, ili se drugi tunel takmiči za default rutu. To je pitanje rutiranja, i na njega se može odgovoriti iz ova tri izlaza, a ne sa statusnog ekrana klijenta.
RFC 4301 sigurnosna arhitektura opisuje IP sloj ove verzije umotavanja za IPsec, a ista logika slojeva vrijedi za WireGuard i OpenVPN. Kada možete pokazati na unutrašnji paket i vanjski paket kao na odvojene objekte, većina ponašanja tunela prestaje biti tajnovita i postaje tabela rutiranja koju možete pročitati.