Vaša domáca sieťová VPN nemá čo robiť, keď notebook už v tejto sieti sedí. Lákavou skratkou je prípravný príkaz, ktorý skončí nenulovým kódom; ten zhodí unit a každý dashboard vyzerá rozbitý. systemd má direktívu presne pre takýto typ rozhodnutia a oddeľuje úmyselné preskočenie od skutočnej poruchy. Urobiť to správne znamená hlavne zapísať, čo ktorý návratový kód znamená.

Prečo je zlyhávajúci predpoklad nesprávny tvar

ExecStartPre považuje nenulový návrat za zlyhanie štartu, čo je správne pre príkaz, ktorý pripravuje službu. Použitie ako podmienky robí z politického rozhodnutia niečo nerozlišiteľné od rozbitej závislosti. ExecCondition existuje preto, aby unit mohol odmietnuť štart bez označenia ako zlyhaný.

Tento rozdiel je dôležitý o tretej ráno, keď nikto nechce triediť červený unit, ktorý sa správal podľa návrhu. Zlyhaný unit tiež skrýva skutočné poruchy medzi úmyselnými.

Najprv napíšte zmluvu o návratových kódoch

Napíšte zmluvu pred skriptom. Nulový návrat znamená pokračovať, návrat jedna znamená preskočiť zostávajúce štartovacie príkazy a návrat 255 znamená, že samotná podmienka nemohla bežať. Kódy medzi dva a 254 zvyčajne tiež znamenajú preskočenie, na čo sa ľahko zabudne, keď pomocník vráti náhodný kód chyby. Drop-in nižšie pripája pomocníka k skutočnému názvu unitu.

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

Skôr než budete predpokladať predvolenú sémantiku, skontrolujte efektívny unit na zdedené SuccessExitStatus alebo stop-post. Potom úmyselne otestujte každý z troch výsledkov.

Sieťový náznak nie je dôkaz polohy

Dostupná adresa routera alebo známa MAC môžu naznačiť správnu sieť a ani jedno to nedokazuje. Iná sieť môže použiť rovnakú adresu, údaje ARP môžu byť zastarané a identifikátory možno napodobniť. Berte sondu ako optimalizáciu konzistentnú s politikou, nie ako výsledok autentizácie.

Vopred rozhodnite, čo znamená neistota. Spustenie VPN pri neistote je bezpečné pre klienta, ktorý by sa jednoducho nepripojil; preskočenie pri neistote bezpečné nie je. Sondu obmedzte a čítajte aktívne rozhranie, namiesto toho, aby ste predpokladali prvé v zozname. Sonda, ktorá visí, je horšia než tá, ktorá odpovie nie, pretože na ňu unit čaká.

Zapíšte tieto predpoklady vedľa súboru unitu, aby ďalší človek vedel, čomu pomocník verí. Komentár na začiatku skriptu je najlacnejšie miesto, kde ich uchovať.

Zvládnite presun medzi sieťami

Podmienka sa spustí pri štarte služby a neskôr sa znova nevyhodnocuje. Preskočený unit zostane preskočený, aj keď sa notebook presunie do kaviarne, a bežiaci tunel zostane hore, aj keď sa notebook vráti domov. Prepojte životný cyklus zmeny siete s rozhodnutím o štarte a zastavení pomocou samostatného mechanizmu.

systemctl cat home-vpn.service

Otestujte štyri prípady: štart doma, štart mimo domu, sondu, ktorá nemôže bežať, a presun medzi sieťami, keď je unit aktívny. Držte dôvod preskočenia viditeľný v žurnáli, aby úmyselné rozhodnutie nikdy nevyzeralo ako zlyhanie autentizácie. Referencia služby dokumentuje sémantiku návratov a minimálnu verziu.

Súvisiace články