Klient hlásí připojeno, zámek je zamčený, a stránka přesto zaznamenává adresu vašeho bytu. Nic neselhala. Tunel nenahrazuje vaše Wi-Fi ani mobilní spojení; obalí vybrané pakety druhým obalem a tento obal pošle po síti, kterou jste už měli. Pochopit trik znamená hlavně sledovat jeden požadavek a všimnout si, kde se obal otevírá, protože téměř každý matoucí příznak, od úniku domácí adresy po zaseknuté velké stahování, pochází právě z této hranice.

Dva obaly, jedno fyzické spojení

Váš notebook si zachovává běžné připojení k routeru a router si zachovává běžné připojení k poskytovateli. Na této cestě se při vztyčení tunelu nic nemění. Mění se to, že vybrané pakety se předají virtuálnímu rozhraní, zabalí do nového paketu adresovaného protějšku VPN a odešlou jako běžný provoz po fyzickém spojení.

Přijímající strana je zařízení, které obal rozbalí a původní paket předá dál k jeho cíli. Mezi oběma konci pozorovatel vidí vnější hlavičku a o vnitřní nic, pokud ji protokol nešifruje, což většina spotřebitelských protokolů dělá a obecná technika nevyžaduje.

Proto je virtuální rozhraní zároveň skutečné i zavádějící. Existuje jako objekt jádra s adresou a maximální přenosovou jednotkou a operační systém do něj směruje provoz jako do kteréhokoli jiného rozhraní. Není to kabel a jeho existence dokazuje jen to, že je nainstalovaná komponenta. Zda ho váš prohlížeč používá, rozhodují trasy, ne to, že je rozhraní aktivní.

Sledujte jednu žádost na cestě

Vyberte cíl a zeptejte se jádra, které rozhraní použije. Tento jediný příkaz vyřeší většinu sporů o tom, zda tunel něco dělá:

ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0

Pokud výstup trasy uvádí rozhraní tunelu, paket bude obalen. Pokud uvádí fyzické rozhraní, nebude, a žádné restartování klienta to nezmění. Druhý příkaz ukazuje obě rozhraní vedle sebe, a právě tak odhalíte tunel, který se vztyčil bez adresy nebo s adresou z nesprávné rodiny.

Potom se podívejte na první skok zevnitř obalu a porovnejte ho s prvním skokem zvenku:

traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5

Uvnitř tunelu je prvním skokem vnitřní adresa protějšku, ne váš router. Zachycení na rozhraní tunelu ukazuje vnitřní pakety, tedy provoz, o kterém si aplikace myslí, že ho odesílá. Současné zachycení na fyzickém rozhraní ukazuje vnější pakety a obojí dohromady je nejjasnější ukázkou toho, co tunel skutečně dělá.

Tři adresy a stránka vidí jen jednu

Lidé si to pletou neustále a zmatek vytváří falešná hlášení o úniku. Jsou to různá pole v různých hlavičkách s různou životností.

AddressWhere it appearsWho can see it
Endpoint addressOuter header, the peer you connect toYour access network and the path to it
Inner tunnel addressInside the envelope, on the virtual interfaceThe peer, and anything the peer routes to
Exit addressSource of the packet that reaches the websiteThe website and its upstream

Číslo vedle virtuálního adaptéru je druhý řádek. Není to adresa, kterou stránka zaznamenává, a uvádět ho jako svou veřejnou IP je prostě chyba. Adresu, kterou stránka vidí, přiděluje výstup a u tunelu do soukromé sítě nemusí žádný veřejný výstup existovat, protože cíl žije uvnitř organizace, ne na internetu.

Tunel mezi lokalitami je stejný mechanismus s jinými koncovými body. Dva routery obalují provoz mezi sítěmi a žádné jednotlivé zařízení nemá nainstalovaného klienta. Obal je principiálně totožný, administrativní hranice ne.

Kde se obal otevírá a co ho přežije

Tunel končí u svého protějšku. Pokud vlastní šifrování aplikace sahá dál, přežije tuto hranici, což je běžný případ HTTPS: relace prohlížeče končí na stránce, takže výstup přeposílá šifrovaný text, který nedokáže přečíst.

Nic jiného ve výchozím stavu nepřežije. Nešifrovaný požadavek je na výstupu čitelný přesně tak, jako byl čitelný na Wi-Fi v kavárně, a tunel nepřidává ochranu, kterou aplikace nikdy neměla. Stejně tak pravidla firewallu a politika předávání na výstupu rozhodují, co bude dál; úspěšný handshake je fakt o spojení s protějškem, ne o zbytku cesty.

Režie je druhým viditelným důsledkem. Každý paket nese hlavičku navíc a vnější transport může přidat svou, takže použitelná zátěž na paket se zmenšuje. Na cestě s pevnou maximální přenosovou jednotkou je to přesně důvod, proč tunel projde pingem a zasekne velké nahrávání.

Zkontrolujte cestu, kterou aplikace skutečně šla

Posledním krokem je potvrdit konkrétní aplikaci, ne stroj obecně. Přeložte cíl, podívejte se na trasu pro tuto adresu a potom sledujte spojení, dokud je otevřené:

getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'

Pokud trasa uvádí tunel, ale seznam socketů ukazuje spojení se zdrojovou adresou z fyzického rozhraní, aplikace je vázána na něco konkrétního, nebo o výchozí trasu soutěží druhý tunel. To je otázka směrování a odpovědět na ni lze z těchto tří výstupů, ne z obrazovky stavu klienta.

Bezpečnostní architektura RFC 4301 popisuje verzi tohoto obalení pro vrstvu IP u IPsec a stejná logika vrstev platí pro WireGuard a OpenVPN. Jakmile dokážete ukázat na vnitřní paket a vnější paket jako na oddělené objekty, většina chování tunelu přestane být záhadná a stane se směrovací tabulkou, kterou můžete číst.

Související články