Los túneles que solo aparecen después de que alguien inicia sesión suelen ser lanzados por la sesión de esa persona, no por el servicio automático. El culpable habitual es un acceso directo de inicio que lanza openvpn-gui.exe, y no es una instalación rota. El acceso directo inicia una aplicación de escritorio dentro de una sesión de usuario, con el perfil de ese usuario, sus almacenes de certificados y su capacidad de responder a un aviso. Nada de eso hace que la conexión sea independiente de una persona que haya iniciado sesión, y eso es precisamente lo que exige un túnel previo al inicio de sesión.

El síntoma suele tener tres causas

Tres patrones se parecen desde fuera y tienen soluciones distintas. El primero es un propietario de ejecución que es una sesión de usuario en lugar del servicio, que es el caso del acceso directo de inicio. El segundo es un perfil que vive donde el servicio no mira, así que el servicio arranca, no encuentra nada y sale limpiamente. El tercero es un perfil que el servicio encuentra y arranca, pero cuyas credenciales necesitan una interacción que ningún servicio puede proporcionar.

Identificar cuál se aplica requiere dos lecturas: para qué está configurado el servicio y qué archivos puede ver. Ambas son un comando cada una, y ninguna altera una conexión en curso.

Qué lee realmente el servicio automático

El servicio automático de Community es un envoltorio que examina su directorio de inicio automático configurado, normalmente config-auto dentro de la instalación, y lanza un proceso de OpenVPN por cada perfil coincidente que encuentra. Un perfil visible en el menú GUI de un usuario vive, en cambio, bajo el perfil móvil de ese usuario, en un directorio que la cuenta del servicio no lee. La guía del servicio de Windows describe ese descubrimiento, y vale la pena leerla antes de copiar nada, porque el directorio de destino es una propiedad de la instalación y no una convención fija. Copiar un archivo a la carpeta del GUI, por tanto, no cambia nada para el servicio, y copiarlo a cada carpeta llamada config crea duplicados en lugar de una 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'

El último comando enumera lo que el envoltorio verá realmente, que es la forma más rápida de confirmar que un perfil está en el lugar equivocado. La segunda línea también muestra la cuenta con la que se ejecuta el servicio, y esa cuenta decide qué rutas de archivo y almacenes de certificados son accesibles.

Por qué funciona el inicio de sesión de escritorio y no el arranque

El éxito en el escritorio puede ocultar durante mucho tiempo una dependencia de entrada. Un GUI puede recoger una frase de contraseña de clave, una contraseña de cuenta o un segundo factor en un diálogo, porque se ejecuta en una sesión interactiva con un escritorio visible. Un servicio se ejecuta en una sesión sin escritorio, así que una solicitud de entrada no tiene dónde aparecer, y la conexión falla tras un tiempo de espera que no se parece en nada a un problema de credenciales.

El acceso a archivos sigue la misma regla. Una clave privada guardada bajo el perfil del usuario, o un certificado en el almacén personal del usuario, no está disponible para un servicio que se ejecuta como la máquina. Compare rutas absolutas, permisos y la selección de certificado que hace cada parte en lugar de suponer que el mismo archivo de perfil implica el mismo entorno.

Una tarea programada para ejecutarse tanto si un usuario ha iniciado sesión como si no hereda una restricción similar. Puede iniciar el ejecutable del GUI con éxito y aun así producir un proceso que nunca obtiene credenciales, así que la presencia de un proceso en el administrador de tareas no es prueba de un túnel que funcione.

Elija un propietario y pruebe el ciclo de vida real

Para una conexión que pertenece a una persona que ha iniciado sesión, use el comportamiento de inicio automático compatible del GUI y deje el servicio fuera. Para un túnel que debe existir antes de que nadie inicie sesión, configure el servicio, coloque el perfil donde el envoltorio lo lee y use un mecanismo de credenciales desatendido compatible, como una clave sin frase de contraseña interactiva o un archivo de credenciales documentado.

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

Pruebe el ciclo de vida que importa: un reinicio sin que nadie inicie sesión y luego una reconexión tras un cambio de red. Mantenga un solo propietario para la conexión, porque dos mecanismos de inicio competidores suelen producir dos instancias que se pelean por las mismas rutas y la misma sesión de servidor, algo más difícil de diagnosticar que cualquiera de los mecanismos por separado.

Artículos relacionados