Systemd vagy NetworkManager: ki indítja a VPN-t indításkor?
Három mechanizmus hozhatja fel ugyanazt az Ubuntu-profilt, mindegyik más kiváltóval. Hasonlítsa össze őket, tartson meg egy gazdát, és szüntesse meg a duplikátumot.
Két Ubuntu gép ugyanabból a lemezképből, egy VPN-profil, ellentétes eredmények bejelentkezéskor: az egyiken az alagút már áll, mielőtt az asztal megjelenik, a másikon soha nem jön fel. A profil itt nem változó. A különbség az, hogy melyik három összetevő kapott utasítást az indítására, és ez a három nem osztozik egy kapcsolón.
Ezek egymás melletti összehasonlítása gyorsabb a találgatásnál. Mindegyikük felismerhető módon vall kudarcot, és éppen ezért éri meg az összehasonlítás.
Három indító három különböző kiváltóval
A csomagolt openvpn szolgáltatás a legrégebbi út. Az init-szkriptje egy automatikus indítási listát olvas a következőből: /etc/default/openvpn. Ha az a lista kikommentelt vagy üres, a szkript az adott könyvtárban talált minden konfigurációt elindít, nem csak azt az egyet, amelyet hozzáadott. Egy alagúthoz hozzáadott fájl csendben többet is felhozhat.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
A második sor az, amelyet az emberek rosszul állítanak be. A NetworkManager tartja az importált profilt, és elindítja, de csak egy másik kapcsolat másodlagosaként, ami azt jelenti, hogy a kiváltó a hálózati kapcsolathoz tartozik, nem a VPN-hez.
Hasonlítsa össze a beállítás költségét és a hatókört
Az init-szkript útja egy sort igényel, és lefedi a gépen lévő minden konfigurációt. Ez routernek megfelelő, egy több hálózatot használó laptopnak viszont nem. A NetworkManager útja egy UUID-keresést igényel, és az alagutat egy alapkapcsolathoz köti. A munkahelyi SSID-n feljön, egy szállodai hálózaton lent marad.
A kézzel írt unit a legtöbbe kerül, és a legtöbb irányítást adja, beleértve a más szolgáltatásokhoz viszonyított sorrendet is. A hatókör a döntő tényező. Ha a gépnek egy hálózata és egy alagútja van, a csomagolt szolgáltatás őszinte és kiszámítható. Ha az alagútnak egy adott Wi-Fi-hálózatot kell követnie, a másodlagos az egyetlen a három közül, amely ezt a feltételt extra szkriptelés nélkül fejezi ki.
Válasszon egy gazdát, és távolítsa el a többit
A két gazda által indított profil olyan időzítést ad, amely indításról indításra változik, ami rosszabb, mint bármelyik mechanizmus önmagában. Válassza ki a gazdát, majd szándékosan kapcsolja ki a versengő utat, nem véletlenül.
# 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"
Ha a csomagolt utat vonják ki, tegye a megfelelő sorrendben: állítsa a AUTOSTART értékét none-re, futtassa a systemctl daemon-reload parancsot, hogy a generált unitek átvegyék az új listát, majd kapcsolja ki a sablonpéldányt, amelyet már nem szeretne. Az újratöltés kihagyása aktívban hagyja a régi uniteket, és úgy tűnik, mintha a változásnak nem lett volna hatása.
A megakadó leállítás külön probléma, korlátozott válasszal. A TimeoutStopSec korlátozza, mennyi ideig vár a systemd a SIGKILL elküldése előtt. A drop-in fájl a megfelelő hely ennek beállítására, mert a csomagolt unit szerkesztése elveszíti a változást a következő frissítéskor.
Ellenőrizze, mi indult el valójában
Indítsa újra a gépet, és olvassa a bizonyítékokat ahelyett, hogy a konfigurációs fájlban bízna. Az alagutat birtokló unit aktív állapotot és az indításhoz illeszkedő kezdési időbélyeget mutat, a VPN-interfész pedig már a bejelentkezés előtt létezni fog.
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
Ide tartozik még egy ellenőrzés: győződjön meg arról, hogy az unit ExecStart bejegyzése arra a binárisra mutat, amelyre gondol. A helyben fordított kliens vagy a snap csomag gyakran kifejezett útvonalat vagy snap run burkolót igényel, mert a systemd nem örökli a héja keresési sorrendjét. A command -v openvpn és az unit fájl összevetése másodpercek alatt eldönti ezt.
Írja a kiválasztott gazdát a gép jegyzeteibe, a profil neve mellé. A következő ember, aki egy hiányzó alagutat hibakeres, arról a sorból indul, ahelyett hogy megismételné az összehasonlítást.