Klient mówi połączony, kłódka jest zamknięta, a witryna wciąż zapisuje adres twojego mieszkania. Nic nie zawiodło. Tunel nie zastępuje Wi-Fi ani łącza mobilnego; zakłada drugą kopertę wokół wybranych pakietów i wysyła tę kopertę przez sieć, którą już miałeś. Zrozumienie sztuczki polega głównie na prześledzeniu jednego żądania i zauważeniu, gdzie koperta jest otwierana, bo prawie każdy mylący objaw, od wyciekającego adresu domowego po zablokowane duże pobieranie, bierze się z tej granicy.

Dwie koperty, jedno łącze fizyczne

Twój laptop zachowuje normalne połączenie z routerem, a router zachowuje normalne połączenie z dostawcą. Nic na tej drodze nie zmienia się, gdy tunel wstaje. Zmienia się to, że wybrane pakiety są przekazywane do interfejsu wirtualnego, pakowane w nowy pakiet adresowany do partnera VPN i wysyłane jako zwykły ruch przez łącze fizyczne.

Strona odbierająca to urządzenie, które otwiera kopertę i przekazuje oryginalny pakiet w stronę jego celu. Między dwoma końcami obserwator widzi nagłówek zewnętrzny i nic o wewnętrznym, chyba że protokół go szyfruje, co robi większość protokołów konsumenckich, a ogólna technika tego nie wymaga.

Dlatego interfejs wirtualny jest zarazem realny i mylący. Istnieje jako obiekt jądra z adresem i maksymalną jednostką transmisji, a system operacyjny kieruje do niego ruch jak do każdego innego interfejsu. To nie kabel, a jego istnienie dowodzi tylko, że komponent jest zainstalowany. Czy twoja przeglądarka go używa, decydują trasy, a nie to, czy interfejs jest podniesiony.

Śledź jedno żądanie w podróży

Wybierz cel i zapytaj jądro, którego interfejsu użyje. To jedno polecenie rozstrzyga większość sporów o to, czy tunel cokolwiek robi:

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

Jeśli wynik trasy wskazuje interfejs tunelu, pakiet zostanie opakowany. Jeśli wskazuje interfejs fizyczny, nie zostanie, i żadne ponowne uruchomienie klienta tego nie zmieni. Drugie polecenie pokazuje oba interfejsy obok siebie i właśnie tak zauważasz tunel, który wstał bez adresu lub z adresem z niewłaściwej rodziny.

Następnie spójrz na pierwszy przeskok od wewnątrz koperty i porównaj go z pierwszym przeskokiem na zewnątrz:

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

Wewnątrz tunelu pierwszym przeskokiem jest wewnętrzny adres partnera, nie twój router. Przechwycenie na interfejsie tunelu pokazuje pakiety wewnętrzne, czyli ruch, który aplikacja uważa za wysyłany. Jednoczesne przechwycenie na interfejsie fizycznym pokazuje pakiety zewnętrzne, a oba razem są najjaśniejszą demonstracją tego, co tunel naprawdę robi.

Trzy adresy, a witryna widzi tylko jeden

Ludzie ciągle je mylą, a zamieszanie rodzi fałszywe raporty o wyciekach. To różne pola w różnych nagłówkach o różnym czasie życia.

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

Numer obok adaptera wirtualnego to drugi wiersz. To nie adres, który zapisuje witryna, a podawanie go jako twojego publicznego IP jest po prostu błędem. Adres, który widzi witryna, przydziela wyjście, a w tunelu do sieci prywatnej może w ogóle nie być publicznego wyjścia, bo cel żyje wewnątrz organizacji, a nie w internecie.

Tunel między lokalizacjami to ten sam mechanizm z innymi punktami końcowymi. Dwa routery opakowują ruch między sieciami, a żadne pojedyncze urządzenie nie ma zainstalowanego klienta. Koperta jest identyczna co do zasady, a granica administracyjna nie.

Gdzie koperta jest otwierana i co ją przeżywa

Tunel kończy się na swoim partnerze. Jeśli szyfrowanie samej aplikacji sięga dalej, przeżywa tę granicę, co jest normalnym przypadkiem HTTPS: sesja przeglądarki kończy się na witrynie, więc wyjście przekazuje szyfrogram, którego nie potrafi odczytać.

Nic innego domyślnie nie przeżywa. Niezaszyfrowane żądanie jest czytelne na wyjściu dokładnie tak, jak było czytelne w Wi-Fi kawiarni, a tunel nie dodaje ochrony, której aplikacja nigdy nie miała. Podobnie reguły zapory i polityka przekazywania wyjścia decydują, co stanie się dalej; udany uścisk dłoni jest faktem o połączeniu z partnerem, a nie o reszcie podróży.

Narzut jest inną widoczną konsekwencją. Każdy pakiet niesie dodatkowy nagłówek, a transport zewnętrzny może dodać własny, więc użyteczny ładunek na pakiet maleje. Na ścieżce o stałej maksymalnej jednostce transmisji właśnie dlatego tunel może przepuścić ping i zatrzymać duże wysyłanie.

Sprawdź ścieżkę, którą aplikacja naprawdę przeszła

Ostatni krok to potwierdzenie konkretnej aplikacji, a nie maszyny ogólnie. Rozwiąż cel, spójrz na trasę dla tego adresu, a potem obserwuj połączenie, dopóki jest otwarte:

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

Jeśli trasa wskazuje tunel, ale lista gniazd pokazuje połączenie z adresem źródłowym z interfejsu fizycznego, aplikacja jest przypisana do czegoś konkretnego, albo drugi tunel konkuruje o trasę domyślną. To pytanie o routing, i można na nie odpowiedzieć na podstawie tych trzech wyników, a nie ekranu stanu klienta.

Architektura bezpieczeństwa RFC 4301 opisuje wersję tej otoczki na poziomie IP dla IPsec, a ta sama logika warstw dotyczy WireGuard i OpenVPN. Gdy potrafisz wskazać pakiet wewnętrzny i pakiet zewnętrzny jako osobne obiekty, większość zachowania tunelu przestaje być tajemnicza i staje się tabelą routingu, którą możesz przeczytać.

Powiązane artykuły