Tunelurile care apar doar după ce cineva se autentifică sunt de obicei lansate de sesiunea acelei persoane, nu de serviciul automat. Vinovatul obișnuit este o comandă rapidă de pornire care lansează openvpn-gui.exe, iar aceasta nu este o instalare defectă. Comanda rapidă lansează o aplicație de desktop în interiorul unei sesiuni de utilizator, cu profilul acelui utilizator, depozitele de certificate ale acelui utilizator și capacitatea acelui utilizator de a răspunde la o solicitare. Nimic din toate acestea nu face conexiunea independentă de un om autentificat, iar exact asta cere un tunel înainte de autentificare.

Simptomul are de obicei trei cauze

Trei tipare arată la fel din exterior și au remedii diferite. Primul este un proprietar de execuție care este o sesiune de utilizator în locul serviciului, adică cazul comenzii rapide de pornire. Al doilea este un profil care se află acolo unde serviciul nu se uită, așa că serviciul pornește, nu găsește nimic și se închide curat. Al treilea este un profil pe care serviciul îl găsește și îl pornește, dar ale cărui credențiale cer o interacțiune pe care niciun serviciu nu o poate oferi.

Identificarea cazului aplicabil cere două citiri: ce este configurat să ruleze serviciul și ce fișiere poate vedea. Ambele sunt o singură comandă fiecare, și niciuna nu deranjează o conexiune activă.

Ce citește de fapt serviciul automat

Serviciul automat Community este un wrapper care scanează directorul de pornire automată configurat, de obicei config-auto din instalare, și lansează un proces OpenVPN pentru fiecare profil potrivit pe care îl găsește. Un profil vizibil în meniul GUI al unui utilizator se află în schimb sub profilul mobil al acelui utilizator, într-un director pe care contul de serviciu nu îl citește. Ghidul serviciului Windows descrie această descoperire și merită citit înainte de a copia ceva, pentru că directorul țintă este o proprietate a instalării, nu o convenție fixă. Prin urmare, copierea unui fișier în folderul GUI nu schimbă nimic pentru serviciu, iar copierea lui în fiecare folder numit config creează duplicate în loc de o soluție.

Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'

Ultima comandă listează ce va vedea de fapt wrapperul, cea mai rapidă cale de a confirma că un profil este în locul greșit. A doua linie arată și contul sub care rulează serviciul, iar acel cont decide ce căi de fișiere și depozite de certificate sunt accesibile.

De ce autentificarea pe desktop funcționează, iar pornirea la boot nu

Succesul pe desktop poate ascunde mult timp o dependență de intrare. O interfață GUI poate colecta o frază de acces pentru cheie, o parolă de cont sau un al doilea factor într-un dialog, pentru că rulează într-o sesiune interactivă cu un desktop vizibil. Un serviciu rulează într-o sesiune fără desktop, așa că o cerere de introducere nu are unde să apară, iar conexiunea eșuează după un timeout care nu seamănă deloc cu o problemă de credențiale.

Accesul la fișiere urmează aceeași regulă. O cheie privată stocată sub profilul utilizatorului, sau un certificat din depozitul personal al utilizatorului, nu este disponibilă unui serviciu care rulează ca mașină. Comparați căile absolute, permisiunile și selecția de certificate făcută de fiecare parte, în loc să presupuneți că același fișier de profil implică același mediu.

O sarcină planificată setată să ruleze indiferent dacă un utilizator este autentificat moștenește o constrângere similară. Poate porni cu succes executabilul GUI și totuși produce un proces care nu obține niciodată credențiale, așa că prezența unui proces în managerul de activități nu este dovada unui tunel funcțional.

Alegeți un singur proprietar și testați ciclul de viață real

Pentru o conexiune care aparține unei persoane autentificate, folosiți comportamentul de pornire automată acceptat de GUI și lăsați serviciul în afara ei. Pentru un tunel care trebuie să existe înainte ca cineva să se autentifice, configurați serviciul, plasați profilul acolo unde îl citește wrapperul și folosiți un mecanism de credențiale nesupravegheat acceptat, cum ar fi o cheie fără frază de acces interactivă sau un fișier de credențiale documentat.

Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'

Testați ciclul de viață care contează: o repornire fără ca nimeni să se autentifice, apoi o reconectare după o schimbare de rețea. Păstrați un singur proprietar pentru conexiune, pentru că două mecanisme de pornire concurente produc de obicei două instanțe care se luptă pentru aceleași rute și aceeași sesiune de server, ceea ce este mai greu de diagnosticat decât oricare mecanism separat.

Articole similare