Slaan die tuis-VPN oor met 'n systemd ExecCondition
Om doelbewus oor te slaan en 'n stukkende voorbereidingsopdrag is twee verskillende uitkomste. Bepaal die helper se afloskodes en toets dan die oorskakeling tussen netwerke.
Jou tuisnetwerk-VPN het niks om te doen wanneer die skootrekenaar reeds op daardie netwerk sit nie. Die aanloklike kortpad is 'n voorbereidingsopdrag wat nie nul teruggee nie; dit laat die unit misluk en laat elke kontrolepaneel stukkend lyk. systemd het 'n riglyn vir presies hierdie vorm van besluit, en dit skei 'n doelbewuste oorslaan van 'n werklike fout. Om dit reg te kry, gaan meestal daaroor om neer te skryf wat elke afloskode beteken.
Waarom 'n mislukte voorwaarde die verkeerde vorm is
ExecStartPre beskou 'n nie-nul aflos as 'n opstartfout, wat korrek is vir 'n opdrag wat die diens voorberei. Om dit as 'n voorwaarde te gebruik, maak 'n beleidsbesluit nie te onderskei van 'n stukkende afhanklikheid nie. ExecCondition bestaan sodat 'n unit kan weier om te begin sonder om as misluk gemerk te word.
Daardie onderskeid maak saak om drieuur in die oggend, wanneer niemand 'n rooi unit wil ondersoek wat volgens ontwerp gewerk het nie. 'n Mislukte unit versteek ook die werklike foute tussen die doelbewuste een.
Skryf eers die afloskode-kontrak
Skryf die kontrak voor die script. Aflos nul beteken gaan voort, aflos een beteken slaan die oorblywende opstartopdragte oor, en aflos 255 beteken die voorwaarde self kon nie loop nie. Kodes tussen twee en 254 beteken gewoonlik ook oorslaan, wat maklik vergeet word wanneer 'n helper 'n toevallige foutkode teruggee. Die drop-in hieronder koppel die helper aan die werklike unitnaam.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnKontroleer die effektiewe unit vir geërfde SuccessExitStatus- of stop-post-instellings voordat jy verstek-semantiek aanvaar. Toets dan elk van die drie uitkomste doelbewus.
'n Netwerkaanduiding is nie bewys van ligging nie
'n Bereikbare routeradres of 'n bekende MAC kan die regte netwerk voorstel, en nie een bewys dit nie. 'n Ander netwerk kan dieselfde adres hergebruik, ARP-data kan verouderd wees, en identifiseerders kan nagemaak word. Behandel die peiling as 'n optimalisering wat met beleid ooreenstem, nie as 'n verifikasie-uitslag nie.
Besluit vooraf wat onsekerheid beteken. Om die VPN te begin wanneer jy onseker is, is veilig vir 'n kliënt wat bloot sou misluk om te verbind; om dit oor te slaan wanneer jy onseker is, is nie. Maak die peiling begrens, en lees die aktiewe koppelvlak eerder as om aan te neem die eerste een in die lys. 'n Peiling wat hang is erger as een wat nee antwoord, want die unit wag vir hom.
Teken daardie aannames langs die unit-lêer aan sodat die volgende persoon weet wat die helper glo. 'n Kommentaar bo-aan die script is die goedkoopste plek om hulle te hou.
Hanteer die beweging tussen netwerke
Die voorwaarde loop wanneer die diens begin, en dit herevalueer nie later nie. 'n Oorgeslaande unit bly oorgeslaan nadat die skootrekenaar na 'n koffiewinkel skuif, en 'n lopende tonnel bly op nadat die skootrekenaar by die huis kom. Koppel die netwerkverandering-lewensiklus aan die begin- en stopbesluit met 'n aparte meganisme.
systemctl cat home-vpn.serviceToets vier gevalle: opstart by die huis, opstart weg van die huis, 'n peiling wat nie kan loop nie, en 'n beweging tussen netwerke terwyl die unit aktief is. Hou die rede vir oorslaan sigbaar in die joernaal sodat 'n doelbewuste besluit nooit soos 'n verifikasiefout lyk nie. Die diensverwysing dokumenteer die aflos-semantiek en die minimum weergawe.