Kas yra VPN tunelis ir kur apsauga baigiasi
Tunelis apgaubia pasirinktus paketus antruoju vokeliu virš jungties, kurią jau turėjote. Sekite vieną užklausą ir pamatykite, kokį adresą svetainė iš tikrųjų registruoja.
Klientas rodo prisijungęs, spyna užrakinta, o svetainė vis tiek registruoja jūsų buto adresą. Niekas nesugedo. Tunelis nepakeičia jūsų Wi-Fi ar mobiliojo ryšio; jis apgaubia tam tikrus paketus antruoju vokeliu ir siunčia tą vokelį tinklu, kurį jau turėjote. Suprasti gudrybę daugiausia reiškia sekti vieną užklausą ir pastebėti, kur vokelis atidaromas, nes beveik kiekvienas gluminantis simptomas, nuo nutekėjusio namų adreso iki įstrigusio didelio atsisiuntimo, kyla iš šios ribos.
Du vokeliai, viena fizinė jungtis
Jūsų nešiojamasis kompiuteris išlaiko įprastą ryšį su maršrutizatoriumi, o maršrutizatorius išlaiko įprastą ryšį su tiekėju. Šiame kelyje niekas nesikeičia, kai tunelis pakyla. Keičiasi tai, kad pasirinkti paketai perduodami virtualiajai sąsajai, įvyniojami į naują paketą, adresuotą VPN partneriui, ir siunčiami kaip įprastas srautas fizine jungtimi.
Priėmimo galas yra įrenginys, kuris atidaro vokelį ir persiunčia pirminį paketą jo paskirties link. Tarp dviejų galų stebėtojas mato išorinę antraštę ir nieko apie vidinę, nebent protokolas ją šifruoja, ką daro dauguma vartotojiškų protokolų ir ko bendroji technika nereikalauja.
Todėl virtualioji sąsaja yra ir tikra, ir klaidinanti. Ji egzistuoja kaip branduolio objektas su adresu ir didžiausiu perdavimo vienetu, o operacinė sistema nukreipia srautą į ją kaip į bet kurią kitą sąsają. Tai ne kabelis, o jos buvimas įrodo tik tai, kad komponentas įdiegtas. Ar jūsų naršyklė ją naudoja, sprendžia maršrutai, o ne tai, kad sąsaja įjungta.
Stebėkite vieną užklausą kelyje
Pasirinkite paskirties vietą ir paklauskite branduolio, kurią sąsają jis naudos. Ši viena komanda išsprendžia daugumą ginčų, ar tunelis apskritai ką nors daro:
ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0
Jei maršruto išvestis nurodo tunelio sąsają, paketas bus įvyniotas. Jei ji nurodo fizinę sąsają, nebus, ir joks kliento paleidimas iš naujo to nepakeis. Antroji komanda rodo abi sąsajas greta, ir taip pastebėsite tunelį, kuris pakilo be adreso ar su netinkamos šeimos adresu.
Tada pažiūrėkite į pirmą šuolį vokelio viduje ir palyginkite jį su pirmu šuoliu išorėje:
traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5
Tunelio viduje pirmas šuolis yra partnerio vidinis adresas, o ne jūsų maršrutizatorius. Fiksavimas tunelio sąsajoje rodo vidinius paketus, tai srautas, kurį programa mano siunčianti. Fiksavimas tuo pačiu metu fizinėje sąsajoje rodo išorinius paketus, ir abu kartu yra aiškiausias įrodymas, ką tunelis iš tikrųjų daro.
Trys adresai, ir svetainė mato tik vieną
Žmonės nuolat juos painioja, o painiava sukuria klaidingas nutekėjimo ataskaitas. Tai skirtingi laukai skirtingose antraštėse su skirtingu galiojimo laiku.
| 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 |
Skaičius šalia virtualaus adapterio yra antroji eilutė. Tai ne adresas, kurį registruoja svetainė, ir pateikti jį kaip savo viešą IP yra tiesiog klaida. Adresą, kurį mato svetainė, priskiria išėjimas, o privataus tinklo tunelyje viešo išėjimo gali visai nebūti, nes paskirties vieta yra organizacijos viduje, o ne internete.
Tunelis tarp vietovių yra tas pats mechanizmas su kitais galiniais taškais. Du maršrutizatoriai įvynioja srautą tarp tinklų, ir jokiame atskirame įrenginyje klientas nėra įdiegtas. Vokelis iš esmės identiškas, o administracinė riba ne.
Kur vokelis atidaromas ir kas jį išgyvena
Tunelis baigiasi savo partneriuje. Jei pačios programos šifravimas siekia toliau, jis išgyvena šią ribą, o tai įprastas HTTPS atvejis: naršyklės sesija baigiasi svetainėje, todėl išėjimas persiunčia šifruotą tekstą, kurio negali perskaityti.
Niekas kitas pagal nutylėjimą neišgyvena. Neužšifruota užklausa išėjime perskaitoma lygiai taip pat, kaip buvo perskaitoma kavinės Wi-Fi tinkle, o tunelis neprideda apsaugos, kurios programa niekada neturėjo. Taip pat išėjimo ugniasienės taisyklės ir persiuntimo politika nusprendžia, kas bus toliau; sėkmingas rankos paspaudimas yra faktas apie ryšį su partneriu, o ne apie likusią kelionę.
Papildomos sąnaudos yra kita matoma pasekmė. Kiekvienas paketas neša papildomą antraštę, o išorinis transportas gali pridėti savąją, todėl naudingoji apkrova vienam paketui mažėja. Kelyje su fiksuotu didžiausiu perdavimo vienetu būtent todėl tunelis gali praleisti ping ir sustabdyti didelį įkėlimą.
Patikrinkite kelią, kurį programa iš tikrųjų nuėjo
Paskutinis žingsnis yra patvirtinti konkrečią programą, o ne mašiną apskritai. Išspręskite paskirties vietą, pažiūrėkite į to adreso maršrutą ir tada stebėkite ryšį, kol jis atidarytas:
getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'
Jei maršrutas nurodo tunelį, bet lizdų sąrašas rodo ryšį su šaltinio adresu iš fizinės sąsajos, programa yra susieta su kuo nors konkrečiu, arba antras tunelis konkuruoja dėl numatytojo maršruto. Tai maršrutizavimo klausimas, ir į jį galima atsakyti iš šių trijų išvesčių, o ne iš kliento būsenos ekrano.
RFC 4301 saugos architektūra aprašo šio įvyniojimo IP sluoksnio versiją IPsec atveju, ir ta pati sluoksnių logika galioja WireGuard ir OpenVPN. Kai galite nurodyti vidinį paketą ir išorinį paketą kaip atskirus objektus, didžioji dalis tunelio elgsenos nustoja būti paslaptinga ir tampa maršrutų lentele, kurią galite perskaityti.