Systemd vai NetworkManager: kas palaiž VPN pie sāknēšanas?
Trīs mehānismi var pacelt vienu un to pašu Ubuntu profilu, katram ir cits trigeris. Salīdziniet tos, paturiet vienu īpašnieku un likvidējiet dublikātu.
Divi Ubuntu datori no viena attēla, viens VPN profils, pretēji rezultāti piesakoties: vienā tunelis ir pacelts pirms darbvirsmas parādīšanās, otrā tas nepaceļas nekad. Profils šeit nav mainīgais. Atšķirība ir tajā, kuram no trim komponentiem tika dots rīkojums to palaist, un šie trīs nedala vienu slēdzi.
Tos salīdzināt līdzās ir ātrāk nekā minēt. Katrs no tiem sabojājas atpazīstamā veidā, un tieši tāpēc salīdzinājums ir tā vērts.
Trīs palaidēji ar trim atšķirīgiem trigeriem
Iepakotais openvpn pakalpojums ir vecākais ceļš. Tā init skripts nolasa automātiskās palaišanas sarakstu no /etc/default/openvpn. Ja šis saraksts ir komentēts vai atstāts tukšs, skripts palaiž katru konfigurāciju, ko atrod šajā mapē, nevis to vienīgo, ko pievienojāt. Viena datne, kas pievienota vienam tunelim, var klusi pacelt vairākus.
| 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 |
Otrā rinda ir tā, kuru cilvēki konfigurē nepareizi. NetworkManager tur importēto profilu un to palaidīs, bet tikai kā citas savienojuma sekundāro, kas nozīmē, ka trigeris pieder tīkla posmam, nevis VPN.
Salīdziniet iestatīšanas izmaksas un tvērumu
Init skripta ceļš maksā vienu rindu un aptver katru datora konfigurāciju. Tas ir pareizi maršrutētājam un nepareizi klēpjdatoram, kas pievienojas dažādiem tīkliem. NetworkManager ceļš maksā UUID meklēšanu un piesaista tuneli vienam pamata savienojumam. Tas paceļas darba SSID un paliek lejā viesnīcas tīklā.
Ar roku rakstīts unit maksā visvairāk un dod vislielāko kontroli, tostarp secību attiecībā pret citiem pakalpojumiem. Izšķirošais faktors ir tvērums. Ja datoram ir viens tīkls un viens tunelis, iepakotais pakalpojums ir godīgs un paredzams. Ja tunelim jāseko konkrētam Wi-Fi tīklam, sekundārais ir vienīgais no trim, kas šo nosacījumu izsaka bez papildu skriptēšanas.
Izvēlieties vienu īpašnieku un noņemiet pārējos
Profils, ko palaiž divi īpašnieki, rada laiku, kas mainās starp sāknēšanām, un tas ir sliktāk nekā jebkurš mehānisms atsevišķi. Izvēlieties īpašnieku, pēc tam apzināti, nevis nejauši, izslēdziet konkurējošo ceļu.
# 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"
Ja tiek likvidēts iepakotais ceļš, dariet to pareizā secībā: iestatiet AUTOSTART uz none, palaidiet systemctl daemon-reload, lai ģenerētie uniti pārņemtu jauno sarakstu, un pēc tam izslēdziet šablona instanci, kuru vairs nevēlaties. Izlaižot pārlādi, vecie uniti paliek aktīvi, un izskatās, ka izmaiņai nav bijis nekādas ietekmes.
Aizķērusies apturēšana ir atsevišķa problēma ar ierobežotu atbildi. TimeoutStopSec ierobežo, cik ilgi systemd gaida pirms SIGKILL nosūtīšanas. Drop-in ir pareizā vieta, kur to iestatīt, jo iepakotā unita rediģēšana zaudē izmaiņas nākamajā atjauninājumā.
Pārbaudiet, kas patiešām tika palaists
Pārstartējiet un lasiet pierādījumus, nevis uzticieties konfigurācijas failam. Unit, kuram pieder tunelis, rādīs aktīvu stāvokli un sāknēšanai atbilstošu palaišanas laika zīmi, un VPN saskarne pastāvēs pirms jūs piesakāties.
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
Šeit pieder vēl viena pārbaude: pārliecinieties, ka unita ExecStart norāda uz to bināro failu, kuru domājat. Lokāli kompilēts klients vai snap pakotne bieži prasa skaidru ceļu vai snap run ietvaru, jo systemd nemanto jūsu čaulas meklēšanas kārtību. command -v openvpn salīdzinājums ar unita failu to atrisina sekundēs.
Ierakstiet izvēlēto īpašnieku datora piezīmēs, blakus profila nosaukumam. Nākamais cilvēks, kas labos pazudušu tuneli, sāks no šīs rindas, nevis atkārtos salīdzinājumu.