Miksi OpenVPN käynnistyy kirjautuessa mutta ei Windowsin käynnistyessä?
Käynnistyspikakuvake käynnistää työpöytäsovelluksen, ei automaattista palvelua. Tarkista, mitä profiililähdettä palvelu lukee, ennen kuin siirrät tiedostoja.
Tunnelit, jotka ilmestyvät vasta jonkun kirjauduttua sisään, käynnistetään yleensä kyseisen henkilön istunnosta, eivät automaattipalvelusta. Tavallinen syyllinen on käynnistyspikakuvake, joka käynnistää openvpn-gui.exe, eikä kyse ole rikkinäisestä asennuksesta. Pikakuvake käynnistää työpöytäsovelluksen käyttäjäistunnon sisällä, kyseisen käyttäjän profiililla, hänen varmennevarastoillaan ja kyvyllään vastata kehotteeseen. Mikään tässä ei tee yhteydestä riippumatonta kirjautuneesta ihmisestä, ja juuri sitä ennen kirjautumista toimiva tunneli vaatii.
Oireella on yleensä kolme syytä
Kolme mallia näyttävät ulkoisesti samalta ja niillä on eri korjaukset. Ensimmäinen on suorituksen omistaja, joka on palvelun sijaan käyttäjäistunto, eli käynnistyspikakuvakkeen tapaus. Toinen on profiili, joka sijaitsee siellä, minne palvelu ei katso, joten palvelu käynnistyy, ei löydä mitään ja poistuu siististi. Kolmas on profiili, jonka palvelu löytää ja käynnistää, mutta jonka tunnistetiedot vaativat vuorovaikutusta, jota mikään palvelu ei voi tarjota.
Sen selvittäminen, mikä tapaus pätee, vaatii kaksi lukukertaa: mitä palvelu on määritetty suorittamaan ja mitä tiedostoja se näkee. Molemmat ovat yksi komento, eikä kumpikaan häiritse käynnissä olevaa yhteyttä.
Mitä automaattipalvelu todella lukee
Communityn automaattipalvelu on kääre, joka skannaa määritetyn automaattisen käynnistyksen hakemistonsa, tavallisesti config-auto asennuksen alla, ja käynnistää OpenVPN-prosessin jokaiselle löytämälleen sopivalle profiilille. Käyttäjän GUI-valikossa näkyvä profiili sijaitsee sen sijaan kyseisen käyttäjän roaming-profiilin alla hakemistossa, jota palvelutili ei lue. Windows-palvelun opas kuvaa tämän löytämisen, ja se kannattaa lukea ennen minkään kopioimista, koska kohdehakemisto on asennuksen ominaisuus eikä kiinteä käytäntö. Tiedoston kopioiminen GUI:n kansioon ei siis muuta palvelun kannalta mitään, ja sen kopioiminen jokaiseen config-nimiseen kansioon luo kopioita, ei korjausta.
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'
Viimeinen komento luettelee, mitä kääre todella näkee, ja se on nopein tapa vahvistaa, että profiili on väärässä paikassa. Toinen rivi näyttää myös tilin, jonka alla palvelu toimii, ja tämä tili päättää, mitkä tiedostopolut ja varmennevarastot ovat ylipäätään käytettävissä.
Miksi työpöytäkirjautuminen toimii mutta käynnistys ei
Työpöydällä onnistuminen voi pitkään piilottaa riippuvuuden syötteestä. GUI voi kerätä avainlauseen, tilin salasanan tai toisen tekijän valintaikkunassa, koska se toimii vuorovaikutteisessa istunnossa, jossa on näkyvä työpöytä. Palvelu toimii istunnossa ilman työpöytää, joten syötepyynnöllä ei ole paikkaa ilmestyä, ja yhteys epäonnistuu aikakatkaisun jälkeen, joka ei muistuta lainkaan tunnistetieto-ongelmaa.
Tiedostojen käyttö noudattaa samaa sääntöä. Käyttäjän profiilin alle tallennettu yksityinen avain tai varmenne käyttäjän henkilökohtaisessa varastossa ei ole koneena toimivan palvelun käytettävissä. Vertaa absoluuttisia polkuja, käyttöoikeuksia ja kummankin osapuolen varmenteen valintaa sen sijaan, että olettaisit saman profiilitiedoston tarkoittavan samaa ympäristöä.
Ajastettu tehtävä, joka on asetettu toimimaan riippumatta siitä, onko käyttäjä kirjautunut, perii samanlaisen rajoituksen. Se voi käynnistää GUI:n suoritettavan tiedoston onnistuneesti ja tuottaa silti prosessin, joka ei koskaan saa tunnistetietoja, joten prosessin olemassaolo tehtävienhallinnassa ei ole todiste toimivasta tunnelista.
Valitse yksi omistaja ja testaa todellinen elinkaari
Käytä kirjautuneelle henkilölle kuuluvassa yhteydessä GUI:n tuettua automaattista käynnistystä ja jätä palvelu sen ulkopuolelle. Tunnelille, jonka on oltava olemassa ennen kuin kukaan kirjautuu, määritä palvelu, sijoita profiili sinne, missä kääre sen lukee, ja käytä tuettua valvomatonta tunnistetietomekanismia, kuten avainta ilman vuorovaikutteista lausetta tai dokumentoitua tunnistetietotiedostoa.
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
Testaa elinkaari, jolla on merkitystä: uudelleenkäynnistys ilman että kukaan kirjautuu, ja sitten uudelleenyhdistäminen verkkomuutoksen jälkeen. Pidä yhteydelle yksi omistaja, koska kaksi kilpailevaa käynnistysmekanismia tuottaa yleensä kaksi instanssia, jotka taistelevat samoista reiteistä ja samasta palvelinistunnosta, ja sitä on vaikeampi diagnosoida kuin kumpaakaan mekanismia yksin.