Qualcuno chiede se la VPN è attiva, e tre persone diverse intendono tre cose diverse. Un operatore intende che il profilo Office ha completato l'autenticazione. Un pianificatore intende che l'API privata risponderà. Una revisione di sicurezza intende che questa richiesta precisa è uscita dal percorso protetto. Uno script che cerca con grep nella tabella di routing il nome di un'interfaccia non risponde in modo affidabile a nessuna di queste domande.

Quindi la lista di controllo inizia prima che venga eseguito qualsiasi comando: assegna un nome al soggetto del controllo. Tutto il resto consiste nello scegliere l'interfaccia che può davvero riportarlo.

Dai un nome al soggetto prima del comando

Scrivi la domanda come un predicato con un soggetto. «Il profilo Office è connesso» è verificabile e ha un proprietario che può rispondere. «Questo lavoro può raggiungere l'API interna» è un secondo predicato, con una diversa modalità di errore. «Questa richiesta usa il percorso protetto» è un terzo, ed è l'unico che parla di un singolo flusso e non dell'intera macchina.

Mescolarli produce automazione che mente con sicurezza. Un lavoro che controlla lo stato del profilo e poi dà per scontato che l'API sia pronta avviserà qualcuno al livello sbagliato, e un lavoro che fa ping all'API e lo presenta come prova di un tunnel non distingue una VPN funzionante da un portatile che si trova per caso sulla rete dell'ufficio.

Un profilo: chiedi a ciò che lo possiede

Per un servizio Mac nativo, i controlli di connessione di rete in scutil riportano esattamente questo. Leggono lo stato di una configurazione con nome invece di dedurre qualcosa da un'interfaccia.

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

Il nome del profilo in quel comando deve essere quello reale dall'output della lista, non un'ipotesi. È un percorso di sola lettura per i servizi nativi, e non è garanzia che un client di terze parti compaia affatto; un fornitore che gestisce il proprio tunnel ha bisogno della propria interfaccia di stato supportata. Controlla la lista prima di scrivere la chiamata di stato, così un nome assente fallisce in modo visibile invece di corrispondere in silenzio a nulla.

Dentro un'app Network Extension, leggi lo stato dagli oggetti manager e connessione invece che dal sistema. Attenzione all'ambito: caricare le configurazioni salvate restituisce solo quelle create dall'app chiamante, quindi un risultato vuoto significa «nessuna delle mie», non «nessuna VPN su questo Mac». Distingui una query fallita da uno stato disconnesso confermato, e tratta gli stati transitori come esiti a sé stanti invece di ritentare una connessione che sta già salendo.

Un lavoro: la prontezza è un predicato separato

Se la domanda è se un lavoro può procedere, verifica la dipendenza reale del lavoro dopo che il proprietario della connessione ha riportato lo stato previsto. Un controllo di prontezza limitato verso la risorsa privata è la forma giusta: dimostra ciò che serve al lavoro e nulla di più.

Non può comunque dimostrare che ogni richiesta della macchina usi il tunnel, e non va riportato come se potesse. Allo stesso modo, una risorsa che risponde sulla rete ordinaria non è prova di una VPN, ed è per questo che i due controlli restano separati anche quando entrambi riescono.

Quando il lavoro richiede davvero un percorso protetto, quel requisito ha bisogno del progetto di applicazione del deployment: routing, esclusioni del tunnel diviso, una regola del firewall o un requisito a livello di applicazione. La disponibilità di un endpoint è un fatto su un server. L'applicazione è un fatto sulla configurazione del client, e l'una non dimostra l'altra.

Un flusso: ispeziona la rotta scelta

Per un singolo flusso, guarda la destinazione, la famiglia di indirizzi e il contesto di origine con la diagnostica di routing che riporta il percorso selezionato per quella destinazione specifica. Quell'output nomina l'interfaccia e l'indirizzo di origine realmente usati, che è un'affermazione molto più forte di una voce di rotta predefinita.

I controlli ampi del browser rispondono a una domanda del tutto diversa. Un risultato di IP pubblico descrive come appariva una richiesta dal punto di vista di un server, e non dice nulla su DNS privato, applicazioni escluse o un secondo contesto di rete usato da un altro processo.

Restituisci un risultato che il chiamante possa usare

Scegli una forma di ritorno adatta al predicato: uno stato di profilo con nome, un verdetto di prontezza della risorsa o un esplicito sconosciuto con le prove che lo hanno prodotto. Mantieni l'identità della configurazione e il motivo dell'errore accanto al verdetto.

È quest'ultima abitudine a fare la differenza tra automazione che aiuta e automazione che nasconde i problemi. «Office VPN: disconnessa, l'ultimo tentativo è fallito in autenticazione» dice a un operatore dove guardare. «La VPN è giù» invita a reinstallare, e «interfaccia trovata» invita a un falso tutto a posto.

Il riferimento Network Extension su il caricamento delle configurazioni di tunnel salvate è il posto dove confermare l'ambito dell'app chiamante prima di costruirci qualcosa sopra.

Articoli correlati