Via hejma reta VPN havas nenion por fari kiam la tekkomputilo jam sidas en tiu reto. La alloga vojo estas prepara komando, kiu eliras per ne-nula kodo; tio malsukcesigas la unuon kaj igas ĉiun panelon aspekti rompita. systemd havas direktivon por ĝuste tia decido, kaj ĝi apartigas intencan salton de vera misfunkcio. Fari ĝin ĝuste temas plejparte pri skribi, kion signifas ĉiu elira kodo.

Kial malsukcesa antaŭkondiĉo estas la malĝusta formo

ExecStartPre traktas ne-nulan eliron kiel lanĉan malsukceson, kio ĝustas por komando, kiu preparas la servon. Uzi ĝin kiel kondiĉon igas regulan decidon nedistingebla de rompita dependaĵo. ExecCondition ekzistas por ke unuo povu rifuzi lanĉiĝi sen esti markita kiel malsukcesa.

Tiu distingo gravas je la tria matene, kiam neniu volas analizi ruĝan unuon, kiu kondutis laŭ la dezajno. Malsukcesa unuo ankaŭ kaŝas la verajn misfunkciojn inter la intencaj.

Unue skribu la kontrakton de eliraj kodoj

Skribu la kontrakton antaŭ la skripto. Eliro nulo signifas daŭrigi, eliro unu signifas salti la ceterajn lanĉajn komandojn, kaj eliro 255 signifas ke la kondiĉo mem ne povis ruliĝi. Kodoj inter du kaj 254 kutime ankaŭ signifas salti, kio facile forgesiĝas kiam helpilo redonas hazardan erarkodon. La drop-in sube ligas la helpilon al la vera unua nomo.

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

Kontrolu la efektivan unuon pri heredataj SuccessExitStatus aŭ stop-post agordoj antaŭ ol supozi la defaŭltan semantikon. Poste testu ĉiun el la tri rezultoj intence.

Reta indiko ne estas pruvo de loko

Atingebla enkursignala adreso aŭ konata MAC povas sugesti la ĝustan reton, kaj neniu el ili pruvas ĝin. Alia reto povas reuzi la saman adreson, ARP-datumoj povas esti malnovaj, kaj identigiloj povas esti imitataj. Traktu la sondadon kiel optimumigon kongruan kun la regulo, ne kiel rezulton de aŭtentikigo.

Decidu anticipe, kion signifas necerto. Lanĉi la VPN-on kiam vi ne certas estas sekura por kliento, kiu simple malsukcesus konektiĝi; salti ĝin kiam vi ne certas ne estas. Faru la sondadon limigita, kaj legu la aktivan interfacon anstataŭ supozi la unuan en la listo. Sondado, kiu pendas, estas pli malbona ol tiu, kiu respondas ne, ĉar la unuo atendas ĝin.

Notu tiujn supozojn apud la unua dosiero, por ke la sekva persono sciu, kion la helpilo kredas. Komento ĉe la supro de la skripto estas la plej malmultekosta loko por konservi ilin.

Traktu la translokiĝon inter retoj

La kondiĉo ruliĝas kiam la servo lanĉiĝas, kaj ĝi ne ree taksiĝas poste. Saltita unuo restas saltita post kiam la tekkomputilo translokiĝas al kafejo, kaj kuranta tunelo restas supre post kiam la tekkomputilo revenas hejmen. Ligu la vivciklon de retŝanĝo al la lanĉa kaj halta decido per aparta mekanismo.

systemctl cat home-vpn.service

Testu kvar kazojn: lanĉo hejme, lanĉo for de la hejmo, sondadon kiu ne povas ruliĝi, kaj translokiĝon inter retoj dum la unuo estas aktiva. Tenu la kialon de la salto videbla en la ĵurnalo, por ke intenca decido neniam aspektu kiel aŭtentikiga malsukceso. La serva referenco dokumentas la eliran semantikon kaj la minimuman version.

Rilataj artikoloj