Vaše domácí VPN nemá co dělat, když notebook už v této síti sedí. Lákavou zkratkou je přípravný příkaz, který skončí nenulovým kódem; ten shodí unit a každý dashboard vypadá rozbitý. systemd má direktivu přesně pro takový typ rozhodnutí a odděluje záměrné přeskočení od skutečné poruchy. Udělat to správně znamená hlavně zapsat, co který návratový kód znamená.

Proč je selhávající předpoklad špatný tvar

ExecStartPre považuje nenulový návratový kód za selhání startu, což je správné pro příkaz, který službu připravuje. Použití jako podmínky dělá z politického rozhodnutí něco nerozlišitelného od rozbité závislosti. ExecCondition existuje proto, aby unit mohl odmítnout start, aniž by byl označen jako selhaný.

Tento rozdíl je důležitý ve tři ráno, kdy nikdo nechce třídit červený unit, který se choval podle návrhu. Selhaný unit také skrývá skutečné poruchy mezi záměrnými.

Nejprve napište smlouvu o návratových kódech

Napište smlouvu dřív než skript. Nulový návrat znamená pokračovat, návrat jedna znamená přeskočit zbývající startovací příkazy a návrat 255 znamená, že samotná podmínka nemohla běžet. Kódy mezi dva a 254 obvykle také znamenají přeskočení, na což se snadno zapomene, když pomocník vrátí náhodný kód chyby. Drop-in níže připojí pomocníka ke skutečnému názvu unitu.

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

Než budete předpokládat výchozí sémantiku, zkontrolujte efektivní unit na zděděné SuccessExitStatus nebo stop-post. Pak záměrně otestujte každý ze tří výsledků.

Síťový náznak není důkaz polohy

Dostupná adresa routeru nebo známá MAC mohou naznačit správnou síť a ani jedno to nedokazuje. Jiná síť může používat stejnou adresu, data ARP mohou být zastaralá a identifikátory lze napodobit. Berte sondu jako optimalizaci konzistentní s politikou, ne jako výsledek autentizace.

Předem rozhodněte, co znamená nejistota. Spuštění VPN při nejistotě je bezpečné pro klienta, který by se prostě nepřipojil; přeskočení při nejistotě bezpečné není. Sondu omezte a čtěte aktivní rozhraní, místo abyste předpokládali první v seznamu. Sonda, která visí, je horší než ta, která odpoví ne, protože na ni unit čeká.

Zapište tyto předpoklady vedle souboru unitu, aby další člověk věděl, čemu pomocník věří. Komentář na začátku skriptu je nejlevnější místo, kde je uchovat.

Zvládněte přesun mezi sítěmi

Podmínka se spustí při startu služby a později se znovu nevyhodnocuje. Přeskočený unit zůstane přeskočený, i když se notebook přesune do kavárny, a běžící tunel zůstane nahoře, i když se notebook vrátí domů. Spojte životní cyklus změny sítě s rozhodnutím o startu a zastavení pomocí samostatného mechanismu.

systemctl cat home-vpn.service

Otestujte čtyři případy: start doma, start mimo domov, sondu, která nemůže běžet, a přesun mezi sítěmi, když je unit aktivní. Držte důvod přeskočení viditelný v žurnálu, aby záměrné rozhodnutí nikdy nevypadalo jako selhání autentizace. Reference služby dokumentuje sémantiku návratů a minimální verzi.

Související články