Zapytaj klienta VPN na komputer, z jakich serwerów korzystałeś, a uczciwa odpowiedź to zwykle nazwa lokalizacji. Ta nazwa to punkt wejścia, który wybrałeś, a adres, z którego wyszły Twoje dane, może należeć do zupełnie innej maszyny. Nic w aplikacji nie jest zaprojektowane do przechowywania drugiego numeru, więc zapis trzeba zbudować w momencie użycia. Istnieją dwa podejścia i tylko jedno z nich przetrwa kontakt ze sprawą wsparcia.

Dwa zapisy, z których istnieje tylko jeden

Widok samego klienta to w najlepszym razie lista wybranych lokalizacji ze znacznikami czasu. To decyzja projektowa, a nie przeoczenie: adresy są szczegółem operacyjnym, rotują między przypisaniami, a ujawnienie mapowania utrudnia zarówno wsparcie, jak i obsługę nadużyć. Dostawcy stawiają instancje chmurowe przed swoimi sieciami właśnie po to, by punkt końcowy mógł się przenieść bez informowania nikogo. To, co pokazuje aplikacja, to Twój wybór, a nie trasa, którą poszły dane.

Zapis, który możesz zbudować, to lokalny plik z jednym adresem publicznym i jednym znacznikiem czasu UTC w każdej linii. Jest mniejszy, brzydszy i znacznie użyteczniejszy, bo opisuje dokładnie to, co może zobaczyć także zewnętrzny obserwator.

Wariant A: przechwyć adres wyjścia samodzielnie

Usługa echa zwraca adres źródłowy, z którego przyszło żądanie, a to z definicji adres wyjścia. Uruchom przechwytywanie po tym, jak tunel zgłosi połączenie, bo klient, który mówi „połączono” zanim trasy i DNS się ustabilizują, zapisze adres sprzed tunelu i zatruje log już od pierwszej linii.

#!/bin/sh
umask 077
log="$HOME/vpn-exit.log"
printf '%s %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$(curl -fsS https://api.ipify.org)" >> "$log"

Dwa szczegóły czynią ten fragment użytecznym, a nie ozdobnym. Znacznik czasu i adres dzielą jedną linię, więc późniejsze przetwarzanie nie musi łączyć rekordów, a umask 077 utrzymuje plik prywatnym od chwili utworzenia. Uruchamiaj go raz na połączenie, a nie raz na rozruch, i trzymaj jeden plik na urządzenie.

Log notuje, kiedy użyłeś tunelu i z jakiej sieci się pojawiłeś, co jest bliższe historii przeglądania niż licznikowi. Wybierz okres przechowywania, którego potrafisz bronić, trzymaj plik poza współdzielonymi folderami synchronizacji i usuwaj go świadomie.

Wariant B: poproś dostawcę o historię

Niektórzy dostawcy prowadzą logi połączeń i odpowiedzą na pytanie wsparcia znacznikiem czasu i nazwą serwera. Ten zapis opisuje ich infrastrukturę, a nie Twój ruch, i jest wart tylko tyle, ile warte są ich okno przechowywania i chęć zajrzenia. Opisuje też sesję, a nie żądanie. Okno jest zwykle krótkie i mierzy się je od strony dostawcy tunelu.

Dostawcy, którzy reklamują brak logów, nie mogą tego wytworzyć na żądanie, a lista ostatnich lokalizacji po stronie klienta to nie to samo. Proszenie dostawcy bez logów o adres wyjścia zwykle kończy się wyjaśnieniem, dlaczego tych danych nie ma.

Co każdy zapis może udowodnić w sprawie wsparcia

Oba zapisy odpowiadają na różne pytania i to w tabeli porównanie przestaje być akademickie.

QuestionYour local logProvider record
Which address did the traffic leave from?Yes, for the moment it was capturedUsually not disclosed
Was the tunnel in use at 14:20?Yes, if the capture ranYes, within the retention window
Why did a location get slower?Yes, by comparing addresses over timeSometimes, as an infrastructure note
Who sent this specific request?NoNo

Tylko pierwsza kolumna jest pod Twoją kontrolą. Zapis dostawcy może potwierdzić, że konto było połączone w danym momencie, ale nie potwierdzi, które żądania korzystały z tunelu, i nie wskaże adresu, który dostawca traktuje jako szczegół operacyjny. Żaden z zapisów nie identyfikuje osoby, bo współdzielony adres wyjścia może nieść wielu klientów w tej samej minucie.

Porównaj oba z punktem odniesienia, zanim zaufasz któremukolwiek

Sam adres niczego nie dowodzi. Przechwyć adres bezpośredni przed połączeniem, adres tunelowany po nim, i porównaj je. Identyczne wartości oznaczają, że tunel nie przenosi tego żądania, czy to z powodu tunelu dzielonego, nadrzędnego proxy, czy klienta, który przeszedł na ścieżkę bezpośrednią.

curl -fsS https://api.ipify.org; echo
curl -fsS https://api64.ipify.org; echo
dig +short TXT o-o.myaddr.l.google.com @1.1.1.1

Powtórz porównanie dla DNS i dla IPv6, bo echo adresu dowodzi ścieżki jednego żądania HTTP i niczego o tym, który resolver odpowiedział. Urządzenie, które przecieka w jednym z tych przypadków, może wyglądać całkiem zdrowo w drugim.

Powiązane artykuły