At koble en afhængig tjeneste til tun0.device ligner at abonnere på tunnelen, og det er det ikke. En enhedsenhed afspejler, at grænsefladen findes, hvilket kan forblive sandt gennem en mislykket forbindelse og den genopkobling, der følger. Tjenesten handler så på det forkerte tidspunkt, eller aldrig, afhængigt af om grænsefladen forsvandt ind imellem. Det hook, der beskriver den begivenhed, du faktisk bekymrer dig om, er det, som OpenVPN kalder, ikke det, systemd udleder.

Beslut, hvilken betingelse tjenesten har brug for, før du vælger udløseren, fordi de tre kandidater ikke er udskiftelige.

Hvad enhedsenheden faktisk følger

systemd opretter en enhedsenhed ud fra kernens syn på en netværksgrænseflade, så tun0.device bliver aktiv, når grænsefladen vises, og inaktiv, når den fjernes. Med persist-tun holder en blød genstart grænsefladen på plads, så enheden flapper aldrig, og intet bundet til den udløses. Selv uden persistens siger enheden intet om ruter, DNS eller om den fjerne ende svarer.

Det gør den til en dårlig stedfortræder for 'VPN'et er klar'. En lytter, der kun har brug for den lokale adresse, kan være tilfreds med grænsefladens eksistens, mens en tjeneste, der kalder en applikation på det fjerne netværk, har brug for ruter og tilgængelighed, som enhedsenheden ikke kan udtrykke.

up, route-up og up-restart betyder forskellige ting

up kører, efter at TUN/TAP-enheden er åbnet, og grænsefladen er konfigureret, hvilket er det rigtige tidspunkt for en lytter, der binder den tildelte adresse. route-up kører, efter at ruter er installeret, underlagt enhver konfigureret ruteforsinkelse, og passer til arbejde, der kræver, at rutefasen er færdig. Ingen af dem beviser, at den fjerne applikation svarer. At vælge mellem dem er et spørgsmål om, hvad tjenesten har brug for, ikke om hvilket hook der lyder mere færdigt.

Med persist-tun genbruger genstarter enheden, så up kører ikke igen, medmindre up-restart er sat. Den indstilling aktiverer up-scriptet til den dokumenterede genstarts-livscyklus, og dets miljø er reduceret sammenlignet med en første start. Et script, der antager det fulde miljø, virker ved den første forbindelse og fejler ved den næste.

Send handlingen uden at vente på den

Et hook, der kalder systemctl restart synkront, kan gå i baglås mod en enhed, hvis rækkefølge venter på tunnelen. systemctl --no-block try-restart vpn-dependent.service sætter jobbet i kø og vender tilbage, hvilket forhindrer hooket i at blokere den forbindelse, det reagerede på. try-restart virker kun på en kørende enhed, mens restart også starter en inaktiv en; vælg bevidst, ikke af vane.

At sætte i kø er ikke verifikation. Hooket returnerer succes, så snart jobbet er accepteret, så kontrollen skal ske i målenhedens journal eller i dens faktiske lyttertilstand.

Genstartspolitik bor i enheden, ikke i hooket

En oneshot-enhed med RemainAfterExit=yes forbliver aktiv, efter at dens kommando afsluttes, og en anden startanmodning gør intet, fordi systemd anser den for allerede startet. Det er en egenskab, man designer omkring, ikke en fejl, man omgår med gentagne startkald. Hvis handlingen skal køre pr. forbindelse, har enheden brug for en form, der tillader det.

After= ordner enheder, og BindsTo= binder levetider, men ingen af dem betyder 'genstart dette, hver gang VPN'et genopkobler'. En enhed bundet til tunnelen stopper, når tunnelen stopper; den genstarter ikke sig selv, når tunnelen vender tilbage, medmindre noget starter den igen.

Test tre genopkoblinger, ikke én

Kold opstart, en fuld klientgenstart og en blød genopkobling øver hver en forskellig vej. Den bløde genopkobling er den, der afslører et manglende up-restart, et reduceret miljø eller en enhedsenhed, der aldrig blev inaktiv. Kør alle tre og bekræft begge retninger: tjenesten handler, når tunnelen kommer op, og den genstarter ikke ved urelaterede linkændringer som Wi-Fi-roaming.

Behold en uafhængig genopretningsvej, når den afhængige tjeneste bærer din egen administrative adgang. Et hook, der genstarter det, du er forbundet gennem, er en ændring, der kan låse dig ude.

Relaterede artikler