Tunel działa, strony IPv4 się ładują, a jedna nazwa hosta kończy się przekroczeniem czasu. Natychmiastowy wniosek jest taki, że VPN jest zepsuty albo dane logowania są błędne, i zwykle żadne z nich nie jest prawdą. Nazwa zwróciła zarówno adres IPv4, jak i IPv6, aplikacja wybrała jeden, i tylko jeden z tych kandydatów miał działającą ścieżkę. Decyzję o wyborze podjął klient; tunel po prostu nie obejmował tego, co wybrał.

Wybór to nie obietnica pokrycia

Domyślny wybór adresu, opisany w RFC 6724, decyduje, którą parę źródła i celu host preferuje, gdy dostępnych jest kilka. Happy Eyeballs dokłada do tego strategię połączenia: rozpoczyna próby w obu rodzinach i zachowuje tę, która odpowie pierwsza, żeby użytkownik nie czekał na wygaśnięcie zepsutej rodziny.

Żaden z mechanizmów nie tworzy trasy. Jeśli tunel przenosi tylko IPv4, kandydat AAAA nadal jest legalnym celem, którego klient może spróbować, a awaria objawia się jako wolne ładowanie, nie jako błąd, bo przeglądarka się wycofała. Użytkownik zgłasza wolną stronę, nie zepsutą, a zgłoszenie do pomocy technicznej dziedziczy tę niejednoznaczność. Odtwórz to z ustaloną rodziną, a raport stanie się konkretny.

To wycofanie jest powodem, dla którego objaw jest niespójny między aplikacjami. Przeglądarka ukrywa opóźnienie; klient wiersza poleceń z ustaloną rodziną od razu pokazuje rzeczywistą awarię.

Ustal, której rodziny żądanie faktycznie użyło

Zacznij od nazwy, nie od tunelu. Odpytaj oba typy rekordów i zanotuj, co wróciło:

dig +short A example.com
dig +short AAAA example.com
curl -4 -sS -o /dev/null -w '%{http_code}\n' https://example.com
curl -6 -sS -o /dev/null -w '%{http_code}\n' https://example.com

Jeśli żądanie v4 się powiedzie, a żądanie v6 zawiedzie, odtworzyłeś problem w formie, którą można debugować. Jeśli oba się powiodą z powłoki, a przeglądarka nadal zawodzi, sprawdź własny resolver aplikacji albo odpowiedź z pamięci podręcznej, zanim dotkniesz tunelu.

Trzymaj rodzinę i cel w notatkach. Zgłoszenie, które mówi, że strona nie ładuje się przez VPN, nie może zweryfikować nikt, natomiast zgłoszenie, które mówi, że AAAA zawodzi, a A działa, wskazuje konkretną trasę.

Sprawdź trasę dla tej rodziny

Dla zawodzącej rodziny zapytaj jądro, której ścieżki by użyło, i porównaj ją ze skonfigurowanymi adresami tunelu. W systemie Linux ip -6 route get dla celu pokazuje interfejs i źródło, które zostałyby wybrane.

Następnie sprawdź sam tunel. Peery WireGuard niosą listę dozwolonych adresów IP, a wpis dla 0.0.0.0/0 nie mówi nic o IPv6. Jeśli lista peera nie ma prefiksu IPv6, klient nie ma powodu wysyłać ruchu AAAA do tunelu, a pakiet wychodzi tak, jak host zrobiłby to inaczej.

Reguły zapory i polityka NAT zasługują na tę samą kontrolę dla każdej rodziny. Reguła napisana dla IPv4 nie obejmuje IPv6 na żadnej platformie, i to jest najczęstszy powód, dla którego jedna rodzina działa, a druga nie.

Nie wyłączaj IPv6, żeby uprościć zrzut ekranu

Wyłączenie IPv6 w całym systemie sprawi, że objaw zniknie, i pozostawi Cię bez diagnozy. Psuje też każdy cel, który jest tylko IPv6, i ukrywa ten sam błąd przed następną aplikacją. Jeśli maszyna naprawdę nie powinna używać IPv6, to świadoma polityka z właścicielem i testem. Wyłączenie jej podczas incydentu nie jest ani jednym, ani drugim.

Zdecyduj, co klient ma robić z rodziną, i skonfiguruj to jawnie: przeprowadź ją przez tunel albo zablokuj w obsługiwany sposób, żeby wybór nigdy nie proponował nieosiągalnego kandydata. Oba są legalnymi projektami. Globalne wyłączenie nie jest żadnym z nich, bo w ogóle nie jest projektem.

Co wpisać w zgłoszeniu

Zapisz cztery rzeczy: nazwę hosta, rodzinę, która zawiodła, trasę wybraną przez jądro i wynik żądania specyficznego dla rodziny. Ten zestaw wystarczy, żeby ktoś inny odtworzył awarię bez zgadywania, którą z dwóch ścieżek miałeś na myśli.

Reguły wyboru adresu z RFC 6724 wyjaśniają, dlaczego klient preferował kandydata, którego preferował, a RFC 8305 wyjaśnia zachowanie wyścigu, które ukryło opóźnienie. Żadne z nich nie wskaże trasy pakietu za Ciebie, i właśnie to musi zrobić tunel.

Powiązane artykuły