OpenVPN-DNS bleift no SIGKILL iwwereg: kontrolléiert fir d'éischt de Besëtzer
SIGKILL kann den down-Hook vun OpenVPN net ausféieren, awer systemd-resolved kann DNS pro Verbindung trotzdem ewechgeheien. Entscheet, wat opgehalen huet, wien den Resolver besëtzt a wat iwwereg bleift.
DNS hält op ze léisen, nodeems en OpenVPN-Client ëmbruecht gouf, an den éischten Impuls ass, /etc/resolv.conf nei ze schreiwen. Dee Changement kann e funktionéierende Resolver zerbriechen, während de richtege verhalte Staat soss anzwousch läit. D'Fro, déi fir d'éischt muss gekläert ginn, ass wien d'DNS-Astellunge besëtzt, déi den Tunnel installéiert huet, an ob dee Ofschloss, deen d'Botzen iwwersprongen huet, wierklech eng Roll gespillt huet.
Dräi Bedingunge bestëmmen d'Reparatur: de Signal, deen de Prozess fäerdeg gemaach huet, d'Resolver-Komponent, déi d'Astellunge kritt huet, an ob d'Verbindung vum Tunnel nach existéiert. Äntwert se an där Rei a meeschtens kënnt d'Korrektur, ouni eng global Datei ze beréieren.
Entscheet, wéi eng Zort Ofschloss geschitt ass
An der Community-Eduktioun vum OpenVPN si souwuel SIGINT wéi och SIGTERM Ufroe fir en uerdentlechen Ofschloss. SIGKILL ka net gefaange ginn: en ka weder blockéiert nach behandelt ginn, also kritt keng Shutdown-Routine eng Chance ze lafen. En normale Ctrl+C an engem Terminal am Virgrond generéiert SIGINT, während en Iwwerwaacher, deen d'Warde opgëtt, meeschtens op SIGKILL eskaléiert. Den Ënnerscheed ass wichteg, well just den zweete Fall garantéiert, datt d'Hooks iwwerspronge goufen.
An screen oder tmux lafen ännert net, wéi ee Signal Ctrl+C schéckt. Kontrolléiert, wat de Prozess tatsächlech kritt huet, net wat den Terminal normalerweis mécht.
Wann en Déngscht oder e Verbindungsmanager den Tunnel lafe léisst, stoppt déi eng Verbindung iwwer hire Besëtzer amplaz de pid ëmzebréngen. E Manager kann de Prozess erëm eropbréngen an Iech en neien Tunnel an en duerchernee Resolver-Staat hannerloossen. E selbstännege Prozess brauch just eng gewéinlech Beendigungsufro, fir datt d'Botzen leeft.
Entscheet, wien den Resolver besëtzt
systemd-resolved, e Skript am resolvconf-Stil an eng einfach Nei-Schreiwung vun enger Datei sinn dräi verschidde Besëtzer. Den éischte behält Astellunge pro Verbindung am Späicher a werft se ewech, wann d'Interface verschwënnt. Den zweeten behält Opzeechnunge, déi bleiwen, bis eppes se ewech hëlt. Den drëtten schreift eng Datei a léisst d'Restauratioun deemjenegen, deen se geschriwwen huet.
Identifizéiert de Besëtzer, ier Dir eng Reparaturkommando sicht. Déiselwecht Symptomer huet dräi verschidde richteg Äntwerten, jee nodeem wien am Gebrauch ass.
En VPN, dee vum NetworkManager geréiert gëtt, besëtzt vläicht schonn d'Resolver-Ännerungen. En zweeten Hëllefer drop setzen schaaft zwee Besëtzer, déi ëm déi selwecht Verbindung konkurréieren, an de Staat vum Verléierer kënnt beim nächste Widder-Verbannen erëm. Wann e Manager zoustänneg ass, korrigéiert d'Astellung am Manager amplaz an engem Skript.
Wat den down-Hook kann an wat net
D'Skript down leeft eemol, nodeems dat TUN/TAP-Gerät zou gemaach gouf. D'Derbäisetzen vun down-pre dréit dës Rei ëm an ausféiert d'Skript, während d'Gerät nach existéiert, wat Hëllefer brauchen, déi déi lieweg Verbindung brauchen.
Keng vun den zwee Direktive léisst en Hook nom SIGKILL lafen. Privilegien ginn och net duerch down-pre restauréiert: wann den Daemon op user oder group fällt oder an eng chroot geet, leeft den Hook mam Zougrëff, deen him dat léisst. En opgeruffene Hook kann awer nach ëmmer fale beim Resolver aktualiséieren. OpenVPN-Referenz deckt d'Signaler an de Liewenszyklus vum Callback of.
Kontrolléiert de Feeler vum Hook selwer nieft dem Exit-Status vum Prozess. Eng fehlend Botzen an eng feelgeschlo Botzen gesi beim Resolver d'selwecht aus an an de Loggen anescht.
Kontrolléiert de Staat, deen tatsächlech iwwereg bleift
Op engem System, deen systemd-resolved benotzt, weist resolvectl status, wéi eng Verbindung nach ëmmer d'DNS-Server oder Routing-Domaine vum VPN dréit. Déi Verbindung kann zu enger Connexion gehéieren, déi fort ass, oder zu engem aneren Tunnel, dee nach steet.
Eng Interface, déi verschwënnt, hëlt hir Konfiguratioun pro Verbindung mat, also kann en iwwersprongene Hook mat propperem DNS koexistéieren. Wann d'Verbindung nach registréiert ass a just vun der gestoppter Connexion besëtzt gëtt, sollt de Manager, dee se besëtzt, se ewech huelen. Wann en eelere Skript eng global Resolver-Datei nei geschriwwen huet, sicht dann den dokumentéierte Restauratiounsschratt vun deem Skript.
Recuperéiert, ouni eng aner Verbindung ze klauen
Wann d'Astellunge pro Verbindung bei Iech leien, resolvectl revert hëlt den Numm vun der Verbindung an läscht d'Runtime-DNS-Konfiguratioun fir déi Interface. Et ass eng Runtime-Aktioun an net eng Profil-Ännerung, also bleift déi dauerhaft Verbindungskonfiguratioun onberéiert. Nennt Dir déi falsch Verbindung, läscht Dir den DNS vun engem funktionéierenden Tunnel, dofir kommt den Numm aus dem Status-Output.
Bestätegt, datt /etc/resolv.conf e geréierten symbolesche Link ass, ier Dir en ännert, stoppt den Client dann nach eng Kéier normal an kuckt nach eng Kéier op den DNS. Wann den zweete Stopp botzt, war de fréiere Probleem den erzwongenen Ofschloss an net d'Konfiguratioun.