Przeczytaj wiersz stanu mówiący Security Associations (1 up, 0 connecting) i wygląda on jak raport o jednym działającym tunelu. Dwie podsieci przepuszczają przez niego ruch jednocześnie, więc liczba wydaje się kłamać. Nie kłamie; liczy asocjacje IKE, a jedna z nich może pomieścić kilka dzieci. Przeczytaj inwentarze, zanim dotkniesz propozycji lub trasy.

Dlaczego nagłówek i ruch się nie zgadzają

Stare wyjście stroke nazywa swój wynik asocjacjami bezpieczeństwa i wyprowadza go z menedżera asocjacji IKE. Każda ustanowiona asocjacja IKE wnosi jedną, niezależnie od tego, ile CHILD SA znajduje się pod nią. Jeden rodzic IKEv2 zwykle niesie kilka dzieci, po jednym na parę selektorów ruchu, a wynegocjowane selektory dziecka mogą obejmować więcej niż jeden adres lub prefiks. Liczba adresów w twojej konfiguracji nie ma więc stałego związku z liczbą w nagłówku.

Nowoczesne wyjście czasami pokazuje sumę zamiast starego sformułowania “up”, a demon zarządzany przez swanctl wcale nie jest sterowany starymi ustawieniami stroke. Nie zakładaj ani sformułowania, ani reguły liczenia między wersjami.

Porównaj trzy inwentarze, zanim cokolwiek zmienisz

Zacznij od tego, co jest wczytane, potem od tego, co jest wynegocjowane, potem od tego, co naprawdę przenosi pakiety. To trzy różne pytania i każde ma własne polecenie.

swanctl --list-conns
swanctl --list-sas

Pierwsze wymienia definicje połączeń, które demon przyjął. Drugie wymienia ustanowione asocjacje IKE wraz z ich dziećmi i właśnie tam pojawia się prawdziwa hierarchia. Definicja obecna w pliku, ale nieobecna na pierwszej liście nigdy nie została wczytana, i żadna liczba ponownych prób inicjatora tego nie naprawi. Jeśli zamiast tego uruchamiasz stary interfejs, równoważną parą jest ipsec statusall i ta sama lista swanctl, w zależności od tego, która wtyczka posiada konfigurację. Nie mieszaj narzędzi między dwoma demonami na jednym hoście i nie oczekuj jednej spójnej odpowiedzi.

swanctl --list-sas --raw | head -40
ip -s xfrm state

Surowa forma utrzymuje identyfikatory i selektory widoczne do porównania, a lista stanu jądra pokazuje, co stos uważa za zainstalowane. Gdy demon i jądro się nie zgadzają, albo demon został uruchomiony ponownie wokół istniejącego dziecka, albo obiekt jądra został usunięty spod niego.

Czytaj hierarchię, nie sumę

Ilustracyjny ustanowiony rodzic z dwojgiem dzieci wygląda jak jeden węzeł z dwojgiem dzieci pod nim, każde oznaczone własnym stanem i trybem. Zrzuć rzeczywiste wyjście i policz dzieci sam, zamiast czytać podsumowanie, które ktoś wkleił z pulpitu.

swanctl --list-sas
swanctl --list-conns --raw | grep -A4 'accounting'

Jeden rodzic z dwojgiem zainstalowanych dzieci to zdrowy tunel dwóch podsieci. Jeden rodzic z jednym zainstalowanym i jednym brakującym dzieckiem to inna sytuacja, a selektory brakującego dziecka są tym, co należy porównać z propozycją drugiej strony. Podczas odnawiania kluczy stare dziecko i jego zamiennik mogą na krótko pojawić się razem. Zachowaj znacznik czasu razem z migawką, bo liczba pobrana w środku odnowienia wygląda jak duplikacja, a pobrana po nim jak strata.

Wczytane, zainstalowane i ruch, który przechodzi

Dziecko w stanie zainstalowanym ma wynegocjowane parametry i wpis w jądrze. Ale niekoniecznie przeniosło choćby jeden pakiet: selektory mogą być węższe niż oczekiwany ruch, a trasa może wysłać ten ruch gdzie indziej, zanim tunel go w ogóle zobaczy. Wyślij strumień zgodny z wynegocjowanymi selektorami z upoważnionego hosta, a potem czytaj liczniki dziecka, a nie nagłówek. Licznik, który pozostaje na zerze, gdy generujesz pasujący ruch, wskazuje na trasowanie lub politykę, a nie na IKE.

swanctl --initiate --child accounting
swanctl --list-sas --raw | grep -E 'bytes|packets'

Uruchomienie nazwanego dziecka to świadome działanie z widocznym wynikiem, i oddziela ono “połączenie jest bezczynne, bo nikt o nie nie poprosił” od “połączenie nie może się podnieść”. Polityka pułapki na żądanie zachowuje się dokładnie jak pierwszy przypadek, więc przeczytaj ustawienie uruchamiania połączenia, zanim nazwiesz to usterką.

Gdy liczba naprawdę jest błędna

Jeśli definicji brakuje we wczytanym inwentarzu, sprawdź wczytywanie konfiguracji i to, która instancja demona działa. Jeśli jest wczytana, ale nigdy nie negocjuje, porównaj propozycje, kontekst uwierzytelniania i selektory z partnerem, jedno dziecko na raz. Zmieniaj jeden element na próbę i zapisuj identyfikator, który zmieniłeś. Wycofanie propozycji jest trywialne, gdy wiesz której; to zgadywanie po trzech zmianach, których nigdy nie rozdzielono.

Najpierw popraw błędny odczyt. Większość doniesień o “brakującym” drugim tunelu kończy się dwojgiem zainstalowanych dzieci pod jednym rodzicem, a jedyną rzeczą, która kiedykolwiek była zepsuta, był wiersz podsumowania, któremu ludzie ufali zamiast hierarchii.

Powiązane artykuły