Naciśnięcie Rozłącz działa, a dziesięć sekund później tunel i tak wraca. Ta pętla rzadko jest błędnym zachowaniem klienta VPN; to skrypt odzyskiwania, który zawsze zadawał tylko jedno pytanie, „czy jest wyłączony?“, i odpowiadał na nie, łącząc się. Gdy oddzielisz pytanie, na które odpowiedział użytkownik, od pytania, które zgłasza system, poprawka staje się niewielką ilością stanu zamiast dłuższego czekania.

Dwa pytania, nie jedno

Czy ten profil powinien być teraz połączony, i co system obecnie zgłasza? To różne pytania z różnymi właścicielami, a polityka odzyskiwania potrzebuje obu, zanim zadziała. Intencja to coś, co decyduje i pamięta twoje narzędzie. Obserwowany stan to coś, co mówi ci platforma.

IntentWhat you observeWhat to do
WantedDropped unexpectedlyAllow one supported recovery attempt
Paused by the userDisconnectedDo nothing until intent changes
WantedAlready connectingWait instead of starting a rival attempt
WantedAuthentication needs a personPrompt, then stop replaying credentials

Czytaj wiersze jako politykę, a nie jako listę przypadków. Drugi wiersz to ten, który pomija większość skryptów, i to jedyny wiersz, który odróżnia monitor od maszyny upierającej się przy swoim.

Obserwowany stan nie jest preferencją

Model stanu Network Extension firmy Apple zgłasza stany connecting, connected, disconnecting, disconnected i recovery. Wszystkie pięć opisują połączenie. Żaden nie mówi „użytkownik poprosił, aby ten profil pozostał wstrzymany“, bo to w ogóle nie jest stan połączenia. Klienci niezbudowani na tym szkielecie udostępniają własne obsługiwane elementy sterujące i wywołania stanu, i rysują tę samą granicę własnym słownictwem.

Konsekwencją jest to, że rozłączonego stanu nigdy nie można interpretować w izolacji. Oznacza on jedno z co najmniej trzech rzeczy: tunel spadł, użytkownik go zatrzymał albo system jest między próbami. Tylko własny zapis intencji może je rozróżnić. Zapisz ten zapis, zachowaj go między restartami, jeśli musi przetrwać restart, i aktualizuj go w chwili, gdy użytkownik działa, zamiast wnioskować później z wiersza dziennika.

scutil --nc list
scutil --nc status "Office VPN"

Kto jeszcze może uruchomić ten profil

Wstrzymanie obiecane przez twojego pomocnika jest tak silne, jak inni właściciele tego samego profilu. Reguła On Demand, zarządzana konfiguracja lub drugi klient mogą zażądać połączenia, a twój pomocnik będzie wyglądał na zepsuty, zachowując się dokładnie tak, jak opisano.

Znajdź każdy mechanizm, który może uruchomić profil zanim obiecasz respektować wstrzymanie, i zapisz, który wygrywa. Gdy usługa zarządzana celowo nie daje osobistej opcji wstrzymania, to decyzja administratora o polityce, a nie luka, którą skrypt ma wypełnić, walcząc z zarządzaniem.

Uczyń ponowienia nudnymi

Ogranicz liczbę prób i spraw, aby każda reagowała na coś, co się zmieniło: sieć wróciła, brama odpowiedziała, monit o poświadczenia zakończył się. Niedostępna brama, wygasła tożsamość i odrzucony drugi czynnik wymagają trzech różnych reakcji, a ciasna pętla daje wszystkim trzem tę samą.

Zobacz, co szybkie ponowienie naprawdę tworzy na ekranie. Powtarzane okna dialogowe, które użytkownik zamyka, są gorsze niż jeden jasny komunikat o błędzie, i uczą ludzi klikać przez monity bez ich czytania.

Wstrzymanie i polityka ruchu to osobne obietnice

Tunel wstrzymany przez użytkownika często celowo zostawia ruch zablokowany, i to jest cały sens polityki w stylu kill switch. To oznacza, że Wstrzymanie powinno obiecywać dokładnie jedno: odzyskiwanie się zatrzymuje. Nie powinno po cichu zmieniać tego, na co pozwala sieć.

Zdecyduj o zachowaniu ruchu osobno, udokumentuj je obok kontrolki Wstrzymanie i utrzymuj spójność niezależnie od tego, czy tunel jest wstrzymany, nieudany czy nieobecny. W przeciwnym razie użytkownik uczy się, że naciśnięcie Rozłącz robi coś nieprzewidywalnego, a następne zgłoszenie do pomocy dotyczy sieci, która „czasami przestaje działać“ bez widocznego powodu.

Powiązane artykuły