Preskočite domači VPN s systemd ExecCondition
Namerno preskočenje in pokvarjen pripravljalni ukaz sta različna izida. Določite izhodne kode pomočnika in nato preizkusite prehod med omrežji.
Vaš domači omrežni VPN nima kaj početi, ko je prenosnik že v tem omrežju. Mamljiva bližnjica je pripravljalni ukaz, ki se konča z neničelno kodo; to povzroči neuspeh enote in vsaka nadzorna plošča je videti pokvarjena. systemd ima direktivo prav za takšno vrsto odločitve in ločuje namerno preskočenje od resnične okvare. Narediti to pravilno večinoma pomeni zapisati, kaj pomeni vsaka izhodna koda.
Zakaj neuspešen predpogoj ni prava oblika
ExecStartPre obravnava neničelni izhod kot napako pri zagonu, kar je pravilno za ukaz, ki pripravi storitev. Če ga uporabite kot pogoj, politične odločitve ni več mogoče ločiti od pokvarjene odvisnosti. ExecCondition obstaja zato, da lahko enota zavrne zagon, ne da bi bila označena kot neuspešna.
Ta razlika je pomembna ob treh zjutraj, ko nihče ne želi analizirati rdeče enote, ki se je obnašala po načrtu. Neuspešna enota tudi skrije resnične okvare med namernimi.
Najprej napišite pogodbo o izhodnih kodah
Pogodbo napišite pred skriptom. Izhod nič pomeni nadaljevanje, izhod ena pomeni preskočitev preostalih zagonskih ukazov, izhod 255 pa pomeni, da se sam pogoj ni mogel izvesti. Kode med dva in 254 običajno pomenijo tudi preskočitev, kar zlahka pozabite, ko pomočnik vrne naključno kodo napake. Spodnji drop-in pripne pomočnika k pravemu imenu enote.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnPreden privzamete privzeto semantiko, preverite dejavno enoto glede podedovanih nastavitev SuccessExitStatus ali stop-post. Nato namerno preizkusite vsakega od treh izidov.
Omrežni namig ni dokaz o lokaciji
Dosegljiv naslov usmerjevalnika ali znan MAC lahko nakazujeta pravo omrežje in nobeno od tega tega ne dokaže. Drugo omrežje lahko znova uporabi isti naslov, podatki ARP so lahko zastareli, identifikatorje pa je mogoče ponarediti. Sondo obravnavajte kot optimizacijo, skladno s politiko, ne kot rezultat preverjanja pristnosti.
Vnaprej odločite, kaj pomeni negotovost. Zagon VPN-a v negotovosti je varen za odjemalca, ki se preprosto ne bi mogel povezati; preskočitev v negotovosti ni varna. Sondo omejite in berite aktivni vmesnik, namesto da bi privzeli prvega na seznamu. Sonda, ki visi, je slabša od tiste, ki odgovori ne, ker enota nanjo čaka.
Te predpostavke zapišite ob datoteko enote, da bo naslednja oseba vedela, v kaj verjame pomočnik. Komentar na vrhu skripta je najcenejše mesto za njihovo shranjevanje.
Obvladajte prehod med omrežji
Pogoj se izvede ob zagonu storitve in se pozneje ne ovrednoti znova. Preskočena enota ostane preskočena, ko se prenosnik preseli v kavarno, in delujoč tunel ostane vzpostavljen, ko se prenosnik vrne domov. Povežite življenjski cikel spremembe omrežja z odločitvijo o zagonu in ustavitvi prek ločenega mehanizma.
systemctl cat home-vpn.servicePreizkusite štiri primere: zagon doma, zagon zunaj doma, sondo, ki se ne more izvesti, in prehod med omrežji, medtem ko je enota aktivna. V dnevniku ohranite viden razlog za preskočitev, da namerna odločitev nikoli ne bo videti kot neuspeh preverjanja pristnosti. Referenca storitve dokumentira semantiko izhoda in najnižjo različico.