Hvorfor starter OpenVPN ved login, men ikke ved opstart i Windows?
En opstartsgenvej starter et skrivebordsprogram, ikke den automatiske tjeneste. Kontrollér, hvilken profilkilde tjenesten læser, før du flytter filer.
Tunneler, der først vises, når nogen logger ind, startes normalt af den pågældendes session og ikke af den automatiske tjeneste. Den sædvanlige synder er en opstartsgenvej, der starter openvpn-gui.exe, og det er ikke en ødelagt installation. Genvejen starter et skrivebordsprogram inde i en brugersession med den brugers profil, den brugers certifikatlager og den brugers mulighed for at svare på en prompt. Intet ved det gør forbindelsen uafhængig af et menneske, der er logget ind, og det er netop, hvad en tunnel før login kræver.
Symptomet har normalt tre årsager
Tre mønstre ser ens ud udefra og har forskellige løsninger. Det første er en udførelsesejer, der er en brugersession i stedet for tjenesten, hvilket er opstartsgenvejstilfældet. Det andet er en profil, der ligger der, hvor tjenesten ikke kigger, så tjenesten starter, finder intet og afslutter rent. Det tredje er en profil, som tjenesten finder og starter, men hvis legitimationsoplysninger kræver en interaktion, som ingen tjeneste kan levere.
At afgøre, hvilken der gælder, kræver to læsninger: hvad tjenesten er konfigureret til at køre, og hvilke filer den kan se. Begge er én kommando hver, og ingen af dem forstyrrer en kørende forbindelse.
Hvad den automatiske tjeneste faktisk læser
Community-tjenesten er en indpakning, der gennemsøger sin konfigurerede automatiske opstartsmappe, normalt config-auto under installationen, og starter en OpenVPN-proces for hver matchende profil, den finder. En profil, der er synlig i en brugers GUI-menu, ligger i stedet under den brugers roamingprofil i en mappe, som tjenestekontoen ikke læser. Windows-tjenesteguiden beskriver den registrering, og den er værd at læse, før du kopierer noget, fordi målmappen er en egenskab ved installationen og ikke en fast konvention. At kopiere en fil til GUI'ens mappe ændrer derfor intet for tjenesten, og at kopiere den til hver mappe, der hedder config, skaber dubletter i stedet for 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'
Den sidste kommando viser, hvad indpakningen faktisk vil se, og det er den hurtigste måde at bekræfte, at en profil ligger det forkerte sted. Den anden linje viser også den konto, tjenesten kører som, og den konto afgør, hvilke filstier og certifikatlagre der overhovedet er tilgængelige.
Hvorfor desktop-login virker, men opstart ikke gør
Succes på skrivebordet kan længe skjule en afhængighed af input. En GUI kan indsamle en nøglefrase, en kontoadgangskode eller en anden faktor i en dialog, fordi den kører i en interaktiv session med et synligt skrivebord. En tjeneste kører i en session uden skrivebord, så en anmodning om input har ingen steder at vises, og forbindelsen fejler efter en timeout, der slet ikke ligner et legitimationsproblem.
Filadgang følger samme regel. En privat nøgle, der er gemt under brugerens profil, eller et certifikat i brugerens personlige lager, er ikke tilgængeligt for en tjeneste, der kører som maskinen. Sammenlign absolutte stier, tilladelser og det certifikatvalg, hver side foretager, i stedet for at antage, at den samme profilfil betyder det samme miljø.
En planlagt opgave, der er sat til at køre, uanset om en bruger er logget ind, arver en lignende begrænsning. Den kan starte GUI'ens eksekverbare fil med succes og stadig producere en proces, der aldrig får legitimationsoplysninger, så tilstedeværelsen af en proces i Jobliste er ikke bevis på en fungerende tunnel.
Vælg én ejer, og test den virkelige livscyklus
Brug GUI'ens understøttede automatiske opstart til en forbindelse, der tilhører en person, der er logget ind, og lad tjenesten være uden for det. Til en tunnel, der skal findes, før nogen logger ind, skal du konfigurere tjenesten, placere profilen, hvor indpakningen læser den, og bruge en understøttet ubemandet legitimationsmekanisme som en nøgle uden en interaktiv frase eller en dokumenteret legitimationsfil.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Test den livscyklus, der betyder noget: en genstart uden at nogen logger ind, derefter en genopkobling efter en netværksændring. Behold én ejer af forbindelsen, fordi to konkurrerende opstartsmekanismer normalt skaber to instanser, der kæmper om de samme ruter og den samme serversession, og det er sværere at diagnosticere end nogen af mekanismerne alene.