Preskočite kućni VPN uz systemd ExecCondition
Namjerno preskakanje i pokvarena pripremna naredba različiti su ishodi. Definirajte izlazne kodove pomoćnika, pa testirajte prelazak između mreža.
Vaš kućni VPN nema šta raditi kada laptop već sjedi na toj mreži. Primamljiv prečac je pripremna naredba koja izlazi s nenultim kodom; ona obara unit i čini svaku nadzornu ploču pokvarenom. systemd ima direktivu upravo za takav oblik odluke i ona odvaja namjerno preskakanje od stvarne greške. Uraditi to ispravno uglavnom znači zapisati šta znači svaki izlazni kod.
Zašto neuspješan preduslov nije pravi oblik
ExecStartPre tretira nenulti izlaz kao neuspjeh pri pokretanju, što je ispravno za naredbu koja priprema servis. Korištenje iste kao uslova čini političku odluku nerazlučivom od pokvarene zavisnosti. ExecCondition postoji da bi unit mogao odbiti pokretanje, a da ne bude označen kao neuspješan.
Ta razlika je važna u tri sata ujutro, kada niko ne želi analizirati crveni unit koji se ponašao po dizajnu. Neuspješan unit također skriva stvarne kvarove među namjernima.
Prvo napišite ugovor o izlaznim kodovima
Napišite ugovor prije skripte. Izlaz nula znači nastavak, izlaz jedan znači preskakanje preostalih naredbi za pokretanje, a izlaz 255 znači da sam uslov nije mogao raditi. Kodovi između dva i 254 obično također znače preskakanje, što je lako zaboraviti kada pomoćnik vrati slučajan kod greške. Drop-in ispod veže pomoćnika za stvarno ime unita.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnProvjerite efektivni unit na naslijeđene SuccessExitStatus ili stop-post postavke prije nego pretpostavite zadanu semantiku. Zatim namjerno testirajte svaki od tri ishoda.
Mrežni nagovještaj nije dokaz lokacije
Dostupna adresa rutera ili poznati MAC mogu sugerisati pravu mrežu, a nijedno to ne dokazuje. Druga mreža može koristiti istu adresu, ARP podaci mogu biti zastarjeli, a identifikatori se mogu oponašati. Tretirajte provjeru kao optimizaciju usklađenu s politikom, ne kao rezultat autentifikacije.
Unaprijed odlučite šta znači neizvjesnost. Pokretanje VPN-a kada niste sigurni sigurno je za klijenta koji jednostavno ne bi mogao uspostaviti vezu; preskakanje kada niste sigurni nije. Neka provjera bude ograničena i čitajte aktivni interfejs umjesto da pretpostavljate prvi na listi. Provjera koja visi gora je od one koja odgovori ne, jer unit čeka na nju.
Zapišite te pretpostavke uz datoteku unita da sljedeća osoba zna šta pomoćnik vjeruje. Komentar na vrhu skripte najjeftinije je mjesto da ih sačuvate.
Rukovanje prelaskom između mreža
Uslov se izvršava pri pokretanju servisa i ne procjenjuje se ponovo kasnije. Preskočeni unit ostaje preskočen nakon što se laptop premjesti u kafić, a aktivni tunel ostaje podignut nakon što se laptop vrati kući. Povežite životni ciklus promjene mreže s odlukom o pokretanju i zaustavljanju pomoću zasebnog mehanizma.
systemctl cat home-vpn.serviceTestirajte četiri slučaja: pokretanje kod kuće, pokretanje izvan kuće, provjeru koja ne može raditi i prelazak između mreža dok je unit aktivan. Držite razlog preskakanja vidljivim u dnevniku kako namjerna odluka nikada ne bi izgledala kao neuspjeh autentifikacije. Referenca servisa dokumentuje semantiku izlaza i minimalnu verziju.