Kaksi Ubuntu-konetta samasta levykuvasta, yksi VPN-profiili, vastakkaiset tulokset kirjautuessa: toisessa tunneli on ylhäällä ennen kuin työpöytä ilmestyy, toisessa se ei nouse koskaan. Profiili ei ole tässä muuttuja. Ero on siinä, mille kolmesta komponentista annettiin käsky käynnistää se, eivätkä nämä kolme jaa yhtä kytkintä.

Niiden vertaaminen rinnakkain on nopeampaa kuin arvaaminen. Jokainen niistä epäonnistuu tunnistettavalla tavalla, ja juuri siksi vertailu kannattaa.

Kolme käynnistäjää ja kolme erilaista laukaisinta

Paketoitu openvpn-palvelu on vanhin reitti. Sen init-skripti lukee automaattikäynnistysluettelon tiedostosta /etc/default/openvpn. Jos luettelo on kommentoitu pois tai jätetty tyhjäksi, skripti käynnistää jokaisen kyseisestä hakemistosta löytämänsä kokoonpanon sen sijaan, että käynnistäisi vain lisäämäsi. Yhtä tunnelia varten lisätty tiedosto voi äänettömästi nostaa useita.

StarterWhat triggers itTypical failure
Init script and templated unitsBoot, plus anything in the autostart listStarts every config, not the one you meant
NetworkManager secondaryActivation of the base Wi-Fi or Ethernet profileNothing happens until that base link comes up
Hand-written unit or wrapperWhatever its WantedBy and ExecStart sayRuns a different binary or environment than your shell

Toinen rivi on se, jonka ihmiset konfiguroivat väärin. NetworkManager pitää tuodun profiilin ja käynnistää sen, mutta vain toisen yhteyden toissijaisena, mikä tarkoittaa, että laukaisin kuuluu verkkolinkille eikä VPN:lle.

Vertaa asennuskustannusta ja laajuutta

Init-skriptin reitti maksaa yhden rivin ja kattaa koneen kaikki kokoonpanot. Se sopii reitittimelle ja on väärin kannettavalle, joka liittyy eri verkkoihin. NetworkManager-reitti maksaa UUID-haun ja sitoo tunnelin yhteen perusyhteyteen. Se nousee työn SSID:ssä ja jää alas hotelliverkossa.

Käsin kirjoitettu unit maksaa eniten ja ostaa eniten hallintaa, mukaan lukien järjestys muihin palveluihin nähden. Laajuus on ratkaiseva tekijä. Jos koneessa on yksi verkko ja yksi tunneli, paketoitu palvelu on rehellinen ja ennustettava. Jos tunnelin pitäisi seurata tiettyä Wi-Fi-verkkoa, toissijainen on ainoa kolmesta, joka ilmaisee tämän ehdon ilman lisäskriptausta.

Valitse yksi omistaja ja poista muut

Kahden omistajan käynnistämä profiili tuottaa ajoituksen, joka muuttuu käynnistysten välillä, mikä on huonompi kuin kumpikaan mekanismeista yksinään. Valitse omistaja ja poista sitten kilpaileva reitti käytöstä tarkoituksella, ei vahingossa.

# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'

# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"

Jos paketoitu reitti on se, joka poistetaan, tee se oikeassa järjestyksessä: aseta AUTOSTART arvoon none, aja systemctl daemon-reload, jotta luodut unitit ottavat uuden luettelon, ja poista sitten käytöstä mallipohjainen instanssi, jota et enää halua. Uudelleenlatauksen väliin jättäminen jättää vanhat unitit aktiivisiksi, ja näyttää siltä, ettei muutoksella ollut mitään vaikutusta.

Jumiutuva pysäytys on erillinen ongelma, jolla on rajattu vastaus. TimeoutStopSec rajoittaa, kuinka kauan systemd odottaa ennen SIGKILLin lähettämistä. Drop-in on oikea paikka asettaa se, koska paketoidun unitin muokkaaminen kadottaa muutoksen seuraavassa päivityksessä.

Varmista, mikä todella käynnistyi

Käynnistä uudelleen ja lue todisteet sen sijaan, että luottaisit asetustiedostoon. Tunnelin omistava unit näyttää aktiivisen tilan ja käynnistykseen sopivan aloitusaikaleiman, ja VPN-liittymä on olemassa ennen kuin kirjaudut sisään.

systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0

Tähän kuuluu vielä yksi tarkistus: varmista, että unitin ExecStart osoittaa siihen binaariin, jota luulet. Paikallisesti käännetty asiakasohjelma tai snap-paketti tarvitsee usein eksplisiittisen polun tai snap run-kääreen, koska systemd ei peri komentotulkkisi hakujärjestystä. command -v openvpn-komennon vertaaminen unit-tiedostoon ratkaisee asian sekunneissa.

Kirjoita valittu omistaja koneen muistiinpanoihin profiilin nimen viereen. Seuraava henkilö, joka selvittää puuttuvaa tunnelia, aloittaa siitä riviltä sen sijaan, että toistaisi vertailun.

Aiheeseen liittyvät artikkelit