Ob en Hook-Skript déi aner Säit vum Tunnel erreecht, hänkt vun dräi Konditiounen of: u wéi en Evenement et gebonnen ass, ob OpenVPN nach bannent senger Startsequenz ass, wann d’Skript leeft, a ob d’Aarbecht vun där Sequenz getrennt gouf. Déi meescht Skripte schéieren um drëtten. En Sleep bäizesetzen behandelt e Liewenszyklusproblem als Timingproblem, an et funktionéiert just dacks genuch, fir ze täuschen.

Entscheet Iech fir d’éischt den Evenement, dann de Mechanismus fir Aarbecht ze verschieben, dann d’Plaz, wou déi verschob Aarbecht leeft. Déi dräi Entscheedunge sinn onofhängeg, a se ze vermëschen ass wéi en zwee-Zeile Hook en Nomëtteg gëtt.

Firwat den Hook op en Tunnel waart, deen op hie waart

OpenVPN rifft seng Hooks synchron op, bannent deem selwechte Prozess, deen d’Paketen beweegt. up löst aus, wann den tun- oder tap-Apparat existéiert, awer ier eng Route bäigesat gëtt, an route-up no de Routen; kee vun deene Momenter versprécht, datt e Géigendeel äntwert. Soulaang e Skript vun engem vun de Hooks nach leeft, weiderleet den Daemon net, also waartt eng Kommando, déi erwaart, datt den Trafik duerch den Tunnel geet, op en Tunnel, deen op d’Kommando waart. Déi kierfërmeg Waarderei ass de Grond, firwat eng manuell Ausféierung duerchgeet an den Hook an en Timeout leeft.

Den offensichtlechen Patch, e puer Sekonnen ze schlofen, funktionéiert heiansdo, well déi wäit Säit vu sech selwer eropkomm ass, net well de Schlof eppes reparéiert huet. En Hëllefer, deen d’Bereetschaft offreet, ass eng aner Äntwert: den Hook kënnt zréck, d’Weiderleeung fänkt un, an den Hëllefer kritt, wat en brauch, soubal et wierklech do ass.

Wielt den Hook nom Evenement, net nom Komfort

Bindt up un Aarbecht, déi just den Apparat brauch, route-up un Aarbecht, déi Routen brauch, a haalt client-connect an client-disconnect fir Aufgaben pro Client op der Serversäit zréck. D’Botzen beim Trennen muss et aushalen, zweemol ze lafen, well Reconnectiounen iwwer eng persistent Interface net déiselwecht Sequenz wéi en vollstännege Neistart verfollegen. Um Server löst client-connect aus, wann e Client sech authentifizéiert, net wann den Daemon start, wat et wäert ass ze confirméieren, ier d’Logik dohinner geplënnert gëtt. Wann d’Aarbecht zum Liewenszyklus vum Service gehéiert an net zu enger eenzeger Verbindung, ass eng systemd-Unit eng besser Heemecht wéi all Hook.

Hook-Kommandos ginn direkt vum Daemon ausgefouert, ouni Shell dertëscht, also kënnt ifconfig_remote an enger up-Linn als wuertwiertlechen Text un. Wickelt d’Kommando an eng explizit Shell, oder haalt d’Logik an engem Skript, deen d’Ëmwelt liest. ipchange ass eng Direktiv, déi hir eege Argumenter bäisetzt: si gëtt d’Adress an de Port un d’Kommando, also gesäit e Skript, dat fir keen geschriwwe gouf, zwee onerwaart.

Dräi Weeër, fir d’Aarbecht ofzetrennen

Déi éischt Optioun ass, den Hëllefer vun bannen dem Hook an den Hannergrond ze schécken: start en mat setsid oder systemd-run --scope, schléisst déi geierft Deskriptoren a gitt direkt mat Null eraus. Déi zweet ass, den Hook eng kleng Zoustandsdatei schreiwen ze loossen an en systemd-Timer oder eng Pad-Unit drop reagéiere ze loossen, wat den Hook trivial hält an d’Widderhuelungspolitik dohi setzt, wou et Loge gëtt. Déi drëtt ass, den Hook ganz opzeginn an d’Aarbecht an eng Unit ze plënneren, déi nom VPN-Service geuerdnet ass, wat déi richteg Äntwert ass, wann d’Aarbecht guer net pro Verbindung ass. All dräi deelen eng Regel: den Hook muss zréckkommen, ier en den Tunnel brauch.

Wat Dir och wielt, maacht den Hëllefer idempotent an observéierbar. Zwee iwwerlappend Opruffe sollen déiselwecht onëmkéierbar Aktioun net zweemol ausféieren, an en Hëllefer, dee schéiert, muss eppes hannerloossen, wat en Mënsch liese kann.

Trennt Sandbox-Feeler vu Liewenszyklus-Feeler

Wann e Skript vun enger root-Prompt leeft an als Service schéiert, ass d’Ursaach meeschtens eng Sandbox an net d’Netzwierk. Eng limitéierend ProtectHome, eng nëmme-liesbar ProtectSystem, oder en Aarbechtsverzeechnis, dat net existéiert kënnen d’Skript oder seng Daten onerreechbar maachen, an op engem SELinux-Host brauch d’Datei och e Kontext, deen d’Ausféierung erlaabt. Liest d’Unit mat systemctl cat openvpn-server@server an de Journal mat journalctl -u openvpn-server@server -n 80, a sicht dann no engem Berechtegungs- oder Kontextfeeler amplaz vun engem Verbindungstimeout. D’Sandbox desaktivéiere sollt de leschte Schrëtt sinn, net den éischten.

E Liewenszyklusfeeler gesäit anescht aus: den Hook fänkt un, den Hëllefer leeft, an de Socket ass einfach nach net do. Schreift eng Linn mat Zäitstempel aus dem Hook selwer, trennt a verbënnt erëm, a liest d’Evenementer an der Rei. Wann den Hëllefer den Tunnel wierklech brauch, loosst en d’Bereetschaft of froen amplaz eng fix Zäit ze schlofen.

Dräi Felder maachen den nächsten Rapport nëtzlech: wéi en Hook gelaf ass, wéi ee Kont en benotzt huet a wou en opgehalen huet. Ouni si fänkt all spéider Enquête vun uewen un.

Ähnlech Artikelen