OpenVPN DNS ostaje nakon SIGKILL: prvo proverite vlasnika
SIGKILL ne može da pokrene down kuku OpenVPN-a, ali systemd-resolved ipak može da odbaci DNS po vezi. Odlučite šta je izašlo, ko poseduje resolver i šta je ostalo.
DNS prestaje da razrešava nakon što se OpenVPN klijent ubije, a prvi poriv je prepisati /etc/resolv.conf. Ta izmena može da pokvari ispravan resolver dok stvarno zastarelo stanje sedi negde drugde. Pitanje koje treba prvo rešiti jeste ko poseduje DNS postavke koje je tunel instalirao i da li je izlaz koji je preskočio čišćenje zaista bio važan.
Tri uslova odlučuju popravku: signal koji je završio proces, komponenta resolvera koja je primila postavke i da li veza tunela još postoji. Odgovorite tim redom i popravka obično sledi bez diranja globalne datoteke.
Odlučite kakav je izlaz nastupio
U Community izdanju OpenVPN, i SIGINT i SIGTERM su zahtevi za uredan izlaz. SIGKILL ne može da se uhvati: ne može da se blokira niti obradi, pa nijedna rutina gašenja ne dobija priliku da se izvrši. Običan Ctrl+C u terminalu u prvom planu stvara SIGINT, dok supervizor koji odustane od čekanja obično eskalira na SIGKILL. Razlika je važna jer samo drugi slučaj garantuje da su kuke preskočene.
Rad unutar screen ili tmux ne menja koji signal šalje Ctrl+C. Proverite šta je proces zaista primio, a ne šta terminal obično radi.
Kada tunel pokreće servis ili menadžer veza, zaustavite tu jednu vezu kroz njenog vlasnika umesto da ubijete pid. Menadžer može ponovo da podigne proces, ostavljajući vam nov tunel i zbunjujuće stanje resolvera. Samostalnom procesu je potreban samo običan zahtev za prekid da bi se čišćenje izvršilo.
Odlučite ko poseduje resolver
systemd-resolved, skripta u stilu resolvconf i obično prepisivanje datoteke su tri različita vlasnika. Prvi drži postavke po vezi u memoriji i odbacuje ih kada interfejs nestane. Drugi drži zapise koji ostaju dok ih nešto ne ukloni. Treći upisuje datoteku i prepušta vraćanje onome ko ju je upisao.
Identifikujte vlasnika pre nego što odaberete naredbu za popravku. Isti simptom ima tri različita tačna odgovora u zavisnosti od toga koji je u upotrebi.
VPN kojim upravlja NetworkManager možda već poseduje promene resolvera. Dodavanje drugog pomoćnika povrh toga stvara dva vlasnika koji se takmiče za istu vezu, a stanje gubitnika se vraća pri sledećem ponovnom povezivanju. Ako je menadžer zadužen, popravite postavku u menadžeru, a ne u skripti.
Šta down kuka može i ne može
Skripta down se izvršava jednom nakon što se TUN/TAP uređaj zatvori. Dodavanje down-pre obrće taj redosled i izvršava skriptu dok uređaj još postoji, što zahtevaju pomoćnici kojima treba živa veza.
Nijedna direktiva ne čini da se kuka izvrši nakon SIGKILL. Privilegije se takođe ne vraćaju pomoću down-pre: ako se demon spusti na user ili group ili uđe u chroot, kuka radi s onim pristupom koji joj to ostavi. Pozvana kuka ipak može propustiti da ažurira resolver. OpenVPN referenca pokriva signale i životni ciklus povratnog poziva.
Proverite sopstvenu grešku kuke pored izlaznog statusa procesa. Čišćenje koje nedostaje i čišćenje koje je propalo izgledaju isto u resolveru, a različito u zapisima.
Proverite stanje koje zaista ostaje
Na sistemu koji koristi systemd-resolved, resolvectl status pokazuje koja veza još nosi VPN DNS servere ili domene rutiranja. Ta veza može pripadati spoju kog više nema ili drugom tunelu koji je još podignut.
Interfejs koji nestane nosi sa sobom svoju konfiguraciju po vezi, pa preskočena kuka može postojati uz čist DNS. Ako je veza još registrovana i isključivo je poseduje zaustavljeni spoj, menadžer koji je poseduje treba da je ukloni. Ako je starija skripta prepisala globalnu datoteku resolvera, tražite umesto toga dokumentovani korak vraćanja te skripte.
Oporavite se bez otimanja druge veze
Kada su postavke po vezi vaše za upravljanje, resolvectl revert uzima ime veze i briše DNS konfiguraciju u vreme izvršavanja za taj interfejs. To je radnja u vreme izvršavanja, a ne izmena profila, pa trajna konfiguracija spoja ostaje netaknuta. Imenujte pogrešnu vezu i obrisaćete DNS za tunel koji radi, zato ime dolazi iz izlaza statusa.
Potvrdite da je /etc/resolv.conf upravljana simbolička veza pre nego što je uredite, zatim još jednom normalno zaustavite klijenta i ponovo pogledajte DNS. Ako drugo zaustavljanje očisti, raniji problem je bio prisilni izlaz, a ne konfiguracija.