Tunnels die pas verschijnen nadat iemand zich aanmeldt, worden meestal gestart door de sessie van die persoon, niet door de automatische service. De gebruikelijke boosdoener is een snelkoppeling in de opstartmap die openvpn-gui.exe start, en het is geen kapotte installatie. De snelkoppeling start een bureaubladprogramma binnen een gebruikerssessie, met het profiel van die gebruiker, de certificaatopslag van die gebruiker en het vermogen van die gebruiker om een prompt te beantwoorden. Niets ervan maakt de verbinding onafhankelijk van een aangemeld persoon, en dat is precies wat een tunnel vóór aanmelding vereist.

Het symptoom heeft meestal drie oorzaken

Drie patronen lijken van buitenaf op elkaar en hebben verschillende oplossingen. Het eerste is een uitvoeringseigenaar die een gebruikerssessie is in plaats van de service, namelijk het geval van de snelkoppeling in de opstartmap. Het tweede is een profiel dat staat waar de service niet kijkt, zodat de service start, niets vindt en netjes afsluit. Het derde is een profiel dat de service vindt en start, maar waarvan de inloggegevens een interactie vereisen die geen enkele service kan leveren.

Vaststellen welk geval geldt, vergt twee uitlezingen: wat de service is geconfigureerd om uit te voeren, en welke bestanden hij kan zien. Beide zijn één opdracht, en geen van beide verstoort een actieve verbinding.

Wat de automatische service werkelijk leest

De automatische Community-service is een wrapper die de geconfigureerde map voor automatisch starten, normaal gesproken config-auto onder de installatie, scant en voor elk overeenkomend profiel dat hij vindt een OpenVPN-proces start. Een profiel dat zichtbaar is in het GUI-menu van een gebruiker staat in plaats daarvan onder het roamingprofiel van die gebruiker, in een map die het serviceaccount niet leest. De Windows-servicehandleiding beschrijft die ontdekking, en het is de moeite waard die te lezen voordat u iets kopieert, omdat de doelmap een eigenschap van de installatie is en geen vaste conventie. Het kopiëren van een bestand naar de GUI-map verandert dus niets voor de service, en het kopiëren naar elke map met de naam config maakt duplicaten in plaats van een oplossing.

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'

De laatste opdracht laat zien wat de wrapper werkelijk zal zien, de snelste manier om te bevestigen dat een profiel op de verkeerde plaats staat. De tweede regel toont ook het account waaronder de service draait, en dat account bepaalt welke bestandspaden en certificaatopslagen überhaupt bereikbaar zijn.

Waarom aanmelden op het bureaublad werkt en starten bij het opstarten niet

Succes op het bureaublad kan een afhankelijkheid van invoer lang verbergen. Een GUI kan een sleutelwachtwoordzin, een accountwachtwoord of een tweede factor in een dialoog verzamelen, omdat hij draait in een interactieve sessie met een zichtbaar bureaublad. Een service draait in een sessie zonder bureaublad, dus een verzoek om invoer heeft nergens om te verschijnen, en de verbinding mislukt na een time-out die totaal niet op een inloggegevensprobleem lijkt.

Bestandstoegang volgt dezelfde regel. Een privésleutel die onder het gebruikersprofiel is opgeslagen, of een certificaat in de persoonlijke opslag van de gebruiker, is niet beschikbaar voor een service die als de machine draait. Vergelijk absolute paden, machtigingen en de certificaatkeuze die elke kant maakt in plaats van aan te nemen dat hetzelfde profielbestand dezelfde omgeving betekent.

Een geplande taak die is ingesteld om te draaien ongeacht of een gebruiker is aangemeld, erft een vergelijkbare beperking. Hij kan het GUI-programma met succes starten en toch een proces opleveren dat nooit inloggegevens verkrijgt, dus de aanwezigheid van een proces in Taakbeheer is geen bewijs van een werkende tunnel.

Kies één eigenaar en test de echte levenscyclus

Gebruik voor een verbinding die bij een aangemeld persoon hoort het door de GUI ondersteunde gedrag voor automatisch starten en houd de service erbuiten. Voor een tunnel die moet bestaan voordat iemand zich aanmeldt, configureert u de service, plaatst u het profiel waar de wrapper het leest, en gebruikt u een ondersteund mechanisme voor onbeheerde inloggegevens, zoals een sleutel zonder interactieve wachtwoordzin of een gedocumenteerd bestand met inloggegevens.

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

Test de levenscyclus die ertoe doet: een herstart waarbij niemand zich aanmeldt, en daarna opnieuw verbinden na een netwerkwijziging. Houd één eigenaar voor de verbinding, want twee concurrerende opstartmechanismen produceren meestal twee instanties die vechten om dezelfde routes en dezelfde serversessie, wat moeilijker te diagnosticeren is dan elk mechanisme afzonderlijk.

Gerelateerde artikelen