Pętla trasy domyślnej WireGuard: znajdź ścieżkę punktu końcowego
Trasa domyślna odsyła własne zaszyfrowane pakiety tunelu z powrotem do niego. Przeczytaj ścieżkę punktu końcowego, dodaj jedną trasę do hosta, a następnie zweryfikuj i wycofaj.
Interfejs się podnosi, konfiguracja peera wygląda poprawnie i żaden uścisk dłoni nigdy się nie kończy. Dodanie trasy domyślnej przez tunel to krok, który często to powoduje: ta sama tablica routingu decyduje teraz, dokąd mają trafić własne zaszyfrowane pakiety tunelu, a odpowiedź, którą daje, prowadzi z powrotem do tunelu. Nic nie może przenieść pakietu zewnętrznego, który przeniósłby wewnętrzny, więc połączenie zatrzymuje się, zanim zacznie. Naprawa jest niewielka, ale ma kolejność, a weryfikacja jest ważniejsza niż edycja.
Potwierdź pętlę, zanim zmienisz trasę
Odczytaj bieżący adres punktu końcowego peera, a następnie zapytaj stos routingu, dokąd trafiłby pakiet na ten adres. Jeśli odpowiedź wskazuje interfejs tunelu, pętla jest potwierdzona i dalsza diagnostyka nie jest potrzebna. Zapisz oba wyniki w rejestrze zmian, zanim czegokolwiek dotkniesz, ponieważ porównanie po naprawie to te same dwie komendy. Pętla nie jest subtelna, gdy już się ją zobaczy; trudność polega na tym, że interfejs wygląda zdrowo, kiedy to się dzieje.
sudo wg show wg1 endpoints
ip route get 198.51.100.20
ip rule show
Uwzględnij reguły polityki w tym zapisie. Trasa domyślna, która wygląda poprawnie w tabeli głównej, wciąż może przegrać z regułą wybierającą inną tabelę dla ruchu oznaczonego lub nieoznaczonego, a pętla pojawi się ponownie z tablicą routingu, która wygląda dobrze.
Czytaj ścieżkę punktu końcowego, a nie ścieżkę tunelu
Ścieżka punktu końcowego to trasa, którą zaszyfrowane datagramy pokonują do publicznego adresu peera, i musi pozostać poza tunelem, dopóki tunel istnieje. Ścieżka tunelu to wszystko, co peer może przenosić. Te dwie ścieżki dzielą jedną tablicę routingu i właśnie dlatego jeden wpis przechwytujący wszystko może je zgnieść jedna w drugą. Oddzielenie ruchu tunelu od własnego transportu tunelu to cały problem projektowy, a każde obsługiwane narzędzie rozwiązuje go gdzieś nieco inaczej.
Sprawdź obie rodziny adresów osobno, jeśli interfejs przenosi obie. Działające wykluczenie IPv4 nic nie mówi o tym, czy punkt końcowy IPv6 jest nadal osiągalny, a konfiguracja mieszana może wydawać się działać, dopóki nie zostanie wybrany adres IPv6 peera.
Przywróć ścieżkę punktu końcowego jedną spójną zmianą
Istnieją dwa obsługiwane podejścia, a ich mieszanie jest sposobem, w jaki działająca konfiguracja staje się nieprzewidywalna. Pierwsze to pozwolić narzędziu, które posiada interfejs, zarządzać całym tunelem: wg-quick ma dedykowaną obsługę domyślnego zakresu peerów, która instaluje osobną tabelę, reguły polityki i znacznik gniazda, co trzyma pakiety zewnętrzne poza tunelem. Zostaw tę mechanikę nietkniętą, zamiast odtwarzać połowę jej ręcznie. Konfiguracja, która miesza ręcznie dodaną trasę domyślną z menedżerem, który już instaluje znaczniki i reguły, zwykle zawodzi po ponownym połączeniu, gdy menedżer nadpisuje stan, który zakładał ręczny krok.
Drugie to ręczny projekt, w którym punkt końcowy otrzymuje jawną trasę do hosta przez fizyczną bramę. Dodaj tę trasę przed trasą domyślną, zastąp zamiast dopisywać, aby nieaktualny wpis nie mógł wygrać, i potwierdź wyszukiwanie następnie.
sudo ip route replace 198.51.100.20/32 via 192.0.2.1 dev eth0
ip route get 198.51.100.20
sudo ip route add default dev wg1
Zweryfikuj, a następnie zachowaj drogę powrotną
Postępujący znacznik czasu uścisku dłoni jest pierwszym dowodem i jest silniejszy niż interfejs, który po prostu istnieje. Potwierdź go testem aplikacji przez tunel, następnie celowo opuść interfejs i sprawdź, czy host wraca do użytecznego stanu, zamiast trzymać trasę domyślną wskazującą donikąd. Ten ostatni krok ludzie pomijają i to on decyduje, czy ponowne uruchomienie zostawi maszynę bez połączenia.
sudo wg show wg1 latest-handshakes
sudo wg-quick down wg1
ip route show default
ip route get 198.51.100.20
Przed tym wszystkim zapisz bieżący stan routingu i upewnij się, że istnieje droga wejścia, która nie zależy od tunelu: konsola, adres zarządzania poza pasmem lub kolega na miejscu. Zdalna maszyna, która traci trasę domyślną, nie jest do odzyskania przez połączenie, które właśnie utraciła, a najbezpieczniejszym krokiem w runbooku jest ten wykonany przed pierwszą komendą.