Skript na odpojenie zvyčajne zlyhá z jedného dôvodu: obracia sa na nesprávneho vlastníka. Tunel spravovaný komunitným OpenVPN GUI patrí relácii tohto GUI, tunel spustený službou Windows patrí službe a OpenVPN Connect nepatrí ani jednému z nich. Prejdite tieto kontroly v poradí a zastavte sa, keď je vlastník nejasný. Poslať príkaz kill preto, že vlastník bol nejednoznačný, je presne to, ako sa z odpojenia jedného profilu stane výpadok celého areálu.

Pri pripojení spravovanom GUI je užitočným príkazom správa GUI, nie signál openvpn.exe.

Najprv určte vlastníka

Skôr než čokoľvek napíšete, pozrite sa, ktorý program skutočne zobrazuje stav pripojenia. Ikona v oznamovacej oblasti znamená, že ho vlastní relácia GUI. Záznam služby znamená, že ho vlastní služba. Samostatné okno aplikácie s vlastným zoznamom profilov neznamená ani jedno a platí preň jej vlastné rozhranie špecifické pre verziu.

Skontrolujte aj účet a reláciu na ploche. Naplánovanú úlohu bežiacu pod iným používateľom alebo v neinteraktívnej relácii nemožno považovať za správcu GUI, ktoré vidí prihlásený človek. Tento nesúlad vytvorí príkaz, ktorý skončí čisto a nič nezmení, a to je najdrahší druh poruchy pri hľadaní príčiny z logu.

Potom pošlite vlastné odpojenie vlastníka

Keď je GUI nainštalované na ceste z príkladu a existuje profil s názvom office, celý príkaz je jeden riadok:

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

Nahraďte ho svojou skutočnou inštalačnou cestou a presným názvom konfigurácie vrátane veľkosti písmen, ako ho zobrazuje GUI. Dokumentácia príkazov projektu uvádza podporované ovládacie prvky GUI a tento príklad patrí výhradne OpenVPN GUI — nie je to príkaz pre každú aplikáciu, ktorá má v názve OpenVPN.

Pri tuneli vlastnenom službou je správnym ovládaním služba, nie binárka GUI. Prezrite si nainštalovanú službu a profily, ktoré spravuje, skôr než čokoľvek zastavíte, pretože zastavenie môže zraziť niekoľko tunelov naraz a nedostanete výsledok po jednotlivých profiloch.

Skontrolujte, že nič iné nespadne

GUI dokumentuje aj príkaz disconnect_all a jeho rozsah je presne dôvodom, prečo je to nesprávny nástroj pre skript, ktorý má zastaviť len office. Ak vás láka použiť ho pre jednoduchosť, opýtajte sa, čo ďalšie je na tom stroji pripojené a ako si to používateľ všimne.

taskkill /F /IM openvpn.exe je horší v dvoch ohľadoch. Vyberá procesy podľa názvu spustiteľného súboru a vynucuje ukončenie, takže nevyjadruje ani názov profilu, ani obvyklý sled odpojenia vlastníka. Nazvať to čistým vypnutím znamená skryť oba problémy za jediným návratovým kódom.

Nech si vyberiete akúkoľvek cestu, overte rozsah dopadu pred zmenou: vypíšte pripojené profily, poznačte si, ktoré majú prežiť, a potom ich znova skontrolujte.

Potvrďte stav, nie návratový kód

Po požiadaní o odpojenie čítajte stav pomenovaného pripojenia cez jeho vlastníka, namiesto toho, aby ste verili návratovej hodnote príkazu. Ak ďalší krok po rozobratí potrebuje sieť, čakajte na túto zmenu stavu s explicitným časovým limitom, namiesto toho, aby ste predpokladali, že upratovanie sa skončilo, keď sa proces vrátil. Skript, ktorý predbieha rozobratie, bude občas zlyhávať a vina padne na VPN.

Ak sa stav nikdy nezmení, vlastník pravdepodobne nie je ten, na ktorého ste sa obrátili. Znova skontrolujte reláciu a účet, kým prejdete k silnejšiemu príkazu.

Čo zapísať do logu

Zaznamenajte názov profilu, vlastníka, na ktorého ste sa obrátili, kontext spustenia a výsledný stav. Nevysypávajte celú konfiguráciu ani prihlasovacie údaje do logu úlohy a nezapisujte príkazový riadok, ak obsahuje cestu k súboru s tajomstvami.

Chybová správa, ktorá pomenuje profil a kontext, stačí na to, aby ďalší človek problém reprodukoval. Log, ktorý zaznamená len všeobecný návratový kód, ich pošle späť na začiatok, a práve tam sa hádanie začína znova.

Súvisiace články