OpenVPN стартира при вход, но не при зареждане на Windows?
Пряк път в стартовите програми пуска настолно приложение, а не автоматичната услуга. Проверете кой източник на профил чете собственикът, преди да местите файлове.
Тунелите, които се появяват само след като някой влезе в системата, обикновено се стартират от сесията на този човек, а не от автоматичната услуга. Обичайният виновник е пряк път в стартовите програми, който пуска openvpn-gui.exe, и това не е повредена инсталация. Прекият път стартира настолно приложение в потребителска сесия, с профила на този потребител, неговите хранилища на сертификати и способността му да отговори на подкана. Нищо в това не прави връзката независима от влязъл човек, а точно това изисква тунел преди вход.
Симптомът обикновено има три причини
Три модела изглеждат еднакво отвън и имат различни поправки. Първият е собственик на изпълнението, който е потребителска сесия, а не услугата — случаят с прекия път. Вторият е профил, който се намира там, където услугата не гледа, така че услугата стартира, не намира нищо и излиза чисто. Третият е профил, който услугата намира и стартира, но чиито идентификационни данни изискват взаимодействие, което никоя услуга не може да осигури.
Да се определи кой случай важи, изисква две четения: какво е конфигурирана да стартира услугата и кои файлове може да види. И двете са по една команда и нито едно не смущава работеща връзка.
Какво всъщност чете автоматичната услуга
Автоматичната услуга Community е обвивка, която сканира конфигурираната си папка за автоматичен старт, обикновено config-auto в инсталацията, и стартира процес на OpenVPN за всеки намерен подходящ профил. Профил, видим в менюто на GUI на потребител, живее вместо това в неговия роуминг профил, в папка, която служебният акаунт не чете. Ръководството за услугата Windows описва това откриване и си струва да се прочете преди копиране на каквото и да е, защото целевата папка е свойство на инсталацията, а не фиксирана конвенция. Затова копирането на файл в папката на GUI не променя нищо за услугата, а копирането във всяка папка с име config създава дубликати, а не поправка.
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'
Последната команда изброява какво ще види обвивката в действителност и това е най-бързият начин да потвърдите, че профилът е на грешното място. Вторият ред показва и акаунта, под който работи услугата, а този акаунт решава кои пътища до файлове и хранилища на сертификати изобщо са достъпни.
Защо входът на настолен компютър работи, а стартът при зареждане не
Успехът на настолния компютър може дълго да скрива зависимост от вход. GUI може да събере парола за ключ, парола за акаунт или втори фактор в диалог, защото работи в интерактивна сесия с видим настолен компютър. Услугата работи в сесия без настолен компютър, така че заявка за вход няма къде да се появи и връзката се проваля след изчакване, което изобщо не прилича на проблем с идентификационни данни.
Достъпът до файлове следва същото правило. Частен ключ, съхранен в профила на потребителя, или сертификат в личното хранилище на потребителя, не е достъпен за услуга, работеща като машината. Сравнявайте абсолютните пътища, разрешенията и избора на сертификат, който всяка страна прави, вместо да предполагате, че същият файл на профила означава същата среда.
Планирана задача, настроена да работи независимо дали потребител е влязъл, наследява подобно ограничение. Тя може успешно да стартира изпълнимия файл на GUI и все пак да създаде процес, който никога не получава идентификационни данни, така че наличието на процес в диспечера на задачите не е доказателство за работещ тунел.
Изберете един собственик и тествайте реалния жизнен цикъл
За връзка, която принадлежи на влязъл човек, използвайте поддържаното автоматично стартиране на GUI и оставете услугата настрана. За тунел, който трябва да съществува преди някой да влезе, конфигурирайте услугата, поставете профила там, където обвивката го чете, и използвайте поддържан механизъм за необслужвани идентификационни данни, като ключ без интерактивна парола или документиран файл с идентификационни данни.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Тествайте жизнения цикъл, който има значение: рестартиране, при което никой не влиза, после повторно свързване след промяна на мрежата. Дръжте един собственик на връзката, защото два конкурентни механизма за стартиране обикновено създават два екземпляра, които се борят за същите маршрути и същата сесия на сървъра, а това е по-трудно за диагностициране от всеки един механизъм сам.