Estado de la VPN en macOS desde la terminal: scutil, rutas o un ping
El estado del servicio, la ruta del núcleo y una petición real responden a tres preguntas distintas. Escriba su script contra el identificador del servicio y compruebe también la ruta.
En algún lugar de un script de despliegue hay una comprobación de si el túnel está activo antes de que empiece una copia. Hay tres respuestas disponibles, y no significan lo mismo: el estado del servicio que informa scutil, la ruta que eligió el núcleo y si el extremo remoto responde de verdad. Compararlas es la diferencia entre una comprobación que predice la copia y una que solo adorna un registro.
Tres respuestas a si la VPN está activa
El estado del servicio es un hecho del plano de control. macOS sabe que una configuración está conectada porque su proceso cliente lo ha dicho. La ruta es un hecho del plano de datos: el núcleo enviará este destino por aquella interfaz. La alcanzabilidad es un hecho de extremo a extremo, y puede fallar por motivos que ninguno de los otros dos 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 |
Una comprobación útil combina las dos primeras y usa la tercera como confirmación de que las otras dos no mentían. Cualquiera de ellas por sí sola es una conjetura con marca de tiempo.
Lea el identificador, no el nombre mostrado
scutil --nc list
scutil --nc status "Office"
El listado imprime una línea por servicio, y cada línea lleva un estado entre paréntesis seguido del identificador del servicio, el tipo y el nombre mostrado. Escriba el script contra el identificador, porque el nombre mostrado es lo que alguien escribió en Ajustes del Sistema y puede cambiar sin aviso. El comando de estado imprime una sola palabra seguida de estadísticas para algunos tipos de servicio; haga coincidir esa primera palabra en lugar de buscar el nombre en toda la salida, que también aparece en otros lugares.
Iniciar un servicio puede provocar una solicitud de autorización o ser rechazado de plano cuando el perfil está gestionado. Ese rechazo no es una avería del túnel; es una declaración de política sobre quién puede levantarlo.
Un cliente de terceros se esconde de la lista
Una lista vacía no significa que no haya VPN. Aquí aparecen las configuraciones creadas dentro de los propios ajustes de red del sistema; un cliente de proveedor, un perfil de gestión o una aplicación de terceros pueden mantener un túnel activo que este comando nunca ve. Su propia herramienta es la autoridad para su propio servicio. Preguntar a scutil por un cliente que nunca se registró con él no devuelve nada, y nada no es la misma respuesta que desconectado.
Cuando la lista está vacía pero el tráfico está claramente cifrado, busque la interfaz en su lugar: un dispositivo utun o ppp con una dirección en el rango esperado es evidencia de que algo estableció un túnel. Es una señal más débil que un estado de servicio, así que emparéjela con una comprobación de ruta en lugar de tratar la interfaz como prueba de identidad. Varios clientes pueden crear varias interfaces de ese tipo, y solo una de ellas pertenece al túnel que usted quería.
El estado no es el enrutamiento
Un servicio conectado dice que el túnel existe. No dice que su destino lo use. Lea las direcciones y luego pregunte al 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 una ruta por defecto a través del túnel; un cliente de túnel dividido instala prefijos privados concretos. Ambos informan Connected, y un script que solo comprueba el estado se ejecutará tan contento por el camino equivocado. Detener un túnel no elimina necesariamente rutas que instaló otro cliente, y esa es una forma de que una máquina acabe con un servicio conectado y una ruta obsoleta a la vez. Mire el destino que le importa, no la tabla de rutas entera.
Los nombres son un problema aparte
Otras máquinas no pueden alcanzar el Mac por nombre mientras su dirección funciona, y eso se reporta como una avería de VPN. El nombre local del host, el nombre del host y el registro DNS son tres cosas distintas. scutil --get LocalHostName muestra el nombre de Bonjour; sudo scutil --set HostName mac-office establece el nombre que informa el sistema.
Ninguno de los dos ajustes crea un registro en la zona de la oficina. Si otros hosts tienen que resolver el nombre mediante DNS, el propietario de la zona debe añadirlo, o el script debería usar la dirección en su lugar. Establecer un nombre estable hace coherentes los anuncios; no hace que el resolutor responda.
Anote el identificador del servicio y la forma esperada de la ruta juntos en el script, y compruebe ambos antes de la copia. Un túnel activo y enrutado mal falla exactamente igual que ninguno, y la línea de registro que dice Connected enviará a la siguiente persona a buscar en el lugar equivocado.