VPN na Macu ponownie łączy się sam zaraz po naciśnięciu Rozłącz
Monitor, który każdy rozłączony stan uznaje za awarię, będzie walczył z przyciskiem Rozłącz. Oddziel intencję od obserwowanego stanu, a następnie ogranicz ponowienia.
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.
| Intent | What you observe | What to do |
|---|---|---|
| Wanted | Dropped unexpectedly | Allow one supported recovery attempt |
| Paused by the user | Disconnected | Do nothing until intent changes |
| Wanted | Already connecting | Wait instead of starting a rival attempt |
| Wanted | Authentication needs a person | Prompt, 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.