Premere Disconnetti funziona, e dieci secondi dopo il tunnel torna comunque. Quel ciclo è raramente il client VPN che si comporta male; è uno script di ripristino che poneva sempre una sola domanda, «è giù?», e vi rispondeva connettendosi. Quando separi la domanda a cui ha risposto l’utente da quella che il sistema riporta, la correzione diventa una piccola quantità di stato invece di un’attesa più lunga.

Due domande, non una

Questo profilo dovrebbe essere connesso adesso, e cosa riporta il sistema in questo momento? Sono domande diverse con proprietari diversi, e una politica di ripristino ha bisogno di entrambe prima di agire. L’intenzione è qualcosa che il tuo strumento decide e ricorda. Lo stato osservato è qualcosa che la piattaforma ti dice.

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

Leggi le righe come una politica e non come un elenco di casi. La seconda riga è quella che la maggior parte degli script omette, ed è l’unica riga che distingue un monitor da una macchina che si ostina ad avere ragione.

Lo stato osservato non è una preferenza

Il modello di stato Network Extension di Apple riporta gli stati connecting, connected, disconnecting, disconnected e recovery. Tutti e cinque descrivono la connessione. Nessuno dice «l’utente ha chiesto che questo profilo resti in pausa», perché non è affatto uno stato di connessione. I client non costruiti su quel framework espongono i propri controlli e le proprie chiamate di stato supportate, e tracciano la stessa linea con il proprio vocabolario.

La conseguenza è che uno stato disconnesso non può mai essere interpretato da solo. Significa una di almeno tre cose: il tunnel è caduto, l’utente l’ha fermato, oppure il sistema è tra un tentativo e l’altro. Solo il tuo registro dell’intenzione può distinguerle. Scrivi quel registro, conservalo tra i riavvii se deve sopravvivere a un riavvio, e aggiornalo nel momento in cui l’utente agisce invece di dedurlo più tardi da una riga di log.

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

Chi altro può avviare questo profilo

Una pausa promessa dal tuo helper è forte solo quanto gli altri proprietari dello stesso profilo. Una regola On Demand, una configurazione gestita o un secondo client possono tutti richiedere una connessione, e il tuo helper sembrerà rotto mentre si comporta esattamente come scritto.

Trova ogni meccanismo che può avviare il profilo prima di promettere di rispettare una pausa, e annota quale vince. Quando un servizio gestito trattiene deliberatamente un’opzione di pausa personale, è una decisione dell’amministratore sulla politica, non un vuoto che uno script dovrebbe colmare combattendo la gestione.

Rendi noiose le ripetizioni

Limita il numero di tentativi e rendi ciascuno sensibile a qualcosa che è cambiato: la rete è tornata, il gateway ha risposto, la richiesta delle credenziali è stata completata. Un gateway non disponibile, un’identità scaduta e un secondo fattore rifiutato richiedono tre risposte diverse, e un ciclo stretto ne dà la stessa a tutti e tre.

Guarda cosa produce davvero un tentativo rapido sullo schermo. Le finestre di dialogo ripetute che l’utente chiude sono peggiori di un unico messaggio di errore chiaro, e abituano le persone a cliccare le richieste senza leggerle.

La pausa e la politica del traffico sono promesse separate

Un tunnel messo in pausa dall’utente spesso lascia il traffico bloccato di proposito, ed è proprio lo scopo di una politica in stile kill switch. Ciò significa che Pausa dovrebbe promettere esattamente una cosa: il ripristino si ferma. Non dovrebbe cambiare silenziosamente ciò che la rete permette.

Decidi il comportamento del traffico separatamente, documentalo accanto al controllo Pausa e mantienilo coerente sia che il tunnel sia in pausa, sia fallito o assente. Altrimenti l’utente impara che premere Disconnetti fa qualcosa di imprevedibile, e il prossimo ticket di assistenza riguarda una rete che «a volte smette di funzionare» senza motivo visibile.

Articoli correlati