Un script de deconectare eșuează de obicei dintr-un singur motiv: se adresează proprietarului greșit. Un tunel administrat de OpenVPN GUI al comunității aparține sesiunii acelui GUI, un tunel pornit de un serviciu Windows aparține serviciului, iar OpenVPN Connect nu aparține niciunuia. Parcurgeți aceste verificări în ordine și opriți-vă când proprietarul nu este clar. Trimiterea unei comenzi kill pentru că proprietarul era ambiguu este exact felul în care deconectarea unui profil devine o cădere a întregului sit.

Pentru o conexiune administrată de GUI, comanda utilă este un mesaj către GUI, nu un semnal către openvpn.exe.

Mai întâi, identificați proprietarul

Uitați-vă ce program afișează de fapt starea conectată înainte de a scrie ceva. O pictogramă în zona de notificare înseamnă că sesiunea GUI o deține. O intrare de serviciu înseamnă că serviciul o deține. O fereastră de aplicație separată cu propria listă de profiluri nu înseamnă niciuna dintre ele, iar asupra ei se aplică interfața proprie, specifică versiunii.

Verificați și contul și sesiunea de desktop. O activitate programată care rulează ca alt utilizator, sau într-o sesiune neinteractivă, nu trebuie presupusă ca fiind cea care controlează GUI-ul pe care îl vede o persoană conectată. Această nepotrivire produce o comandă care se termină curat și nu schimbă nimic, iar acesta este cel mai scump tip de defecțiune de depistat dintr-un jurnal.

Apoi trimiteți deconectarea proprie a proprietarului

Dacă GUI-ul este instalat la calea din exemplu și există un profil numit office, întreaga comandă este o singură linie:

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

Înlocuiți-o cu calea reală de instalare și cu numele exact al configurației, inclusiv majusculele și minusculele așa cum le afișează GUI-ul. Documentația comenzilor proiectului enumeră controalele GUI acceptate, iar acest exemplu aparține doar OpenVPN GUI — nu este o comandă pentru fiecare aplicație care are OpenVPN în nume.

Pentru un tunel deținut de un serviciu, controlul corect este serviciul, nu binarul GUI. Inspectați serviciul instalat și profilurile pe care le administrează înainte de a opri ceva, pentru că o oprire poate doborî mai multe tuneluri deodată și nu veți primi un rezultat pe profil.

Verificați că nimic altceva nu cade

GUI-ul documentează și o comandă disconnect_all, iar sfera ei este exact motivul pentru care este instrumentul greșit pentru un script care trebuie să oprească doar office. Dacă sunteți tentat să o folosiți pentru simplitate, întrebați ce altceva este conectat pe acea mașină și cum va observa utilizatorul.

taskkill /F /IM openvpn.exe este mai rău din două puncte de vedere. Selectează procese după numele fișierului executabil și impune terminarea, deci nu exprimă nici un nume de profil, nici secvența normală de deconectare a proprietarului. Să numești asta o oprire curată ascunde ambele probleme în spatele unui singur cod de ieșire.

Orice cale ați alege, verificați amploarea impactului înainte de schimbare: listați profilurile conectate, notați care ar trebui să supraviețuiască și verificați-le din nou după aceea.

Confirmați starea, nu codul de ieșire

După ce solicitați deconectarea, citiți starea conexiunii numite prin proprietarul ei în loc să vă bazați pe valoarea returnată a comenzii. Dacă pasul următor are nevoie de rețea după demontare, așteptați acea schimbare de stare cu un timeout explicit în loc să presupuneți că curățarea s-a terminat când procesul s-a întors. Un script care se întrece cu demontarea va eșua intermitent și vina va cădea pe VPN.

Dacă starea nu se schimbă niciodată, proprietarul probabil nu este cel căruia i v-ați adresat. Verificați din nou sesiunea și contul înainte de a trece la o comandă mai puternică.

Ce să puneți în jurnal

Înregistrați numele profilului, proprietarul căruia i v-ați adresat și contextul de lansare, plus starea rezultată. Nu vărsați configurația completă sau acreditările în jurnalul activității și nu înregistrați linia de comandă dacă aceasta conține o cale către un fișier cu secrete.

Un mesaj de eroare care numește profilul și contextul este suficient pentru ca următoarea persoană să reproducă problema. Un jurnal care notează doar un cod de ieșire generic îi trimite înapoi la început, iar acolo ghicitul reîncepe.

Articole similare