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ą.

Powiązane artykuły