Por que OpenVPN arrinca ao iniciar sesión e non ao arrincar Windows?
Un atallo de inicio executa unha aplicación de escritorio, non o servizo automático. Comprobe que fonte de perfil le o servizo antes de mover ficheiros.
Os túneles que só aparecen despois de que alguén inicie sesión normalmente son lanzados pola sesión desa persoa, non polo servizo automático. O culpable habitual é un atallo de inicio que lanza openvpn-gui.exe, e non é unha instalación rota. O atallo inicia unha aplicación de escritorio dentro dunha sesión de usuario, co perfil dese usuario, os seus almacéns de certificados e a súa capacidade de responder a unha solicitude. Nada diso fai que a conexión sexa independente dunha persoa que iniciase sesión, e iso é precisamente o que esixe un túnel anterior ao inicio de sesión.
O síntoma adoita ter tres causas
Tres patróns parécense desde fóra e teñen arranxos distintos. O primeiro é un propietario de execución que é unha sesión de usuario en lugar do servizo, que é o caso do atallo de inicio. O segundo é un perfil que vive onde o servizo non mira, así que o servizo arrinca, non atopa nada e sae limpo. O terceiro é un perfil que o servizo atopa e arrinca, pero cuxas credenciais necesitan unha interacción que ningún servizo pode fornecer.
Identificar cal se aplica require dúas lecturas: para que está configurado o servizo e que ficheiros pode ver. Ambas son un comando cada unha, e ningunha altera unha conexión en curso.
Que le realmente o servizo automático
O servizo automático de Community é un envoltorio que examina o seu directorio de inicio automático configurado, normalmente config-auto dentro da instalación, e lanza un proceso de OpenVPN por cada perfil coincidente que atopa. Un perfil visible no menú GUI dun usuario vive, en cambio, baixo o perfil móbil dese usuario, nun directorio que a conta do servizo non le. A guía do servizo de Windows describe ese descubrimento, e paga a pena lela antes de copiar nada, porque o directorio de destino é unha propiedade da instalación e non unha convención fixa. Copiar un ficheiro ao cartafol do GUI, polo tanto, non cambia nada para o servizo, e copialo a cada cartafol chamado config crea duplicados en lugar dunha solución.
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'
O último comando enumera o que o envoltorio verá realmente, que é a forma máis rápida de confirmar que un perfil está no lugar equivocado. A segunda liña tamén mostra a conta coa que se executa o servizo, e esa conta decide que rutas de ficheiro e almacéns de certificados son accesibles.
Por que funciona un inicio de sesión de escritorio e un arrinque non
O éxito no escritorio pode ocultar durante moito tempo unha dependencia de entrada. Un GUI pode recoller unha frase de contrasinal de clave, un contrasinal de conta ou un segundo factor nun diálogo, porque se executa nunha sesión interactiva cun escritorio visible. Un servizo execútase nunha sesión sen escritorio, así que unha solicitude de entrada non ten onde aparecer, e a conexión falla tras un tempo de espera que non se parece en nada a un problema de credenciais.
O acceso aos ficheiros segue a mesma regra. Unha clave privada gardada baixo o perfil do usuario, ou un certificado no almacén persoal do usuario, non está dispoñible para un servizo que se executa como a máquina. Compare rutas absolutas, permisos e a selección de certificado que fai cada parte en lugar de supor que o mesmo ficheiro de perfil implica o mesmo ambiente.
Unha tarefa programada para executarse tanto se un usuario iniciou sesión como se non herda unha restrición similar. Pode iniciar o executable do GUI con éxito e aínda así producir un proceso que nunca obtén credenciais, así que a presenza dun proceso no xestor de tarefas non é proba dun túnel que funcione.
Escolla un propietario e probe o ciclo de vida real
Para unha conexión que pertence a unha persoa que iniciou sesión, use o comportamento de inicio automático compatible do GUI e deixe o servizo fóra. Para un túnel que debe existir antes de que ninguén inicie sesión, configure o servizo, coloque o perfil onde o envoltorio o le e use un mecanismo de credenciais desatendido compatible, como unha clave sen frase de contrasinal interactiva ou un ficheiro de credenciais documentado.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Probe o ciclo de vida que importa: un reinicio sen que ninguén inicie sesión e despois unha reconexión tras un cambio de rede. Manteña un só propietario para a conexión, porque dous mecanismos de inicio competidores adoitan producir dúas instancias que pelexan polas mesmas rutas e pola mesma sesión de servidor, algo máis difícil de diagnosticar que calquera dos mecanismos por separado.