Tapetud openconnect: marsruudid ja DNS osutavad endiselt tunnelile
Surnud openconnect-protsess võib jätta paigaldatud marsruudid ja resolveri kirjed. Käige läbi sulgemistee, saatke signaal, mida teie build dokumenteerib, ja puhastage.
Tunnel on maas, aga masin käitub endiselt nii, nagu oleks see üleval: päring ripub, kuni aegub, ja marsruut osutab liidesele, mida enam ei ole. See on openconnect-protsessi allkiri, mis suri ilma oma ühenduse katkestamise abilist käivitamata. Võrguolek, mille see lõi, on endiselt paigaldatud, ja mitte miski muu süsteemis ei tea, kuidas seda eemaldada.
Käige masin läbi selles järjekorras, milles olek loodi: protsess, link, marsruut, resolver. Iga samm ütleb teile, kas klient on tõesti kadunud või ainult teie terminalist lahti haagitud, ja see erinevus otsustab, kas üldse midagi parandada.
Alustage protsessist, mitte konfiguratsioonist
Avage terminal ja küsige, mis veel töötab, enne kui marsruuti puudutate. pgrep -a openconnect loetleb iga eksemplari koos selle argumentidega, mis näitab pid-faili ja skripti, mis sellele anti. Protsess, mida te ei oodanud, selgitab fantoomtunnelit kiiremini kui ükski logi.
Kui midagi ei tööta, vaadake linki. ip link show tun0 ütleb teile, kas liides jäi ellu, ja ip route show dev tun0 loetleb marsruudid, mis on sellega endiselt seotud. Seejärel kontrollige resolverit käsuga resolvectl status. Kirjutage kõik kolm väljundit üles enne nende muutmist, sest just see kirje on see, kuidas te hiljem eristate aegunud kirjet uuest.
Kadunud liides võtab tavaliselt oma marsruudid kaasa. Marsruudid, mis lingist üle elavad, tähendavad tavaliselt, et protsess on endiselt elus või et seadet omab teine klient.
Abiskript on see, mis muudatused tagasi pöörab
openconnect ei eemalda ise liidest, marsruute ega resolveri kirjeid. See kutsub välise abilise, /etc/vpnc/vpnc-script Debian ja Ubuntu pakettides, valitud valikuga /usr/share/vpnc-scripts/vpnc-script Debian ja Ubuntu pakettides, valitud käsuga -s. Sama skript, mis tunnelit püsti paneb, on ka see, mis selle maha võtab.
Kui protsess väljub seda abilist kutsumata, jääb olek alles. OpenConnecti käsiraamat on selgesõnaline, et marsruutimine ja nimeserver ei tööta skriptita õigesti, ja kirjeldab abilist komponendina, mis väljumisel liidese oleku lahti monteerib. Seetõttu on tee oluline, kui käivitate kliendi valikuga -s.
Milline signaal sellele teele jõuab, muutus versioonide vahel. 7.06 käsiraamat käsitleb SIGTERM-i kohese väljumisena, mis jätab skripti vahele. Praegused buildid dokumenteerivad INT ja TERM puhta peatamisena, kus sessioon logitakse välja ja abiline töötab. Lugege selle binaarfaili jaotist SIGNALS, mis teil tegelikult on, selle asemel et eeldada kumbagi käitumist.
man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'
Saatke signaal, mida teie build dokumenteerib
Kui signaal on teada, peatage protsess pid-i järgi, mitte mustri järgi.
pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"
Seejärel korrake kolme kontrolli esimesest jaotisest, selle asemel et väljumisolekut usaldada. ip link show tun0 peaks ebaõnnestuma, ip route show dev tun0 ei peaks midagi välja printima, ja resolvectl status ei peaks enam VPN-linki loetlema.
SIGHUP ei ole stoppnupp: see katkestab ühenduse, käivitab skripti ja jätab sessiooni jätkatavana käsuga --cookie. SIGUSR2 sunnib kohest uuesti ühendumist. SIGKILL jätab puhastamise täielikult vahele, mis on täpselt see olek, millest see artikkel räägib.
Parandage resolver ilma resolv.confi asendamata
Enamikus Ubuntu süsteemides on /etc/resolv.conf sümboolne link systemd-resolvedi, mitte fail, mida peaksite redigeerima. Selle asendamine rikub nimelahenduse igas võrgus, mitte ainult VPN-is. Selle asemel eemaldage tunneli registreerimine:
resolvectl revert tun0
resolvectl query example.com
Kui süsteem kasutab systemd-resolvedi asemel resolvconfi, jääb liidesepõhine kirje püsima, kuni sellele öeldakse link maha jätta, ja resolvconf -d tun0 on samaväärne toiming. Enne käsu valimist kontrollige, millist resolverit kasutatakse.
Päring, mis on endiselt suunatud surnud lingi taga olevale serverile, ripub, kuni aegub, ja see viivitus näeb välja nagu katki läinud DNS-server, mitte nagu üle jäänud marsruut.
Tehke järgmine katkestamine igavaks
Hoidke pid-faili tee käivitamisel ja sulgemisel samana, edastades --pid-file iga kord, või käivitage openconnect üksuse all mille KillSignal vastab signaalile, mida teie versioon dokumenteerib. Esmalt esiplaanil testimine näitab teile sulgemisteateid, mida abiline prindib.
Ühenduge, katkestage ja käivitage kolm kontrolli üks kord. Puhas väljumine ei jäta ühtegi VPN-linki, VPN-marsruuti ega VPN-resolveri kirjet. Kui üks kolmest jääb ellu, teate nüüd, milline komponent puhastamisega hakkama ei saanud. Järgmine uurimine algab siis sellest vastusest, mitte rippuvast päringust.