Stato della VPN su macOS dal terminale: scutil, rotte o ping
Lo stato del servizio, la rotta del kernel e una richiesta reale rispondono a tre domande diverse. Scrivi lo script sull’identificatore del servizio e controlla anche la rotta.
Da qualche parte in uno script di distribuzione c’è un controllo se il tunnel è attivo prima che inizi la copia. Sono disponibili tre risposte e non significano la stessa cosa: lo stato del servizio riportato da scutil, la rotta scelta dal kernel e se l’altro capo risponde davvero. Confrontarle è la differenza tra un controllo che prevede la copia e uno che decora soltanto il registro.
Tre risposte alla domanda se la VPN è attiva
Lo stato del servizio è un fatto del piano di controllo. macOS sa che una configurazione è connessa perché il suo processo client lo ha detto. La rotta è un fatto del piano dati: il kernel invierà questa destinazione attraverso quell’interfaccia. La raggiungibilità è un fatto end-to-end e può fallire per motivi che nessuna delle altre due vede.
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
Un controllo utile combina le prime due e usa la terza come conferma che le altre due non mentivano. Ognuna da sola è una supposizione con una marca temporale.
Leggi l’identificatore, non il nome visualizzato
scutil --nc list
scutil --nc status "Office"
L’elenco stampa una riga per servizio e ogni riga porta uno stato tra parentesi seguito dall’identificatore del servizio, dal tipo e dal nome visualizzato. Scrivi lo script sull’identificatore, perché il nome visualizzato è quello che qualcuno ha digitato in Impostazioni di Sistema e può cambiare senza avviso. Il comando di stato stampa una sola parola seguita, per alcuni tipi di servizio, da statistiche; confronta quella prima parola invece di cercare il nome in tutto l’output, che compare anche altrove.
Avviare un servizio può far comparire una richiesta di autorizzazione o essere rifiutato del tutto quando il profilo è gestito. Quel rifiuto non è un guasto del tunnel; è un’affermazione di policy su chi può attivarlo.
Un client di terze parti si nasconde dall’elenco
Un elenco vuoto non significa che non ci sia una VPN. Le configurazioni create nelle impostazioni di rete del sistema compaiono qui; un client del fornitore, un profilo di gestione o un’app di terze parti possono mantenere un tunnel attivo che questo comando non vede mai. Il loro strumento è l’autorità per il proprio servizio. Chiedere a scutil di un client che non si è mai registrato restituisce nulla, e nulla non è la stessa risposta di disconnesso.
Quando l’elenco è vuoto ma il traffico è chiaramente cifrato, cercate l’interfaccia: un dispositivo utun o ppp con un indirizzo nell’intervallo atteso è prova che qualcosa ha stabilito un tunnel. È un segnale più debole dello stato del servizio, quindi abbinatelo a un controllo della rotta invece di trattare l’interfaccia come prova d’identità. Più client possono creare più interfacce simili e solo una appartiene al tunnel che intendevate.
Lo stato non è l’instradamento
Un servizio connesso dice che il tunnel esiste. Non dice che la vostra destinazione lo usa. Leggete gli indirizzi, poi chiedete direttamente al kernel:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Un client a tunnel completo installa una rotta predefinita attraverso il tunnel; un client a tunnel diviso installa prefissi privati specifici. Entrambi riportano Connected e uno script che controlla solo lo stato correrà felicemente sul percorso sbagliato. Fermare un tunnel non rimuove necessariamente le rotte installate da un altro client, ed è uno dei modi in cui una macchina finisce con un servizio connesso e una rotta obsoleta allo stesso tempo. Guardate la destinazione che vi interessa, non l’intera tabella delle rotte.
I nomi sono un problema separato
Altre macchine non raggiungono il Mac per nome mentre il suo indirizzo funziona, e questo viene segnalato come guasto della VPN. Il nome host locale, il nome host e il record DNS sono tre cose diverse. scutil --get LocalHostName mostra il nome Bonjour; sudo scutil --set HostName mac-office imposta il nome che il sistema riporta.
Nessuna delle due impostazioni crea un record nella zona dell’ufficio. Se altri host devono risolvere il nome tramite DNS, il proprietario della zona deve aggiungerlo, oppure lo script dovrebbe usare l’indirizzo. Impostare un nome stabile rende coerenti gli annunci; non fa rispondere il resolver.
Registrate insieme nello script l’identificatore del servizio e la forma attesa della rotta, e controllate entrambi prima della copia. Un tunnel attivo ma instradato male fallisce esattamente come nessun tunnel, e la riga di log che dice Connected manderà la prossima persona a cercare nel posto sbagliato.