Hopp over heime-VPN-en med ein systemd ExecCondition
Eit medvite hopp og ein øydelagd førebuingskommando er to ulike utfall. Definer exitkoda til hjelparen, og test deretter flyttinga mellom nettverk.
Heimenettverks-VPN-en har ingenting å gjere når laptopen alt sit på det nettverket. Den freistande snarvegen er ein førebuingskommando som avsluttar med ein kode som ikkje er null; det får uniten til å feile og får kvart dashbord til å sjå øydelagt ut. systemd har eit direktiv for nøyaktig denne typen avgjerd, og det skil eit medvite hopp frå ein ekte feil. Å gjere det rett handlar mest om å skrive ned kva kvar exitkode tyder.
Kvifor ein feilande føresetnad er feil form
ExecStartPre handsamar ein exit som ikkje er null som ein oppstartsfeil, noko som er rett for ein kommando som førebur tenesta. Nytta som vilkår gjer han ei policyavgjerd umogleg å skilje frå ein øydelagd avhengnad. ExecCondition finst for at ein unit skal kunne nekte å starte utan å bli merkt som feila.
Den skilnaden tel klokka tre om natta, når ingen vil triage ein raud unit som oppførte seg som designa. Ein feila unit skjuler òg dei ekte feila blant dei medvitne.
Skriv exitkodekontrakten fyrst
Skriv kontrakten før skriptet. Exit null tyder hald fram, exit éin tyder hopp over dei resterande startkommandoane, og exit 255 tyder at vilkåret sjølv ikkje kunne køyre. Kodar mellom to og 254 tyder vanlegvis òg hopp, noko som er lett å gløyme når ein hjelpar returnerer ein tilfeldig feilkode. Drop-in-fila nedanfor koplar hjelparen til det ekte unitnamnet.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnKontroller den effektive uniten for arva SuccessExitStatus- eller stop-post-innstillingar før du føreset standardsemantikken. Test deretter kvart av dei tre utfalla medvite.
Eit nettverkstips er ikkje bevis for plassering
Ei nåbar rutaradresse eller ein kjend MAC kan antyde rett nettverk, og ingen av dei beviser det. Eit anna nettverk kan bruke same adresse om att, ARP-data kan vere utdaterte, og identifikatorar kan etterliknast. Behandle sonderinga som ein optimalisering som er konsistent med policyen, ikkje som eit autentiseringsresultat.
Bestem på førehand kva usikkerheit tyder. Å starte VPN-en når du er usikker er trygt for ein klient som berre ikkje ville fått samband; å hoppe over han når du er usikker er ikkje trygt. Gjer sonderinga avgrensa, og les det aktive grensesnittet i staden for å føresette det fyrste i lista. Ei sondering som heng er verre enn ei som svarar nei, fordi uniten ventar på henne.
Skriv ned desse føresetnadene ved sida av unitfila slik at neste person veit kva hjelparen trur. Ein kommentar øvst i skriptet er den billegaste staden å oppbevare dei.
Handter flyttinga mellom nettverk
Vilkåret køyrer når tenesta startar, og det blir ikkje vurdert på nytt seinare. Ein overhoppa unit blir verande overhoppa etter at laptopen flyttar til ein kafé, og ein køyrande tunnel blir verande oppe etter at laptopen kjem heim. Kopla livssyklusen til nettverksskiftet til start- og stoppavgjerda med ein eigen mekanisme.
systemctl cat home-vpn.serviceTest fire tilfelle: oppstart heime, oppstart ute, ei sondering som ikkje kan køyre, og ei flytting mellom nettverk medan uniten er aktiv. Hald årsaka til hoppet synleg i journalen slik at ei medvite avgjerd aldri ser ut som ein autentiseringsfeil. Tenestereferansen dokumenterer exit-semantikken og minsteversjonen.