Teniu un servei VPN desat a Configuració del sistema i voleu que el terminal el posi en marxa. A macOS el camí suportat és scutil --nc, però només per als serveis que posseeix el gestor de connexions de xarxa del propi sistema. La barra de menús no és l’API: els clients de tercers solen tenir la seva pròpia automatització, i un perfil enviat per un servei de gestió pot refusar una arrencada local. Aquesta és la llista de verificació que segueixo: trobeu el servei exacte, llegiu-ne l’estat, inicieu-lo, espereu que l’estat canviï i, després, demostreu que el trànsit utilitza realment el túnel. Atureu-vos al primer pas que no quadri, perquè cada ordre posterior assumeix que l’anterior ha reeixit.

Trobeu el servei abans de provar d’iniciar-lo

Comenceu per l’inventari, no pel nom de perfil que recordeu:

scutil --nc help
scutil --nc list

Cada línia aparella un estat amb un identificador de servei, un tipus i un nom de visualització. L’identificador és el valor amb què s’ha de fer scripts, perquè els noms de visualització es repeteixen i es poden editar. El manual de scutil d’Apple documenta el mode de connexió de xarxa, mentre que l’--nc help instal·lat és la llista autoritativa de subordres en aquell Mac; no assumiu que un indicador d’una guia antiga encara existeixi a la vostra versió de macOS.

Una llista buida és un resultat, no un error. Un servei creat per un client de proveïdor o per un perfil de gestió pot estar actiu mentre és invisible aquí, o visible amb un tipus que el controlador natiu no pot dirigir. En aquest cas, utilitzeu l’eina del proveïdor o la documentació del perfil. Crear un perfil natiu paral·lel només per tenir alguna cosa per iniciar és un mal tracte.

Llegiu l’estat actual i confirmeu el selector

Consulteu el servei abans d’iniciar-lo, per saber què ha de canviar una arrencada correcta:

scutil --nc status "Office VPN"

Si dos serveis comparteixen un nom de visualització, el nom és ambigu. Passeu l’identificador en el seu lloc; l’ordre accepta qualsevol dels dos, però només l’identificador garanteix seleccionar un sol servei. Comproveu que la paraula d’estat sigui una que reconegueu — normalment Connected, Disconnected, Connecting o Disconnecting — abans d’analitzar-la en un script. Comproveu també si el perfil és gestionat, perquè una configuració bloquejada pot acceptar l’ordre i tot i així ignorar-la o demanar confirmació.

Aquesta crida d’estat és barata, així que feu-la servir de guàrdia en l’automatització: inicieu només quan l’estat sigui Disconnected i no tracteu Connecting com un error. Si el servei ja és Connected, ometeu l’arrencada en lloc d’interrompre un túnel que funciona.

Inicieu la connexió i espereu que l’estat s’assenti

La sol·licitud d’inici és asíncrona. L’ordre torna quan la sol·licitud s’ha acceptat, no quan acaba l’autenticació o s’instal·len les rutes. Executeu-la, després sondegeu l’estat amb una espera limitada i sortiu si el servei torna a Disconnected:

scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
  state=$(scutil --nc status "Office VPN" | head -n 1)
  [ "$state" = "Connected" ] && break
  [ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
  sleep 2
  n=$((n + 1))
done

Un estat Connecting que no es resol mai sol apuntar a credencials, MFA o al servidor, no a scutil. L’ordre no pot proporcionar un inici de sessió interactiu, així que un perfil que espera un testimoni o una clau de maquinari quedarà a Connecting i finalment retrocedirà. Llegiu la paraula d’estat abans d’afegir reintents; un bucle contra un avís d’autenticació no pot reeixir.

No tracteu l’estat de sortida del shell com a disponibilitat. El senyal útil és la cadena d’estat, seguida de l’evidència que el túnel transporta trànsit. Una ordre d’inici que torna en silenci encara us pot deixar amb una connexió que no s’autentica mai.

Demostreu que el túnel transporta trànsit, no només que diu Connected

Connected descriu la connexió, no la decisió d’encaminament. Els serveis natius PPP i IKEv2 creen una interfície ppp o utun i installen rutes, mentre que un túnel dividit deixa deliberadament la ruta per defecte tranquil·la. Inspeccioneu les interfícies i les dues famílies d’adreces:

ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns

Trobeu la interfície que ha creat el servei en lloc d’endevinar un número, i després pregunteu a la taula d’encaminament quina interfície fa servir una destinació concreta: route -n get 10.0.0.10, substituint-lo per un host intern. Si informa de la interfície física, el túnel està actiu però no transporta aquest flux. Comproveu les rutes del túnel dividit, l’ordre dels resolutors i qualsevol regla de tallafoc local que permeti la interfície del túnel però no el procés.

La resolució de noms és el fals negatiu habitual. Els noms interns es poden resoldre pel resolutor equivocat mentre el túnel està perfectament sa, cosa que sembla una fallada de VPN i no ho és. scutil --dns mostra l’ordre que farà servir macOS; després d’un canvi de resolutor, buideu la memòria cau amb dscacheutil -flushcache i sudo killall -HUP mDNSResponder.

Manteniu les credencials i els privilegis fora de la línia d’ordres

No poseu mai una contrasenya, una clau prèviament compartida o un testimoni als arguments. Els arguments són visibles a les llistes de processos i acaben a l’historial del shell, i una transcripció d’assistència copiada els pot filtrar. La pròpia gestió de credencials del perfil — ja sigui un element del Keychain, un avís del sistema o el flux d’autenticació del client — és el lloc per als secrets.

Executar l’ordre amb sudo no fa que un inici de sessió interactiu sigui desatès. Canvia l’usuari efectiu, no la disponibilitat d’un avís GUI, d’un testimoni de maquinari o del Keychain d’inici de sessió. Un LaunchAgent pot iniciar un servei després que l’usuari iniciï sessió i el Keychain estigui desbloquejat; un LaunchDaemon normalment no pot arribar a aquestes peces de la sessió d’usuari. Si una organització gestiona el servei, les seves regles de cicle de vida guanyen a qualsevol script local.

Atureu el servei i verifiqueu que ha romàs aturat

Atureu amb el mateix selector que vau fer servir per iniciar i, després, torneu a llegir l’estat en lloc d’assumir que el túnel ha desaparegut:

scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"

Una aturada que torna a Disconnected encara deixa una cosa per comprovar: si el perfil està configurat per connectar-se a demanda, cosa que el pot tornar a aixecar sense el vostre script. Si un altre client posseeix rutes al mateix Mac, aquestes rutes poden sobreviure a una aturada nativa. Torneu a comprovar la ruta abans de concloure que la màquina està fora de la VPN.

Per a un embolcall que executeu a mà, manteniu l’ordre fix: llista, estat, inici, sondeig, prova de ruta, aturada, verificació. No analitzeu el nom amistós a partir d’una sortida de format lliure quan l’identificador estigui disponible, i no tracteu la sortida de l’ordre d’inici com a disponibilitat. El gestor de connexions informa de l’estat; la vostra prova és l’estat més una ruta que apunta al túnel.

Articles relacionats