Estat de la VPN a macOS des del terminal: scutil, rutes o un ping
L’estat del servei, la ruta del nucli i una petició real responen tres preguntes diferents. Escriviu l’script contra l’identificador del servei i comproveu també la ruta.
En algun lloc d’un script de desplegament hi ha una comprovació de si el túnel està actiu abans que comenci una còpia. Hi ha tres respostes disponibles, i no volen dir el mateix: l’estat del servei que informa scutil, la ruta que ha triat el nucli i si l’altre extrem respon realment. Comparar-les és la diferència entre una comprovació que prediu la còpia i una que només adorna un registre.
Tres respostes a si la VPN està activa
L’estat del servei és un fet del pla de control. macOS sap que una configuració està connectada perquè el seu procés client ho ha dit. La ruta és un fet del pla de dades: el nucli enviarà aquesta destinació per aquella interfície. L’abast és un fet d’extrem a extrem, i pot fallar per motius que cap dels altres dos no veu.
| 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 |
Una comprovació útil combina les dues primeres i fa servir la tercera com a confirmació que les altres dues no mentien. Qualsevol sola és una conjectura amb una marca de temps.
Llegiu l’identificador, no el nom mostrat
scutil --nc list
scutil --nc status "Office"
El llistat imprimeix una línia per servei, i cada línia porta un estat entre parèntesis seguit de l’identificador del servei, el tipus i el nom mostrat. Escriviu l’script contra l’identificador, perquè el nom mostrat és el que algú va escriure a Configuració del Sistema i pot canviar sense avís. L’ordre d’estat imprimeix una sola paraula seguida d’estadístiques per a alguns tipus de servei; feu coincidir aquesta primera paraula en lloc de buscar el nom a tota la sortida, que també apareix en altres llocs.
Iniciar un servei pot fer aparèixer una sol·licitud d’autorització o bé ser rebutjat de ple quan el perfil està gestionat. Aquest rebuig no és una fallada del túnel; és una declaració de política sobre qui pot aixecar-lo.
Un client de tercers s’amaga del llistat
Una llista buida no vol dir que no hi hagi VPN. Aquí hi apareixen les configuracions creades dins de la configuració de xarxa del mateix sistema; un client de proveïdor, un perfil de gestió o una aplicació de tercers poden mantenir un túnel actiu que aquesta ordre no veu mai. La seva pròpia eina és l’autoritat per al seu propi servei. Preguntar a scutil per un client que no s’hi ha registrat mai no retorna res, i res no és la mateixa resposta que desconnectat.
Quan la llista és buida però el trànsit és clarament xifrat, busqueu la interfície en lloc d’això: un dispositiu utun o ppp amb una adreça al rang esperat és evidència que alguna cosa ha establert un túnel. És un senyal més feble que un estat de servei, així que emparelleu-lo amb una comprovació de ruta en lloc de tractar la interfície com a prova d’identitat. Diversos clients poden crear diverses interfícies així, i només una d’elles pertany al túnel que volíeu.
L’estat no és l’encaminament
Un servei connectat diu que el túnel existeix. No diu que la vostra destinació el faci servir. Llegiu les adreces i després pregunteu al nucli directament:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Un client de túnel complet instal·la una ruta per defecte a través del túnel; un client de túnel dividit instal·la prefixos privats concrets. Tots dos informen Connected, i un script que només comprova l’estat s’executarà ben content pel camí equivocat. Aturar un túnel no elimina necessàriament rutes que un altre client va instal·lar, i aquesta és una manera que una màquina acabi amb un servei connectat i una ruta obsoleta alhora. Mireu la destinació que us importa, no la taula de rutes sencera.
Els noms són un problema a part
Altres màquines no poden arribar al Mac pel nom mentre la seva adreça funciona, i això es reporta com una fallada de VPN. El nom local d’amfitrió, el nom d’amfitrió i el registre DNS són tres coses diferents. scutil --get LocalHostName mostra el nom Bonjour; sudo scutil --set HostName mac-office estableix el nom que informa el sistema.
Cap dels dos paràmetres crea un registre a la zona de l’oficina. Si altres amfitrions han de resoldre el nom mitjançant DNS, el propietari de la zona l’ha d’afegir, o l’script hauria d’usar l’adreça en lloc d’això. Establir un nom estable fa que els anuncis siguin coherents; no fa que el resoledor respongui.
Registreu l’identificador del servei i la forma esperada de la ruta junts a l’script, i comproveu tots dos abans de la còpia. Un túnel actiu i encaminat malament falla exactament com si no hi hagués túnel, i la línia de registre que diu Connected enviarà la propera persona a mirar al lloc equivocat.