Afbryd én OpenVPN GUI-profil, ikke alle tunneller
En GUI-styret tunnel kræver en GUI-kommando, og en servicestyret tunnel kræver servicekontrol. Afgør hvilket program der ejer profilen, før du skriver noget script.
Et afbrydelsesscript fejler som regel af én grund: det henvender sig til den forkerte ejer. En tunnel, der styres af fællesskabets OpenVPN GUI, tilhører den GUI-session, en tunnel startet af en Windows-tjeneste tilhører tjenesten, og OpenVPN Connect tilhører ingen af dem. Gennemgå disse kontroller i rækkefølge, og stop når ejeren er uklar. At sende en kill-kommando, fordi ejeren var tvetydig, er netop hvordan afbrydelsen af én profil bliver til et nedbrud på hele stedet.
For en GUI-styret forbindelse er den nyttige kommando en besked til GUI’et, ikke et signal til openvpn.exe.
Find først ejeren
Se hvilket program der faktisk viser den tilsluttede tilstand, før du skriver noget. Et ikon i proceslinjen betyder, at GUI-sessionen ejer det. En servicepost betyder, at tjenesten gør. Et separat programvindue med sin egen profilliste betyder ingen af dem, og dets egen versionsspecifikke grænseflade gælder.
Kontroller også kontoen og skrivebordssessionen. En planlagt opgave, der kører som en anden bruger eller i en ikke-interaktiv session, bør ikke antages at styre det GUI, som en logget ind person kan se. Den uoverensstemmelse giver en kommando, der afsluttes rent og ikke ændrer noget, og det er den dyreste slags fejl at fejlfinde ud fra en log.
Send derefter ejerens egen afbrydelse
Når GUI’et er installeret på stien fra eksemplet, og der findes en profil med navnet office, er hele kommandoen én linje:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeErstat den med din faktiske installationssti og det præcise konfigurationsnavn, inklusive store og små bogstaver, som GUI’et viser det. Projektets kommandodokumentation viser de understøttede GUI-kontroller, og dette eksempel tilhører udelukkende OpenVPN GUI — det er ikke en kommando til ethvert program med OpenVPN i navnet.
For en servicestyret tunnel er den korrekte kontrol tjenesten, ikke GUI-binæren. Undersøg den installerede tjeneste og de profiler, den styrer, før du stopper noget, fordi et stop kan trække flere tunneller ned på én gang, og du får ikke et resultat pr. profil tilbage.
Kontroller, at intet andet falder
GUI’et dokumenterer også kommandoen disconnect_all, og dens rækkevidde er netop grunden til, at den er det forkerte værktøj til et script, der kun skal stoppe office. Hvis du fristes til at bruge den for enkelhedens skyld, så spørg, hvad der ellers er tilsluttet på den maskine, og hvordan brugeren vil opdage det.
taskkill /F /IM openvpn.exe er værre på to måder. Den vælger processer ud fra den kørbare fils navn, og den fremtvinger afslutning, så den udtrykker hverken et profilnavn eller ejerens normale afbrydelsesrækkefølge. At kalde det en yndefuld nedlukning skjuler begge problemer bag én enkelt exitstatus.
Uanset hvilken vej du vælger, skal du kontrollere påvirkningens omfang før ændringen: list de tilsluttede profiler, noter hvilke der skal overleve, og kontroller dem igen bagefter.
Bekræft tilstanden, ikke exitkoden
Når du har anmodet om afbrydelsen, skal du læse den navngivne forbindelses tilstand via dens ejer i stedet for at stole på kommandoens returværdi. Hvis næste trin har brug for netværket efter nedtagningen, så vent på den tilstandsændring med en eksplicit timeout i stedet for at antage, at oprydningen er færdig, når processen er vendt tilbage. Et script, der løber om kap med nedtagningen, vil fejle periodisk, og VPN’et får skylden.
Hvis tilstanden aldrig ændrer sig, er ejeren sandsynligvis ikke den, du henvendte dig til. Kontroller sessionen og kontoen igen, før du eskalerer til en stærkere kommando.
Hvad der skal i loggen
Log profilnavnet, den ejer du henvendte dig til og startkonteksten, plus den resulterende tilstand. Hæld ikke den fulde konfiguration eller legitimationsoplysninger i opgaveloggen, og log ikke kommandolinjen, hvis den indeholder en sti til en fil med hemmeligheder.
En fejlmeddelelse, der navngiver profilen og konteksten, er nok til, at den næste person kan genskabe problemet. En log, der kun registrerer en generisk exitkode, sender dem tilbage til begyndelsen, og det er netop der, gætteriet starter igen.