Alguien pregunta si la VPN está activa, y tres personas distintas quieren decir tres cosas distintas. Un operador quiere decir que el perfil de Office ha terminado de autenticarse. Un planificador quiere decir que la API privada responderá. Una revisión de seguridad quiere decir que esta petición concreta salió por la ruta protegida. Un script que busca con grep en la tabla de rutas el nombre de una interfaz no responde de forma fiable a ninguna de ellas.

Así que la lista de comprobación empieza antes de que se ejecute ningún comando: nombra el sujeto de la comprobación. Todo lo que viene después es elegir la interfaz que realmente puede informarlo.

Nombra el sujeto antes del comando

Escribe la pregunta como un predicado con sujeto. «El perfil de Office está conectado» es verificable y tiene un responsable que puede responderla. «Este trabajo puede alcanzar la API interna» es un segundo predicado con un modo de fallo distinto. «Esta petición usa la ruta protegida» es un tercero, y es el único que habla de un solo flujo y no de toda la máquina.

Mezclarlos produce automatización que miente con confianza. Un trabajo que comprueba el estado del perfil y luego da por hecho que la API está lista avisará a alguien en la capa equivocada, y un trabajo que hace ping a la API y lo presenta como prueba de un túnel no distingue una VPN que funciona de un portátil que resulta estar en la red de la oficina.

Un perfil: pregunta a quien lo posee

Para un servicio nativo de Mac, los controles de conexión de red de scutil informan exactamente de esto. Leen el estado de una configuración con nombre en lugar de inferir algo de una interfaz.

scutil --nc list
scutil --nc status "Office VPN"

El nombre del perfil en ese comando tiene que ser el real de la salida de la lista, no una suposición. Es una ruta de solo lectura para servicios nativos, y no garantiza que un cliente de terceros aparezca ahí; un proveedor que gestiona su propio túnel necesita su propia interfaz de estado compatible. Comprueba la lista antes de escribir la llamada de estado, para que un nombre ausente falle de forma visible en vez de coincidir en silencio con nada.

Dentro de una app Network Extension, lee el estado de los objetos de gestor y de conexión en lugar del sistema. Cuidado con el alcance: cargar configuraciones guardadas solo devuelve las creadas por la app que llama, así que un resultado vacío significa «ninguna mía», no «ninguna VPN en este Mac». Distingue una consulta fallida de un estado desconectado confirmado, y trata los estados transitorios como resultados propios en vez de reintentar una conexión que ya está levantándose.

Un trabajo: la disponibilidad es un predicado aparte

Si la pregunta es si un trabajo puede continuar, prueba la dependencia real del trabajo después de que el propietario de la conexión informe del estado previsto. Una comprobación de disponibilidad acotada contra el recurso privado es la forma correcta: demuestra lo que el trabajo necesita y nada más.

Sigue sin poder demostrar que todas las peticiones de la máquina usen el túnel, y no debería informarse como si pudiera. Del mismo modo, un recurso que responde por la red ordinaria no es prueba de una VPN, y por eso las dos comprobaciones siguen separadas incluso cuando ambas tienen éxito.

Cuando el trabajo requiere de verdad una ruta protegida, ese requisito necesita el diseño de aplicación del despliegue: enrutamiento, exclusiones de túnel dividido, una regla de cortafuegos o un requisito a nivel de aplicación. La disponibilidad de un extremo es un hecho sobre un servidor. La aplicación es un hecho sobre la configuración del cliente, y una cosa no demuestra la otra.

Un flujo: inspecciona la ruta elegida

Para un solo flujo, mira el destino, la familia de direcciones y el contexto de origen con el diagnóstico de enrutamiento que informa de la ruta seleccionada para ese destino concreto. Esa salida nombra la interfaz y la dirección de origen realmente usadas, lo que es una afirmación mucho más fuerte que una entrada de ruta por defecto.

Las comprobaciones amplias del navegador responden a una pregunta completamente distinta. Un resultado de IP pública describe cómo se vio una petición desde el punto de vista de un servidor, y no dice nada sobre DNS privado, aplicaciones excluidas o un segundo contexto de red que otro proceso está usando.

Devuelve un resultado que el llamador pueda usar

Elige una forma de retorno que encaje con el predicado: un estado de perfil con nombre, un veredicto de disponibilidad del recurso o un desconocido explícito con la evidencia que lo produjo. Mantén la identidad de la configuración y el motivo del fallo junto al veredicto.

Ese último hábito es lo que marca la diferencia entre automatización que ayuda y automatización que esconde problemas. «Office VPN: desconectada, el último intento falló en la autenticación» dice a un operador dónde mirar. «La VPN está caída» invita a reinstalar, y «interfaz encontrada» invita a un falso todo va bien.

La referencia de Network Extension sobre cargar configuraciones de túnel guardadas es el lugar donde confirmar el alcance de la app que llama antes de construir nada encima.

Artículos relacionados