Tunelis ir izslēgts, bet iekārta joprojām uzvedas tā, it kā tas būtu ieslēgts: vaicājums karājas, līdz beidzas laiks, un maršruts rāda uz saskarni, kas vairs neeksistē. Tā ir openconnect procesa pazīme, kas nomira, nepalaidis savu atvienošanas palīgu. Tīkla stāvoklis, ko tas radīja, joprojām ir instalēts, un nekas cits sistēmā nezina, kā to noņemt.

Izstaigājiet iekārtu tādā secībā, kādā stāvoklis tika radīts: process, saite, maršruts, resolvers. Katrs solis pasaka, vai klients tiešām ir aizgājis vai tikai atvienojies no jūsu termināļa, un šī atšķirība izšķir, vai vispār ko labot.

Sāciet ar procesu, nevis ar konfigurāciju

Atveriet termināli un pajautājiet, kas vēl darbojas, pirms pieskaraties maršrutam. pgrep -a openconnect uzskaita katru instanci ar tās argumentiem, kas parāda pid failu un tai doto skriptu. Process, kuru negaidījāt, izskaidro fantoma tuneli ātrāk nekā jebkurš žurnāls.

Ja nekas nedarbojas, aplūkojiet saiti. ip link show tun0 pasaka, vai saskarne izdzīvoja, un ip route show dev tun0 uzskaita maršrutus, kas vēl ir tai piesaistīti. Pēc tam pārbaudiet resolveru ar resolvectl status. Pierakstiet visas trīs izvades pirms to maiņas, jo tieši šis ieraksts ir veids, kā vēlāk atšķirt novecojušu ierakstu no jauna.

Pazudusi saskarne parasti paņem līdzi savus maršrutus. Maršruti, kas pārdzīvo saiti, parasti nozīmē, ka process vēl ir dzīvs vai ka ierīci pārvalda otrs klients.

Tieši palīgskripts atsauc izmaiņas

openconnect pats nenoņem saskarni, maršrutus vai resolvera ierakstus. Tas izsauc ārēju palīgu, /etc/vpnc/vpnc-script upstream buildā un /usr/share/vpnc-scripts/vpnc-script Debian un Ubuntu pakotnēs, izvēlēts ar -s. Tas pats skripts, kas paceļ tuneli, to arī izjauc.

Ja process beidzas, neizsaucot šo palīgu, stāvoklis paliek. OpenConnect rokasgrāmata skaidri norāda, ka maršrutēšana un nosaukumu pakalpojums bez skripta nedarbosies pareizi, un raksturo palīgu kā komponentu, kas pie iziešanas izjauc saskarnes stāvokli. Tāpēc ceļš ir svarīgs, kad palaižat klientu ar -s.

Kurš signāls sasniedz šo ceļu, mainījās starp versijām. 7.06 rokasgrāmata SIGTERM uzskata par tūlītēju iziešanu, kas izlaiž skriptu. Pašreizējie buildi dokumentē INT un TERM kā tīru apstāšanos, kur sesija tiek izrakstīta un palīgs darbojas. Lasiet tā binārā faila sadaļu SIGNALS, kas jums tiešām ir, nevis pieņemiet kādu no divām uzvedībām.

man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'

Nosūtiet signālu, ko dokumentē jūsu build

Kad zināt signālu, apturiet procesu pēc pid, nevis pēc modeļa.

pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"

Pēc tam atkārtojiet trīs pārbaudes no pirmās daļas, nevis paļaujieties uz izejas statusu. ip link show tun0 vajadzētu neizdoties, ip route show dev tun0 nevajadzētu neko izdrukāt, un resolvectl status vairs nevajadzētu uzskaitīt VPN saiti.

SIGHUP nav apturēšanas poga: tas atvieno, izpilda skriptu un atstāj sesiju atsāktspējīgu ar --cookie. SIGUSR2 piespiež tūlītēju atkārtotu savienojumu. SIGKILL pilnībā izlaiž sakopšanu, un tas ir tieši tas stāvoklis, par kuru ir šis raksts.

Salabojiet resolveru, neaizstājot resolv.conf

Lielākajā daļā Ubuntu sistēmu /etc/resolv.conf ir simboliska saite uz systemd-resolved, nevis fails, ko jums vajadzētu rediģēt. Tā aizstāšana salauž nosaukumu atrisināšanu visiem tīkliem, ne tikai VPN. Tā vietā noņemiet tuneļa reģistrāciju:

resolvectl revert tun0
resolvectl query example.com

Ja sistēma izmanto resolvconf, nevis systemd-resolved, ieraksts katrai saskarnei paliek, līdz tam pasaka atlaist saiti, un resolvconf -d tun0 ir līdzvērtīga darbība. Pirms komandas izvēles pārbaudiet, kurš resolvers tiek izmantots.

Vaicājums, kas joprojām vērsts uz serveri aiz mirušās saites, karājas, līdz beidzas laiks, un šī aizture izskatās pēc bojāta DNS servera, nevis pēc atlikuša maršruta.

Padariet nākamo atvienošanu garlaicīgu

Turiet pid faila ceļu tādu pašu startējot un izslēdzot, nododot --pid-file katru reizi, vai palaidiet openconnect zem unit kura KillSignal atbilst signālam, ko dokumentē jūsu versija. Testēšana vispirms priekšplānā parāda izslēgšanas ziņojumus, ko izdrukā palīgs.

Savienojieties, atvienojieties un vienreiz izpildiet trīs pārbaudes. Tīra izeja neatstāj ne VPN saiti, ne VPN maršrutu, ne VPN resolvera ierakstu. Ja kāds no trim izdzīvo, tagad jūs zināt, kurš komponents nesakopa. Nākamā izmeklēšana tad sākas no šīs atbildes, nevis no karājoša vaicājuma.

Saistītie raksti