«A VPN está activa?» son en realidade tres preguntas nunha soa frase. Cal delas necesita o seu código é a primeira decisión, e é a que a maioría das implementacións salta. Existe un túnel neste dispositivo, o tráfico cara a esta destinación sae a través del, ou o extremo remoto responde coa identidade que vostede espera. Escolla a propiedade, logo escolla o sinal que a mide e, por último, diga no rexistro cal mediu realmente.

Tres propiedades, tres sinais

Comprimidas a unha liña cada unha, as tres preguntas teñen tres respostas distintas. A táboa de abaixo é a decisión mesma, non un resumo dela.

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 a última fila devagar. Un host privado que responde demostra que algo respondeu, non que a resposta chegase polo túnel, e non di nada sobre quen está ao outro lado. Se a propiedade que necesita é a ruta, mida a ruta.

Existencia: o estado propio da plataforma

Windows responde a isto para os perfís nativos mediante a API de Remote Access Service. RasEnumConnections enumera o que está conectado, RasGetConnectStatus informa do estado dunha entrada e RasGetLinkStatistics engade velocidade, contadores de bytes e antigüidade da conexión. Os límites son o punto: OpenVPN, WireGuard e os clientes de fabricantes nunca rexistran unha conexión RAS, así que un túnel san dese tipo mostra unha lista baleira e o código inxenuo informa del como caído.

Os escritorios Linux expoñen a mesma propiedade mediante NetworkManager sobre D-Bus, onde PropertiesChanged no obxecto de conexión VPN converte a comprobación nun evento e a propiedade State informa de cando a ligazón acada o estado conectado. Desde unha consola, nmcli connection show --active le a mesma información, que é o que vostede quere mentres depura. macOS garda esa lista no marco System Configuration, con scutil como a súa vista de liña de ordes. As tres describen unha conexión que xestiona a plataforma, e as tres calan ante un túnel que non xestiona.

Ruta: a onde vai realmente o paquete

A coincidencia de nomes é o atallo ao que todos recorren primeiro: enumere as interfaces, probe a cadea contra tun, tap, ppp ou ipsec e tome un acerto como proba. É unha heurística, e o conxunto de interfaces pode parecer o mesmo haxa ou non algo movéndose por el. As compilacións antigas de iOS respondían así e as posteriores deixaron de facelo, porque as interfaces visibles xa non distinguían os dous estados.

O que o substituíu alí é o dicionario de proxy do sistema. Mentres hai unha VPN conectada, a chamada de axustes de proxy devolve claves acoutadas ás interfaces relacionadas co túnel, e sen nada conectado o dicionario volve baleiro. É unha afirmación máis feble do que parece, porque rexistra a crenza do sistema de que existe un túnel, non que destinación o usa.

Android ten a súa propia versión da trampa: a difusión vpn.connectivity chega a receptores declarados no manifesto nalgunhas compilacións e a receptores rexistrados en tempo de execución noutras. Trátea como mellor esforzo e mantén unha sonda directa detrás.

Cando a destinación é o que importa, pregunte á táboa de enrutamento en lugar de á lista de adaptadores. As heurísticas de porta de enlace predeterminada rompen en máquinas con varias redes e en túneles que instalan a súa propia porta de enlace.

Identidade: sondar o extremo remoto

Un bucle que envía un eco ICMP ao extremo remoto cada poucos segundos é a comprobación máis barata deste tipo, e falla nunha dirección útil. Apúnteo a un enderezo que só exista dentro da rede privada, porque un público responde por calquera ligazón ascendente que funcione e non demostra nada. Onde se filtra ICMP, unha conexión TCP breve ao porto do servizo fai o mesmo traballo.

Unha comprobación do lado do servidor ten exactamente un sinal dispoñible: o enderezo de orixe da conexión. Manter o inventario de rangos é traballo de mantemento, e non pode separar un túnel de calquera outra rede que casualmente use o mesmo bloque.

A política grossa pode convivir con iso. A identidade non, así que autentique o cliente en lugar de confiar en de onde parecen vir os seus paquetes.

Rexistre a categoría, non o veredicto

Manteña as categorías de fallo separadas no rexistro: ningunha interface, interface presente pero destinación inalcanzable, destinación alcanzable pero autenticación rexeitada. Son tres propietarios distintos, e cada un abre unha investigación diferente.

Colapsalas nun só «VPN caída» envía o informe a un equipo que non pode arranxalo. A categoría é a saída útil; o veredicto é o que o fai incorrecto.

Artigos relacionados