Een verbreekscript mislukt meestal om één reden: het spreekt de verkeerde eigenaar aan. Een tunnel die door de OpenVPN-GUI van de community wordt beheerd, hoort bij die GUI-sessie, een tunnel die door een Windows-service is gestart hoort bij de service, en OpenVPN Connect hoort bij geen van beide. Loop deze controles in volgorde door en stop wanneer de eigenaar onduidelijk is. Een kill-opdracht sturen omdat de eigenaar dubbelzinnig was, is precies hoe het verbreken van één profiel een storing van de hele locatie wordt.

Voor een GUI-beheerde verbinding is de nuttige opdracht een bericht aan de GUI, geen signaal aan openvpn.exe.

Stel eerst de eigenaar vast

Kijk welk programma de verbonden status werkelijk toont voordat je iets schrijft. Een pictogram in het systeemvak betekent dat de GUI-sessie hem bezit. Een service-item betekent dat de service hem bezit. Een apart toepassingsvenster met een eigen profiellijst betekent geen van beide, en daar geldt de eigen versiespecifieke interface.

Controleer ook het account en de desktopsessie. Een geplande taak die als een andere gebruiker of in een niet-interactieve sessie draait, mag niet geacht worden de GUI te besturen die een ingelogd persoon ziet. Die mismatch levert een opdracht op die netjes eindigt en niets verandert, en dat is het duurste soort fout om uit een logboek te achterhalen.

Stuur daarna de eigen verbinding van de eigenaar

Als de GUI op het pad uit het voorbeeld is geïnstalleerd en er een profiel met de naam office is, is de hele opdracht één regel:

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect office

Vervang die door je werkelijke installatiepad en de exacte configuratienaam, inclusief hoofdletters en kleine letters zoals de GUI ze toont. De opdrachtdocumentatie van het project somt de ondersteunde GUI-besturingen op, en dit voorbeeld hoort alleen bij OpenVPN GUI — het is geen opdracht voor elke toepassing met OpenVPN in de naam.

Voor een tunnel die eigendom is van een service is de juiste besturing de service, niet het GUI-binary. Onderzoek de geïnstalleerde service en de profielen die hij beheert voordat je iets stopt, want een stop kan meerdere tunnels tegelijk neerhalen en je krijgt geen resultaat per profiel terug.

Controleer dat er niets anders omvalt

De GUI documenteert ook een opdracht disconnect_all, en de reikwijdte daarvan is precies de reden dat het het verkeerde gereedschap is voor een script dat alleen office mag stoppen. Als je in de verleiding komt het voor eenvoud te gebruiken, vraag dan wat er verder op die machine is verbonden en hoe de gebruiker dat zal merken.

taskkill /F /IM openvpn.exe is op twee manieren slechter. Het selecteert processen op naam van het uitvoerbare bestand en het dwingt beëindiging af, dus het drukt noch een profielnaam noch de normale verbreekvolgorde van de eigenaar uit. Dat een nette afsluiting noemen verbergt beide problemen achter één enkele exitstatus.

Welke weg je ook kiest, controleer de omvang van de impact vóór de wijziging: som de verbonden profielen op, noteer welke moeten overleven en controleer ze daarna opnieuw.

Bevestig de status, niet de exitcode

Lees na het aanvragen van de verbinding de status van de genoemde verbinding via zijn eigenaar in plaats van de retourwaarde van de opdracht te vertrouwen. Als de volgende stap na de afbraak het netwerk nodig heeft, wacht dan op die statuswijziging met een expliciete time-out in plaats van aan te nemen dat het opruimen klaar was toen het proces terugkeerde. Een script dat de afbraak voorbijrent, zal af en toe falen en de VPN krijgt de schuld.

Als de status nooit verandert, is de eigenaar waarschijnlijk niet degene die je hebt aangesproken. Controleer de sessie en het account opnieuw voordat je naar een sterker commando grijpt.

Wat er in het logboek hoort

Log de profielnaam, de eigenaar die je hebt aangesproken en de startcontext, plus de resulterende status. Gooi niet de volledige configuratie of inloggegevens in het taaklogboek, en log de opdrachtregel niet als die een pad naar een bestand met geheimen bevat.

Een foutmelding die het profiel en de context noemt, is genoeg voor de volgende persoon om het probleem te reproduceren. Een logboek dat alleen een algemene exitcode vastlegt, stuurt ze terug naar het begin, en daar begint het gissen opnieuw.

Gerelateerde artikelen