Proč se OpenVPN spouští po přihlášení, ale ne při startu Windows?
Zástupce ve složce Po spuštění startuje desktopovou aplikaci, nikoli automatickou službu. Zkontrolujte, který zdroj profilu služba čte, než začnete přesouvat soubory.
Tunely, které se objeví až poté, co se někdo přihlásí, obvykle spouští relace tohoto člověka, nikoli automatická služba. Běžným viníkem je zástupce ve složce Po spuštění, který spouští openvpn-gui.exe, a nejde o rozbitou instalaci. Zástupce spouští desktopovou aplikaci uvnitř uživatelské relace, s profilem tohoto uživatele, jeho úložišti certifikátů a jeho schopností odpovědět na výzvu. Nic z toho nečiní připojení nezávislým na přihlášeném člověku, a přesně to tunel před přihlášením vyžaduje.
Symptom má obvykle tři příčiny
Tři vzorce vypadají zvenčí stejně a mají různé opravy. První je vlastník spuštění, kterým je uživatelská relace místo služby, což je případ zástupce po spuštění. Druhý je profil, který žije tam, kam se služba nedívá, takže služba nastartuje, nic nenajde a čistě skončí. Třetí je profil, který služba najde a spustí, ale jeho přihlašovací údaje vyžadují interakci, kterou žádná služba nemůže poskytnout.
Rozpoznat, který případ platí, vyžaduje dvě čtení: co je služba nakonfigurována spouštět a které soubory vidí. Obojí je jeden příkaz a ani jedno neruší běžící připojení.
Co automatická služba skutečně čte
Automatická služba Community je obal, který prohledá svůj nakonfigurovaný adresář automatického spouštění, obvykle config-auto v instalaci, a spustí proces OpenVPN pro každý nalezený odpovídající profil. Profil viditelný v nabídce GUI uživatele žije místo toho pod roamingovým profilem tohoto uživatele, v adresáři, který servisní účet nečte. Průvodce službou Windows toto zjišťování popisuje a stojí za to si ho přečíst před jakýmkoli kopírováním, protože cílový adresář je vlastnost instalace, nikoli pevná konvence. Kopírování souboru do složky GUI tedy pro službu nic nemění a kopírování do každé složky zvané config vytváří duplikáty, nikoli opravu.
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'
Poslední příkaz vypíše, co obal skutečně uvidí, což je nejrychlejší způsob, jak potvrdit, že je profil na špatném místě. Druhý řádek také ukazuje účet, pod kterým služba běží, a tento účet rozhoduje o tom, které cesty k souborům a úložiště certifikátů jsou vůbec dostupné.
Proč přihlášení k desktopu funguje a spuštění při startu ne
Úspěch na desktopu může dlouho skrývat závislost na vstupu. GUI může získat přístupovou frázi klíče, heslo účtu nebo druhý faktor v dialogu, protože běží v interaktivní relaci s viditelným desktopem. Služba běží v relaci bez desktopu, takže žádost o vstup nemá kde se objevit, a připojení selže po časovém limitu, který vůbec nepřipomíná problém s přihlašovacími údaji.
Přístup k souborům se řídí stejným pravidlem. Soukromý klíč uložený pod profilem uživatele nebo certifikát v osobním úložišti uživatele není dostupný službě běžící jako počítač. Porovnávejte absolutní cesty, oprávnění a volbu certifikátu, kterou každá strana činí, místo abyste předpokládali, že stejný soubor profilu znamená stejné prostředí.
Naplánovaná úloha nastavená tak, aby běžela bez ohledu na to, zda je uživatel přihlášen, dědí podobné omezení. Může úspěšně spustit spustitelný soubor GUI a přesto vytvořit proces, který nikdy nezíská přihlašovací údaje, takže přítomnost procesu ve Správci úloh není důkazem funkčního tunelu.
Zvolte jednoho vlastníka a otestujte skutečný životní cyklus
Pro připojení, které patří přihlášené osobě, použijte podporované automatické spouštění GUI a službu nechte stranou. Pro tunel, který musí existovat dříve, než se kdokoli přihlásí, nakonfigurujte službu, umístěte profil tam, kde ho obal čte, a použijte podporovaný mechanismus bezobslužných přihlašovacích údajů, například klíč bez interaktivní přístupové fráze nebo zdokumentovaný soubor s přihlašovacími údaji.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Otestujte životní cyklus, na kterém záleží: restart, při kterém se nikdo nepřihlásí, a poté opětovné připojení po změně sítě. Udržujte pro připojení jednoho vlastníka, protože dva soupeřící mechanismy spouštění obvykle vytvoří dvě instance bojující o stejné trasy a stejnou relaci serveru, což se diagnostikuje hůř než kterýkoli z mechanismů samostatně.