Estado da VPN en macOS desde o terminal: scutil, rutas ou un ping
O estado do servizo, a ruta do núcleo e unha petición real responden tres preguntas distintas. Escriba o seu script contra o identificador do servizo e comprobe tamén a ruta.
Nalgún lugar dun script de despregamento hai unha comprobación de se o túnel está activo antes de que comece unha copia. Hai tres respostas dispoñibles, e non significan o mesmo: o estado do servizo que informa scutil, a ruta que escolleu o núcleo e se o extremo remoto responde de verdade. Comparalas é a diferenza entre unha comprobación que predí a copia e unha que só adorna un rexistro.
Tres respostas a se a VPN está activa
O estado do servizo é un feito do plano de control. macOS sabe que unha configuración está conectada porque o seu proceso cliente o dixo. A ruta é un feito do plano de datos: o núcleo enviará este destino por aquela interface. A alcanzabilidade é un feito de extremo a extremo, e pode fallar por motivos que ningún dos outros dous ve.
| 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 |
Unha comprobación útil combina as dúas primeiras e usa a terceira como confirmación de que as outras dúas non mentían. Calquera delas por si soa é unha conxectura cunha marca de tempo.
Lea o identificador, non o nome mostrado
scutil --nc list
scutil --nc status "Office"
A listaxe imprime unha liña por servizo, e cada liña leva un estado entre parénteses seguido do identificador do servizo, o tipo e o nome mostrado. Escriba o script contra o identificador, porque o nome mostrado é o que alguén escribiu nos Axustes do Sistema e pode cambiar sen aviso. O comando de estado imprime unha soa palabra seguida de estatísticas para algúns tipos de servizo; faga coincidir esa primeira palabra en lugar de buscar o nome en toda a saída, que tamén aparece noutros lugares.
Iniciar un servizo pode provocar unha solicitude de autorización ou ser rexeitado de plano cando o perfil está xestionado. Ese rexeitamento non é unha avaría do túnel; é unha declaración de política sobre quen pode levantalo.
Un cliente de terceiros escóndese da lista
Unha lista baleira non significa que non haxa VPN. Aquí aparecen as configuracións creadas dentro dos propios axustes de rede do sistema; un cliente de provedor, un perfil de xestión ou unha aplicación de terceiros poden manter un túnel activo que este comando nunca ve. A súa propia ferramenta é a autoridade para o seu propio servizo. Preguntar a scutil por un cliente que nunca se rexistrou con el non devolve nada, e nada non é a mesma resposta que desconectado.
Cando a lista está baleira pero o tráfico está claramente cifrado, busque a interface no seu lugar: un dispositivo utun ou ppp cun enderezo no rango esperado é evidencia de que algo estableceu un túnel. É un sinal máis débil que un estado de servizo, así que emparéxeo cunha comprobación de ruta en lugar de tratar a interface como proba de identidade. Varios clientes poden crear varias interfaces dese tipo, e só unha delas pertence ao túnel que vostede quería.
O estado non é o encamiñamento
Un servizo conectado di que o túnel existe. Non di que o seu destino o use. Lea os enderezos e despois pregunte ao núcleo directamente:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Un cliente de túnel completo instala unha ruta por defecto a través do túnel; un cliente de túnel dividido instala prefixos privados concretos. Ambos informan Connected, e un script que só comproba o estado executarase tan contento polo camiño equivocado. Deter un túnel non elimina necesariamente rutas que instalou outro cliente, e esa é unha forma de que unha máquina acabe cun servizo conectado e unha ruta obsoleta á vez. Mire o destino que lle importa, non a táboa de rutas enteira.
Os nomes son un problema á parte
Outras máquinas non poden alcanzar o Mac polo nome mentres o seu enderezo funciona, e iso infórmase como unha avaría de VPN. O nome local do host, o nome do host e o rexistro DNS son tres cousas distintas. scutil --get LocalHostName mostra o nome de Bonjour; sudo scutil --set HostName mac-office establece o nome que informa o sistema.
Ningún dos dous axustes crea un rexistro na zona da oficina. Se outros hosts teñen que resolver o nome mediante DNS, o propietario da zona debe engadilo, ou o script debería usar o enderezo no seu lugar. Establecer un nome estable fai coherentes os anuncios; non fai que o resolvedor responda.
Anote o identificador do servizo e a forma esperada da ruta xuntos no script, e comprobe ambos antes da copia. Un túnel activo e encamiñado mal falla exactamente igual que ningún, e a liña de rexistro que di Connected enviará a seguinte persoa a buscar no lugar equivocado.