VPN-ul rețelei de acasă nu are nimic de făcut când laptopul se află deja în acea rețea. Scurtătura tentantă este o comandă de pregătire care iese cu un cod diferit de zero; aceasta face unitatea să eșueze și face ca fiecare panou să pară defect. systemd are o directivă pentru exact acest tip de decizie, iar ea separă o omitere deliberată de o defecțiune reală. A face acest lucru corect înseamnă în principal să notați ce înseamnă fiecare cod de ieșire.

De ce o precondiție eșuată este forma greșită

ExecStartPre tratează o ieșire diferită de zero ca pe o eroare de pornire, ceea ce este corect pentru o comandă care pregătește serviciul. Folosirea ei ca condiție face ca o decizie de politică să fie imposibil de distins de o dependență defectă. ExecCondition există pentru ca o unitate să poată refuza pornirea fără a fi marcată ca eșuată.

Acea distincție contează la ora trei dimineața, când nimeni nu vrea să trieze o unitate roșie care se comporta conform proiectării. O unitate eșuată ascunde și defecțiunile reale dintre cele intenționate.

Scrieți mai întâi contractul codurilor de ieșire

Scrieți contractul înaintea scriptului. Ieșirea zero înseamnă continuare, ieșirea unu înseamnă omiterea comenzilor de pornire rămase, iar ieșirea 255 înseamnă că însăși condiția nu a putut rula. Codurile dintre doi și 254 înseamnă de obicei tot omitere, ceea ce este ușor de uitat când ajutorul returnează un cod de eroare aleatoriu. Fișierul drop-in de mai jos atașează ajutorul la numele real al unității.

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

Verificați unitatea efectivă pentru setări SuccessExitStatus sau stop-post moștenite înainte de a presupune semantica implicită. Apoi testați deliberat fiecare dintre cele trei rezultate.

Un indiciu de rețea nu este dovadă a locației

O adresă de router accesibilă sau un MAC cunoscut pot sugera rețeaua corectă, iar niciuna dintre ele nu o dovedește. O altă rețea poate reutiliza aceeași adresă, datele ARP pot fi învechite, iar identificatorii pot fi imitați. Tratați sonda ca pe o optimizare conformă cu politica, nu ca pe un rezultat de autentificare.

Decideți dinainte ce înseamnă incertitudinea. Pornirea VPN-ului când nu sunteți sigur este sigură pentru un client care pur și simplu nu s-ar putea conecta; omiterea lui când nu sunteți sigur nu este. Limitați sonda și citiți interfața activă în loc să presupuneți prima din listă. O sondă care se blochează este mai rea decât una care răspunde nu, pentru că unitatea o așteaptă.

Notați aceste presupuneri lângă fișierul unității ca următoarea persoană să știe în ce crede ajutorul. Un comentariu în capul scriptului este cel mai ieftin loc să le păstrați.

Gestionați trecerea între rețele

Condiția rulează când serviciul pornește și nu este reevaluată mai târziu. O unitate omisă rămâne omisă după ce laptopul se mută într-o cafenea, iar un tunel activ rămâne ridicat după ce laptopul ajunge acasă. Conectați ciclul de viață al schimbării rețelei la decizia de pornire și oprire printr-un mecanism separat.

systemctl cat home-vpn.service

Testați patru cazuri: pornirea acasă, pornirea în afara casei, o sondă care nu poate rula și o trecere între rețele cât timp unitatea este activă. Păstrați motivul omiterii vizibil în jurnal, astfel încât o decizie intenționată să nu pară niciodată o eroare de autentificare. Referința serviciului documentează semantica ieșirii și versiunea minimă.

Articole similare