VPN bloqué sur Connecting en mode avion : trouver la liaison montante
Un client qui reste sur Connecting en mode avion n’a peut-être tout simplement aucune liaison montante. Séparez l’état de la radio, l’association, la connexion au portail et la politique de blocage.
Le téléphone affiche l’icône avion, le client VPN est sur Connecting depuis deux minutes, et le profil est correct. Cela fonctionnait il y a une heure dans le même bâtiment. Rien n’est cassé : un VPN est une connexion portée par un autre réseau, et le mode avion vient de retirer le réseau qui la portait. Le client réessaie sans cesse, parce que c’est ce qu’il fait sans liaison montante.
Ce qui rend la chose déroutante, c’est que le symbole avion ne dit pas si le Wi-Fi est disponible, et Connecting ne dit pas si le client s’authentifie ou attend simplement. Séparez ces deux lectures et le diagnostic prend une minute.
Le symbole avion n’est pas un rapport radio
Sur les appareils Android compatibles, le Wi-Fi et le Bluetooth peuvent rester activés en mode avion, et l’appareil se souvient du choix que vous avez fait la dernière fois. Le guide de Google concernant le mode avion sur Pixel décrit exactement ce comportement. L’icône peut donc signifier que le cellulaire est coupé, et rien d’autre.
Vérifiez l’état réel plutôt que le glyphe. adb shell settings get global airplane_mode_on renvoie 0 ou 1 pour le mode lui-même, et adb shell dumpsys connectivity liste les réseaux que l’appareil possède à cet instant, avec leur statut de validation. Ces deux sorties ensemble répondent à la question que l’icône ne peut pas.
Si le Wi-Fi est coupé, ou activé mais associé à rien, il n’y a aucun chemin vers le point de terminaison du VPN et aucune quantité de reconnexions n’en créera un. C’est le cas qui mérite d’être écarté en premier, car c’est le seul où le correctif se trouve hors de l’application VPN.
Ce que Connecting signifie vraiment
Un client peut conserver un profil enregistré, afficher son nom et faire tourner un indicateur sans avoir contacté quoi que ce soit. La configuration est locale. Établir un tunnel exige un serveur joignable, une poignée de main aboutie et une interface par laquelle router. Seule cette dernière partie a besoin d’un réseau fonctionnel, ce qui explique pourquoi les deux premières peuvent sembler réussir avec la radio coupée.
L’indicateur est donc compatible avec au moins trois situations différentes : aucune liaison montante, une liaison montante qui n’atteint pas le point de terminaison, et une liaison montante qui l’atteint mais dont l’authentification échoue. Elles se ressemblent à l’écran et diffèrent complètement dans un journal. C’est pourquoi le premier artefact utile dans tous ces cas est le journal, pas une nouvelle tentative.
La documentation VPN d’Android trace elle-même la même frontière entre l’établissement de la connexion et les politiques distinctes de toujours actif et de blocage. Cette séparation explique qu’un téléphone puisse paraître protégé hors ligne tout en n’ayant aucun tunnel.
Quatre états à distinguer
Les quatre états ci-dessous sont ceux qu’il vaut la peine de nommer, car l’écran les rend de façon identique.
| State | What you will see | What to do |
|---|---|---|
| Airplane mode, Wi-Fi off | No networks in dumpsys, VPN retries forever | Turn Wi-Fi on, or accept that the tunnel cannot exist |
| Wi-Fi on, not associated | Interface exists, no default network | Join the access point |
| Associated, not validated | Network listed, captive-portal flag set | Complete the portal sign-in, then reconnect |
| Validated, tunnel down | Internet works, VPN fails or blocks | Debug the tunnel, not the radio |
La troisième ligne attrape la plupart des gens dans les hôtels et les aéroports. L’association n’est pas une admission : un portail qui n’a pas laissé passer le téléphone acceptera volontiers le mot de passe Wi-Fi puis refusera de faire passer le trafic vers le point de terminaison du VPN. Se connecter d’abord via le navigateur, tunnel coupé, est généralement la seule issue.
Pourquoi le blocage fait paraître les choses pires
Si le VPN toujours actif et le blocage des connexions sans VPN sont tous deux activés, chaque application couverte est bloquée dès que le tunnel n’est pas monté. C’est la fonctionnalité qui travaille, pas une seconde panne. Le symptôme passe d’une application qui échoue à tout qui échoue, ce qui se lit comme un problème bien plus grave.
Cela explique aussi la séquence que les gens lisent de travers : mode avion activé, pas de liaison montante, applications bloquées, le VPN affiche connecting. Le blocage était la politique faisant son travail. Désactiver la politique pour tester la liaison montante retire la protection que vous vouliez sans doute et ne vous apprend rien.
Vérifiez plutôt l’étendue. Quelles applications sont couvertes, lesquelles sont exclues, et si le profil est par utilisateur ou pour tout l’appareil. Une tâche qui lance l’application VPN dès que le Wi-Fi apparaît est un déclencheur, pas une garantie qu’aucun paquet n’est parti avant son exécution.
Un ordre de diagnostic qui met fin aux suppositions
Travaillez de bas en haut. Confirmez le mode, confirmez qu’un réseau existe, qu’il est validé, qu’il peut atteindre quelque chose hors du sous-réseau local, et seulement alors regardez le client. adb shell ping -c 3 1.1.1.1 est un test grossier, mais il sépare un chemin manquant d’un chemin qui existe pendant que le tunnel est mécontent.
Si le ping échoue alors qu’un réseau est listé, le problème est en amont du VPN et aucun réglage du client n’y changera rien. Si le ping réussit et que le tunnel ne s’établit toujours pas, capturez le journal du client à cet instant : l’erreur distinguera un délai d’attente d’un rejet d’authentification, et ces deux choses n’ont rien en commun.
Terminez en rétablissant l’état voulu : Wi-Fi autorisé en mode avion si c’est votre configuration habituelle, le portail terminé et la politique de blocage réactivée. Reconnectez-vous ensuite une fois et confirmez que le tunnel monte tout seul, car une configuration qui ne fonctionne qu’après des tentatives manuelles échouera de nouveau au prochain démarrage.