OpenVPN inicia no login, mas não no boot no Windows?
Um atalho de inicialização abre um aplicativo de desktop, não o serviço automático. Verifique qual fonte de perfil o proprietário lê antes de mover arquivos.
Túneis que só aparecem depois que alguém inicia sessão normalmente são abertos pela sessão dessa pessoa, e não pelo serviço automático. O culpado habitual é um atalho de inicialização que abre o openvpn-gui.exe, e não se trata de uma instalação quebrada. O atalho abre um aplicativo de desktop dentro de uma sessão de usuário, com o perfil desse usuário, os repositórios de certificados desse usuário e a capacidade desse usuário de responder a um prompt. Nada disso torna a conexão independente de uma pessoa conectada, que é exatamente o que um túnel antes do login exige.
O sintoma geralmente tem três causas
Três padrões parecem iguais por fora e têm correções diferentes. O primeiro é um proprietário de execução que é uma sessão de usuário em vez do serviço, ou seja, o caso do atalho de inicialização. O segundo é um perfil que fica onde o serviço não olha, então o serviço inicia, não encontra nada e encerra de forma limpa. O terceiro é um perfil que o serviço encontra e inicia, mas cujas credenciais exigem uma interação que nenhum serviço consegue fornecer.
Identificar qual se aplica exige duas leituras: o que o serviço está configurado para executar e quais arquivos ele consegue ver. Ambas são um comando cada, e nenhuma perturba uma conexão em execução.
O que o serviço automático realmente lê
O serviço automático do Community é um wrapper que varre seu diretório de inicialização automática configurado, normalmente config-auto na instalação, e inicia um processo OpenVPN para cada perfil correspondente que encontra. Um perfil visível no menu da GUI de um usuário fica, em vez disso, sob o perfil móvel desse usuário, em um diretório que a conta de serviço não lê. O guia do serviço do Windows descreve essa descoberta, e vale a pena lê-lo antes de copiar qualquer coisa, porque o diretório de destino é uma propriedade da instalação e não uma convenção fixa. Portanto, copiar um arquivo para a pasta da GUI não muda nada para o serviço, e copiá-lo para toda pasta chamada config cria duplicatas em vez de uma correção.
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 lista o que o wrapper realmente verá, que é a forma mais rápida de confirmar que um perfil está no lugar errado. A segunda linha também mostra a conta sob a qual o serviço é executado, e essa conta decide quais caminhos de arquivo e repositórios de certificados são alcançáveis.
Por que o login no desktop funciona e a inicialização no boot não
O sucesso no desktop pode esconder uma dependência de entrada por muito tempo. Uma GUI pode coletar uma frase secreta de chave, uma senha de conta ou um segundo fator em uma caixa de diálogo, porque é executada em uma sessão interativa com um desktop visível. Um serviço é executado em uma sessão sem desktop, então um pedido de entrada não tem onde aparecer, e a conexão falha após um tempo limite que não se parece em nada com um problema de credenciais.
O acesso a arquivos segue a mesma regra. Uma chave privada armazenada no perfil do usuário, ou um certificado no repositório pessoal do usuário, não está disponível para um serviço executado como a máquina. Compare caminhos absolutos, permissões e a seleção de certificado que cada lado faz, em vez de supor que o mesmo arquivo de perfil implica o mesmo ambiente.
Uma tarefa agendada definida para ser executada independentemente de um usuário estar conectado herda uma restrição semelhante. Ela pode iniciar o executável da GUI com sucesso e ainda produzir um processo que nunca obtém credenciais, então a presença de um processo no gerenciador de tarefas não é prova de um túnel funcional.
Escolha um proprietário e teste o ciclo de vida real
Para uma conexão que pertence a uma pessoa conectada, use o comportamento de inicialização automática suportado pela GUI e deixe o serviço de fora. Para um túnel que precisa existir antes de alguém iniciar sessão, configure o serviço, coloque o perfil onde o wrapper o lê e use um mecanismo de credenciais não assistido suportado, como uma chave sem frase secreta interativa ou um arquivo 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*'
Teste o ciclo de vida que importa: uma reinicialização sem ninguém iniciar sessão e, depois, uma reconexão após uma mudança de rede. Mantenha um único proprietário para a conexão, porque dois mecanismos de inicialização concorrentes geralmente produzem duas instâncias disputando as mesmas rotas e a mesma sessão de servidor, o que é mais difícil de diagnosticar do que qualquer um dos mecanismos isoladamente.