Een automatisering die maandenlang betrouwbaar verbond, werkt na een clientupdate niet meer, terwijl hetzelfde profiel met de hand nog steeds verbindt. Dat patroon wijst op het besturingscontract en niet op de VPN-server. Iemand heeft gewijzigd welke actie de app accepteert, of welke identificatie hij verwacht, en de taak stuurt nog steeds de oude. De koppeling opnieuw opbouwen kost minder tijd dan de server opnieuw controleren.

Het contract hoort bij één app en één versiebereik

OpenVPN Connect en OpenVPN for Android zijn verschillende toepassingen, en een intent die het ene pakket noemt, doet niets in de andere. Controleer voordat je de taak aanraakt welke client is geïnstalleerd en welke versie het gedrag heeft veroorzaakt waarmee je vergelijkt. Voor Connect op Android 3.3.2 of nieuwer verwacht de gedocumenteerde Tasker-integratie een profiel-ID. Oudere instructies die een weergavenaam vooraf laten gaan door AS of PC beschrijven een eerder contract, en die in een huidige taak kopiëren is de gebruikelijke reden dat er niets gebeurt.

Die versiegrens verklaart de meeste meldingen dat het vroeger werkte. De app heeft de functie niet stukgemaakt; hij heeft gewijzigd wat de functie accepteert. Behandel het versiebereik als onderdeel van het contract waartegen je schrijft.

Waar de identificatie vandaan komt

Open het bedoelde profiel in Connect en kopieer het profiel-ID uit de details van het profiel zelf. Gebruik die waarde in plaats van een naam die je uit de lijst herkent, want de naam is een label en de identificatie is waarop de app vergelijkt. De verbindingsvelden van de actie Send Intent in Tasker lijken op het blok hieronder, waarbij alleen de identificatie is vervangen. Houd ook de app-instantie van het persoonlijke of werkprofiel consistent.

Action: net.openvpn.openvpn.CONNECT
Extra: net.openvpn.openvpn.AUTOSTART_PROFILE_ID:'PROFILE_ID'
Extra: net.openvpn.openvpn.AUTOCONNECT:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

Een kopie in het werkprofiel met dezelfde pakketnaam en een ander opgeslagen profiel accepteert de intent en vindt geen passend profiel, wat op een kapotte taak lijkt en niet op een bereikfout. Wordt het profiel opnieuw geïmporteerd of vervangen, beschouw de identificatie dan als verdacht en controleer hem opnieuw. Opnieuw importeren levert vaak een nieuw profielitem op, zelfs als de weergavenaam ongewijzigd blijft. Controleer de identificatie voordat je iets anders wijzigt.

Laat niet-verwante velden leeg zoals gedocumenteerd. Velden voor categorie, MIME-type en gegevens die de gids niet vraagt, kunnen veranderen hoe Android de intent oplost, en een intent die anders wordt opgelost, kan de app starten zonder je profiel te starten.

Wat de actie doet en wat ze aan jou overlaat

Het sturen van de verbindings-intent vraagt de app om een profiel te starten. Hij omzeilt niet de autorisatie die dat profiel vereist. Connect kan nog steeds een prompt tonen, en daarom gaat het gedocumenteerde autonome geval uit van geen verdere autorisatie en geen opgeslagen verbindingsgegevens. De verleiding is die grens weg te nemen door wachtwoorden of geheimen van de privésleutel in een gedeelde Tasker-export in te sluiten.

Doe dat niet. Een taakexport is een tekstbestand dat mensen in chatthreads kopiëren, en geheimen die daar staan, zijn onthuld op het moment dat het wordt gedeeld. Gebruik de opgeslagen verbindingsgegevens van de app zelf als het profiel die nodig heeft, en laat MFA-prompts prompts blijven. Alles wat de prompt vermijdt door het antwoord op te slaan, heeft het geheim verplaatst in plaats van het probleem opgelost.

De ontkoppelingskant heeft zijn eigen gedocumenteerde actie, en het is geen truc tegen de client:

Action: net.openvpn.openvpn.DISCONNECT
Extra: net.openvpn.openvpn.STOP:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

Verbinding maken met een opzettelijk niet-bestaand profiel om een ontkoppeling af te dwingen is het soort workaround dat in oude threads opduikt en na een update stil faalt. Gebruik de expliciete actie.

Controleer de status voordat de volgende stap loopt

Een geslaagde intent-start bewijst dat het verzoek is afgeleverd, niet dat er een tunnel bestaat. Als de taak daarna een interne toepassing opent,heeft die stap een gereedheidsvoorwaarde met een begrensde time-out nodig. Een onmiddellijke actie na het sturen zal uiteindelijk tegen een prompt aflopen.

$ adb shell cmd package resolve-activity --brief net.openvpn.openvpn
net.openvpn.openvpn/net.openvpn.unified.MainActivity
$ adb shell dumpsys activity activities | grep -i openvpn

De resolve-query bevestigt dat het pakket en de activiteit waarop je richt op dat apparaat bestaan, wat een typefout in het klasseveld uitsluit. De activity-dump laat zien wat er na het lopen van je taak werkelijk op de voorgrond staat, en het is de goedkoopste manier om te zien of de app een prompt heeft geopend in plaats van te verbinden. Voer beide uit na een mislukte taak in plaats van te raden welk veld fout is. Een afwijking in de klassenaam geeft onmiddellijk een fout, terwijl een ontbrekend profiel helemaal geen zichtbare fout geeft.

Bepaal het eigenaarschap van de ontkoppeling voordat je de taak uitlevert. Een snelkoppeling die een tunnel afbreekt waarvan een andere werktaak afhangt, levert een supportticket op dat in niets op zijn oorzaak lijkt. Twee automatiseringen houden die dezelfde client besturen, levert een race op die je niet uit de logs kunt debuggen, dus verwijder de verouderde actie zodra de nieuwe werkt.

Gerelateerde artikelen