O’ldirilgan openconnect: marshrutlar va DNS hali ham tunnelga ishora qiladi
O’lgan openconnect jarayoni o’rnatilgan marshrutlar va resolver yozuvlarini qoldirishi mumkin. O’chirish yo’lidan o’ting, build-ingiz hujjatlashtiradigan signalni yuboring va tozalang.
Tunnel o’chirilgan, ammo mashina hali ham u yoniqdek harakat qiladi: so’rov vaqt tugaguncha osilib turadi, marshrut esa endi mavjud bo’lmagan interfeysga ishora qiladi. Bu o’zining uzilish yordamchisini ishga tushirmasdan o’lgan openconnect jarayonining belgisi. U yaratgan tarmoq holati hali ham o’rnatilgan va tizimdagi boshqa hech narsa uni qanday olib tashlashni bilmaydi.
Mashinani holat yaratilgan tartibda aylanib chiqing: jarayon, bog’lanish, marshrut, resolver. Har bir qadam mijoz haqiqatan ketganini yoki faqat terminalingizdan uzilganini aytadi va bu farq biror narsani tuzatish kerakmi-yo’qmi ekanini hal qiladi.
Jarayondan boshlang, konfiguratsiyadan emas
Marshrutga tegishdan oldin terminal oching va hali nima ishlayotganini so’rang. pgrep -a openconnect har bir nusxani argumentlari bilan sanab chiqadi, bu pid faylini va unga berilgan skriptni ko’rsatadi. Kutilmagan jarayon xayoliy tunnelni har qanday jurnaldan tezroq tushuntiradi.
Agar hech narsa ishlamasa, bog’lanishga qarang. ip link show tun0 interfeys omon qolganini aytadi va ip route show dev tun0 hali unga bog’langan marshrutlarni sanaydi. Keyin resolverni bu bilan tekshiring resolvectl status. Ularni o’zgartirishdan oldin uchta chiqishni ham yozib qo’ying, chunki aynan o’sha yozuv keyin eskirgan yozuvni yangisidan ajratish usuli.
Yo’qolgan interfeys odatda marshrutlarini o’zi bilan olib ketadi. Bog’lanishdan keyin qoladigan marshrutlar odatda jarayon hali tirik yoki qurilma ikkinchi mijozga tegishli ekanini bildiradi.
Aynan yordamchi skript o’zgarishlarni qaytaradi
openconnect interfeys, marshrutlar yoki resolver yozuvlarini o’zi olib tashlamaydi. U tashqi yordamchini chaqiradi, /etc/vpnc/vpnc-script upstream build-da va /usr/share/vpnc-scripts/vpnc-script Debian va Ubuntu paketlarida, tanlanadi -s bilan. Tunnelni ko’targan skript uni buzadigan skript ham shu.
Agar jarayon o’sha yordamchini chaqirmasdan chiqsa, holat qoladi. OpenConnect qo’llanmasi skriptsiz marshrutlash va nom xizmati to’g’ri ishlamasligini aniq aytadi va yordamchini chiqishda interfeys holatini buzadigan komponent sifatida tasvirlaydi. Shuning uchun mijozni ishga tushirganda yo’l muhim: -s.
Qaysi signal o’sha yo’lga yetib borishi versiyalar orasida o’zgardi. 7.06 qo’llanmasi SIGTERMni skriptni o’tkazib yuboradigan darhol chiqish deb biladi. Joriy buildlar INT va TERMni sessiya chiqariladi va yordamchi ishlaydigan toza to’xtash deb hujjatlashtiradi. Ikki xulq-atvordan birini taxmin qilish o’rniga qo’lingizdagi binarning SIGNALS bo’limini o’qing.
man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'
Build-ingiz hujjatlashtiradigan signalni yuboring
Signalni bilganingizdan keyin jarayonni naqsh bilan emas, pid bilan to’xtating.
pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"
Keyin chiqish holatiga ishonish o’rniga birinchi bo’limdagi uchta tekshiruvni takrorlang. ip link show tun0 muvaffaqiyatsiz bo’lishi kerak, ip route show dev tun0 hech narsa chop etmasligi kerak va resolvectl status endi VPN bog’lanishini sanamasligi kerak.
SIGHUP to’xtatish tugmasi emas: u uzadi, skriptni ishga tushiradi va sessiyani qayta boshlash mumkin bo’lgan holda qoldiradi: --cookie. SIGUSR2 darhol qayta ulanishga majbur qiladi. SIGKILL tozalashni butunlay o’tkazib yuboradi va bu maqola aynan shu holat haqida.
resolv.confni almashtirmasdan resolverni tuzating
Aksariyat Ubuntu tizimlarida /etc/resolv.conf systemd-resolvedga ramziy havola, siz tahrirlashingiz kerak bo’lgan fayl emas. Uni almashtirish VPN uchun emas, har bir tarmoq uchun nom hal qilishni buzadi. Buning o’rniga tunnel ro’yxatini olib tashlang:
resolvectl revert tun0
resolvectl query example.com
Agar tizim systemd-resolved o’rniga resolvconf ishlatsa, har bir interfeys yozuvi bog’lanishni tashlash aytilgunga qadar qoladi va resolvconf -d tun0 ekvivalent harakat. Buyruqni tanlashdan oldin qaysi resolver ishlatilayotganini tekshiring.
O’lik bog’lanish ortidagi serverga hali ham qaratilgan so’rov vaqt tugaguncha osilib turadi va bu kechikish qolgan marshrutdan ko’ra buzilgan DNS serverga o’xshaydi.
Keyingi uzilishni zerikarli qiling
pid faylining yo’lini ishga tushirish va o’chirishda bir xil saqlang, har safar --pid-file berish orqali yoki openconnectni unit ostida ishga tushiring uning KillSignal versiyangiz hujjatlashtiradigan signalga mos keladi. Avval oldingi planda sinash yordamchi chop etadigan o’chirish xabarlarini ko’rsatadi.
Ulaning, uzing va uchta tekshiruvni bir marta bajaring. Toza chiqish VPN bog’lanishini ham, VPN marshrutini ham, VPN resolver yozuvini ham qoldirmaydi. Uchtadan biri omon qolsa, qaysi komponent tozalay olmaganini endi bilasiz. Keyingi tekshiruv o’shanda osilgan so’rovdan emas, o’sha javobdan boshlanadi.