Jūsų namų tinklo VPN neturi ką veikti, kai nešiojamasis kompiuteris jau yra tame tinkle. Viliojantis trumpasis kelias yra paruošimo komanda, kuri baigiasi ne nuliniu kodu; tai sukelia unit'o gedimą ir kiekviena prietaisų skydelė atrodo sugedusi. systemd turi direktyvą būtent tokiam sprendimui, ir ji atskiria sąmoningą praleidimą nuo tikros klaidos. Teisingai tai padaryti daugiausia reiškia užrašyti, ką reiškia kiekvienas išėjimo kodas.

Kodėl nepavykstanti išankstinė sąlyga yra netinkama forma

ExecStartPre ne nulinį išėjimą laiko paleidimo gedimu, o tai teisinga komandai, kuri paruošia paslaugą. Naudojant ją kaip sąlygą, politikos sprendimas tampa neatskiriamas nuo sugedusios priklausomybės. ExecCondition egzistuoja tam, kad unit'as galėtų atsisakyti paleistis nepažymėtas kaip nepavykęs.

Šis skirtumas svarbus trečią valandą nakties, kai niekas nenori analizuoti raudono unit'o, kuris elgėsi pagal projektą. Nepavykęs unit'as taip pat paslepia tikruosius gedimus tarp sąmoningų.

Pirmiausia parašykite išėjimo kodų sutartį

Parašykite sutartį prieš scenarijų. Išėjimas nuliu reiškia tęsti, išėjimas vienu reiškia praleisti likusias paleidimo komandas, o išėjimas 255 reiškia, kad pati sąlyga negalėjo veikti. Kodai tarp dviejų ir 254 paprastai taip pat reiškia praleisti, ką lengva pamiršti, kai pagalbininkas grąžina atsitiktinį klaidos kodą. Toliau pateiktas drop-in prijungia pagalbininką prie tikrojo unit'o pavadinimo.

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

Prieš manydami numatytąją semantiką patikrinkite efektyvų unit'ą dėl paveldėtų SuccessExitStatus arba stop-post nustatymų. Tada sąmoningai išbandykite kiekvieną iš trijų rezultatų.

Tinklo užuomina nėra vietos įrodymas

Pasiekiamas maršrutizatoriaus adresas arba žinomas MAC gali rodyti tinkamą tinklą, ir nė vienas to neįrodo. Kitas tinklas gali naudoti tą patį adresą, ARP duomenys gali būti pasenę, o identifikatoriai gali būti imituojami. Traktuokite zondą kaip su politika suderintą optimizavimą, o ne kaip autentifikavimo rezultatą.

Iš anksto nuspręskite, ką reiškia neapibrėžtumas. VPN paleidimas nesant tikrumo yra saugus klientui, kuris paprasčiausiai neprisijungtų; jo praleidimas nesant tikrumo nėra saugus. Apribokite zondą ir skaitykite aktyvų sąsają, o ne manykite, kad pirmoji sąraše. Zondas, kuris užstringa, yra blogesnis nei tas, kuris atsako ne, nes unit'as jo laukia.

Užrašykite šias prielaidas šalia unit'o failo, kad kitas žmogus žinotų, kuo tiki pagalbininkas. Komentaras scenarijaus viršuje yra pigiausia vieta jiems laikyti.

Tvarkykite perėjimą tarp tinklų

Sąlyga vykdoma paslaugos paleidimo metu ir vėliau neperskaičiuojama. Praleistas unit'as lieka praleistas po to, kai nešiojamasis kompiuteris persikelia į kavinę, o veikiantis tunelis lieka pakeltas po to, kai nešiojamasis kompiuteris grįžta namo. Susiekite tinklo pasikeitimo gyvavimo ciklą su paleidimo ir sustabdymo sprendimu atskiru mechanizmu.

systemctl cat home-vpn.service

Išbandykite keturis atvejus: paleidimą namuose, paleidimą ne namuose, zondą, kuris negali veikti, ir perėjimą tarp tinklų, kol unit'as aktyvus. Laikykite praleidimo priežastį matomą žurnale, kad sąmoningas sprendimas niekada neatrodytų kaip autentifikavimo gedimas. Paslaugos nuoroda dokumentuoja išėjimo semantiką ir minimalią versiją.

Susiję straipsniai