«¿Está activa la VPN?» son en realidad tres preguntas en una sola frase. Cuál de ellas necesita su código es la primera decisión, y es la que la mayoría de las implementaciones se salta. ¿Existe un túnel en este dispositivo, el tráfico hacia esta destinación sale a través de él, o el extremo remoto responde con la identidad que usted espera. Elija la propiedad, luego elija la señal que la mide y, por último, diga en el registro cuál midió realmente.

Tres propiedades, tres señales

Comprimidas a una línea cada una, las tres preguntas tienen tres respuestas distintas. La tabla de abajo es la decisión misma, no un resumen de ella.

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

Lea la última fila despacio. Un host privado que responde demuestra que algo respondió, no que la respuesta llegara por el túnel, y no dice nada sobre quién está al otro lado. Si la propiedad que necesita es la ruta, mida la ruta.

Existencia: el estado propio de la plataforma

Windows responde a esto para los perfiles nativos mediante la API de Remote Access Service. RasEnumConnections enumera lo que está conectado, RasGetConnectStatus informa del estado de una entrada y RasGetLinkStatistics añade velocidad, contadores de bytes y antigüedad de la conexión. Los límites son el punto: OpenVPN, WireGuard y los clientes de fabricantes nunca registran una conexión RAS, así que un túnel sano de ese tipo muestra una lista vacía y el código ingenuo lo informa como caído.

Los escritorios Linux exponen la misma propiedad mediante NetworkManager sobre D-Bus, donde PropertiesChanged en el objeto de conexión VPN convierte la comprobación en un evento y la propiedad State informa de cuándo el enlace alcanza el estado conectado. Desde un intérprete de órdenes, nmcli connection show --active lee la misma información, que es lo que usted quiere mientras depura. macOS guarda esa lista en el marco System Configuration, con scutil como su vista de línea de órdenes. Las tres describen una conexión que la plataforma gestiona, y las tres callan ante un túnel que no gestiona.

Ruta: adónde va realmente el paquete

La coincidencia de nombres es el atajo al que todos recurren primero: enumere las interfaces, pruebe la cadena contra tun, tap, ppp o ipsec y tome un acierto como prueba. Es una heurística, y el conjunto de interfaces puede parecer el mismo haya o no algo moviéndose por él. Las compilaciones antiguas de iOS respondían así y las posteriores dejaron de hacerlo, porque las interfaces visibles ya no distinguían los dos estados.

Lo que lo sustituyó allí es el diccionario de proxy del sistema. Mientras hay una VPN conectada, la llamada de ajustes de proxy devuelve claves acotadas a las interfaces relacionadas con el túnel, y sin nada conectado el diccionario vuelve vacío. Es una afirmación más débil de lo que parece, porque registra la creencia del sistema de que existe un túnel, no qué destinación lo usa.

Android tiene su propia versión de la trampa: la difusión vpn.connectivity llega a receptores declarados en el manifiesto en algunas compilaciones y a receptores registrados en tiempo de ejecución en otras. Trátela como mejor esfuerzo y mantenga una sonda directa detrás.

Cuando la destinación es lo que importa, pregunte a la tabla de enrutamiento en lugar de a la lista de adaptadores. Las heurísticas de puerta de enlace predeterminada fallan en máquinas con varias redes y en túneles que instalan su propia puerta de enlace.

Identidad: sondear el extremo remoto

Un bucle que envía un eco ICMP al extremo remoto cada pocos segundos es la comprobación más barata de este tipo, y falla en una dirección útil. Apúntelo a una dirección que solo exista dentro de la red privada, porque una pública responde por cualquier enlace ascendente que funcione y no demuestra nada. Donde se filtra ICMP, una conexión TCP breve al puerto del servicio hace el mismo trabajo.

Una comprobación del lado del servidor tiene exactamente una señal disponible: la dirección de origen de la conexión. Mantener el inventario de rangos es trabajo de mantenimiento, y no puede separar un túnel de cualquier otra red que casualmente use el mismo bloque.

La política tosca puede convivir con eso. La identidad no, así que autentique al cliente en lugar de confiar en de dónde parecen venir sus paquetes.

Registre la categoría, no el veredicto

Mantenga las categorías de fallo separadas en el registro: ninguna interfaz, interfaz presente pero destinación inalcanzable, destinación alcanzable pero autenticación rechazada. Son tres propietarios distintos, y cada uno abre una investigación diferente.

Colapsarlas en un solo «VPN caída» envía el informe a un equipo que no puede arreglarlo. La categoría es la salida útil; el veredicto es lo que lo hace incorrecto.

Artículos relacionados