Koble fra én OpenVPN GUI-profil, ikke alle tunneler
En GUI-styrt tunnel trenger en GUI-kommando, en tjenestestyrt tunnel trenger tjenestekontroll. Avgjør hvilket program som eier profilen før du skriptlegger noe.
Et frakoblingsskript feiler vanligvis av én grunn: det henvender seg til feil eier. En tunnel som styres av fellesskapets OpenVPN GUI, tilhører den GUI-økten, en tunnel som startes av en Windows-tjeneste tilhører tjenesten, og OpenVPN Connect tilhører ingen av dem. Gå gjennom disse kontrollene i rekkefølge og stopp når eieren er uklar. Å sende en kill-kommando fordi eieren var tvetydig, er nettopp hvordan frakoblingen av én profil blir et avbrudd for hele stedet.
For en GUI-styrt tilkobling er den nyttige kommandoen en melding til GUI-et, ikke et signal til openvpn.exe.
Finn først eieren
Se hvilket program som faktisk viser den tilkoblede tilstanden før du skriver noe. Et ikon i systemkurven betyr at GUI-økten eier den. En tjenestepost betyr at tjenesten gjør det. Et eget programvindu med sin egen profilliste betyr ingen av dem, og dets eget versjonsspesifikke grensesnitt gjelder.
Kontroller også kontoen og skrivebordsøkten. En planlagt oppgave som kjører som en annen bruker, eller i en ikke-interaktiv økt, bør ikke antas å styre det GUI-et en innlogget person ser. Denne uoverensstemmelsen gir en kommando som avsluttes rent og ikke endrer noe, og det er den dyreste typen feil å feilsøke fra en logg.
Send deretter eierens egen frakobling
Når GUI-et er installert på stien fra eksempelet og det finnes en profil som heter office, er hele kommandoen én linje:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --command disconnect officeErstatt med din faktiske installasjonssti og det nøyaktige konfigurasjonsnavnet, inkludert store og små bokstaver slik GUI-et viser dem. Prosjektets kommandodokumentasjon lister opp de støttede GUI-kontrollene, og dette eksempelet tilhører bare OpenVPN GUI — det er ikke en kommando for hvert program med OpenVPN i navnet.
For en tjenesteeid tunnel er riktig kontroll tjenesten, ikke GUI-binæren. Undersøk den installerte tjenesten og profilene den styrer før du stopper noe, fordi en stopp kan ta ned flere tunneler samtidig, og du får ikke et resultat per profil tilbake.
Kontroller at ingenting annet faller
GUI-et dokumenterer også kommandoen disconnect_all, og rekkevidden er nettopp grunnen til at den er feil verktøy for et skript som bare skal stoppe office. Hvis du fristes til å bruke den for enkelhets skyld, spør hva annet som er tilkoblet på den maskinen og hvordan brukeren vil merke det.
taskkill /F /IM openvpn.exe er verre på to måter. Den velger prosesser etter navnet på kjørbar fil, og den tvinger frem avslutning, så den uttrykker verken et profilnavn eller eierens normale frakoblingssekvens. Å kalle det en pen avslutning skjuler begge problemene bak én enkelt utgangsstatus.
Uansett hvilken vei du velger, kontroller omfanget av påvirkningen før endringen: list opp de tilkoblede profilene, noter hvilke som skal overleve, og kontroller dem igjen etterpå.
Bekreft tilstanden, ikke utgangskoden
Etter å ha bedt om frakoblingen, les tilstanden til den navngitte tilkoblingen gjennom eieren i stedet for å stole på kommandoens returverdi. Hvis neste steg trenger nettverket etter nedrivingen, vent på den tilstandsendringen med en eksplisitt tidsavbrudd i stedet for å anta at oppryddingen var ferdig da prosessen kom tilbake. Et skript som løper om kapp med nedrivingen, vil feile av og til, og VPN-et får skylden.
Hvis tilstanden aldri endres, er eieren sannsynligvis ikke den du henvendte deg til. Kontroller økten og kontoen på nytt før du eskalerer til en sterkere kommando.
Hva du bør legge i loggen
Logg profilnavnet, eieren du henvendte deg til og oppstartskonteksten, i tillegg til den resulterende tilstanden. Ikke tøm hele konfigurasjonen eller påloggingsinformasjon i oppgaveloggen, og ikke logg kommandolinjen hvis den inneholder en sti til en fil med hemmeligheter.
En feilmelding som navngir profilen og konteksten er nok for at neste person kan gjenskape problemet. En logg som bare registrerer en generisk utgangskode, sender dem tilbake til starten, og det er nettopp der gjettingen begynner på nytt.