OpenVPN startar vid inloggning men inte vid start av Windows?
En autostartgenväg startar ett skrivbordsprogram, inte den automatiska tjänsten. Kontrollera vilken profilkälla ägaren läser innan du flyttar filer.
Tunnlar som bara dyker upp efter att någon loggar in startas vanligtvis av den personens session, inte av den automatiska tjänsten. Den vanliga boven är en autostartgenväg som startar openvpn-gui.exe, och det är inte en trasig installation. Genvägen startar ett skrivbordsprogram i en användarsession, med den användarens profil, den användarens certifikatarkiv och den användarens förmåga att svara på en fråga. Inget av det gör anslutningen oberoende av en inloggad människa, och det är precis vad en tunnel före inloggning kräver.
Symtomet har vanligtvis tre orsaker
Tre mönster ser likadana ut utifrån och har olika åtgärder. Det första är en utförandeägare som är en användarsession i stället för tjänsten, alltså fallet med autostartgenvägen. Det andra är en profil som ligger där tjänsten inte tittar, så tjänsten startar, hittar inget och avslutas rent. Det tredje är en profil som tjänsten hittar och startar, men vars autentiseringsuppgifter kräver en interaktion som ingen tjänst kan tillhandahålla.
Att avgöra vilket fall som gäller kräver två läsningar: vad tjänsten är konfigurerad att köra och vilka filer den kan se. Båda är ett kommando vardera, och ingen av dem stör en anslutning som körs.
Vad den automatiska tjänsten faktiskt läser
Den automatiska Community-tjänsten är ett omslag som skannar sin konfigurerade autostartkatalog, vanligtvis config-auto under installationen, och startar en OpenVPN-process för varje matchande profil den hittar. En profil som syns i en användares GUI-meny ligger i stället under den användarens roamingprofil, i en katalog som tjänstekontot inte läser. Windows-tjänstguiden beskriver den upptäckten, och den är värd att läsa innan du kopierar något, eftersom målkatalogen är en egenskap hos installationen och inte en fast konvention. Därför ändrar det ingenting för tjänsten att kopiera en fil till GUI-mappen, och att kopiera den till varje mapp som heter config skapar dubbletter i stället för en lösning.
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'
Det sista kommandot listar vad omslaget faktiskt kommer att se, vilket är det snabbaste sättet att bekräfta att en profil ligger på fel plats. Den andra raden visar också kontot som tjänsten körs som, och det kontot avgör vilka filsökvägar och certifikatarkiv som över huvud taget är nåbara.
Varför inloggning på skrivbordet fungerar och start vid uppstart inte gör det
Framgång på skrivbordet kan länge dölja ett beroende av indata. Ett GUI kan samla in en nyckelfras, ett kontolösenord eller en andra faktor i en dialog, eftersom det körs i en interaktiv session med ett synligt skrivbord. En tjänst körs i en session utan skrivbord, så en begäran om indata har ingenstans att visas, och anslutningen misslyckas efter en tidsgräns som inte alls liknar ett problem med autentiseringsuppgifter.
Filåtkomst följer samma regel. En privat nyckel som lagras under användarens profil, eller ett certifikat i användarens personliga arkiv, är inte tillgänglig för en tjänst som körs som maskinen. Jämför absoluta sökvägar, behörigheter och det certifikatval varje sida gör i stället för att anta att samma profilfil innebär samma miljö.
En schemalagd uppgift som är inställd att köras oavsett om en användare är inloggad ärver en liknande begränsning. Den kan starta GUI-körbara filen framgångsrikt och ändå skapa en process som aldrig får autentiseringsuppgifter, så förekomsten av en process i Aktivitetshanteraren är inte bevis på en fungerande tunnel.
Välj en ägare och testa den verkliga livscykeln
För en anslutning som tillhör en inloggad person, använd GUI:ets stödda autostartbeteende och håll tjänsten utanför. För en tunnel som måste finnas innan någon loggar in, konfigurera tjänsten, placera profilen där omslaget läser den och använd en stödd obevakad autentiseringsmekanism som en nyckel utan interaktiv fras eller en dokumenterad autentiseringsfil.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Testa livscykeln som betyder något: en omstart där ingen loggar in, sedan en återanslutning efter en nätverksändring. Håll en ägare för anslutningen, eftersom två konkurrerande startmekanismer vanligtvis producerar två instanser som slåss om samma rutter och samma serversession, vilket är svårare att diagnostisera än varje mekanism för sig.