Systemd yoki NetworkManager: yuklanishda VPNni kim ishga tushiradi?
Uch mexanizm bir xil Ubuntu profilini ko’tarishi mumkin, har birining triggeri boshqacha. Ularni solishtiring, bitta egasini qoldiring va dublikatni olib tashlang.
Bir xil obrazdan chiqqan ikkita Ubuntu mashinasi, bitta VPN profili, kirishda qarama-qarshi natijalar: birida ish stoli ko’rinishidan oldin tunnel ko’tarilgan, ikkinchisida u hech qachon ko’tarilmaydi. Bu yerda profil o’zgaruvchi emas. Farq uchta komponentdan qaysi biriga uni ishga tushirish buyurilganida, va bu uchtasi bitta kalitni bo’lishmaydi.
Ularni yonma-yon solishtirish taxmin qilishdan tezroq. Har biri tanib bo’ladigan tarzda muvaffaqiyatsizlikka uchraydi, shuning uchun solishtirishning ma’nosi bor.
Uch xil triggerli uch ishga tushiruvchi
Paketlangan openvpn xizmati eng eski yo’l. Uning init skripti /etc/default/openvpn dan avtomatik ishga tushirish ro’yxatini o’qiydi. Agar bu ro’yxat izohga olingan yoki bo’sh qoldirilgan bo’lsa, skript siz qo’shgan bitta konfiguratsiya o’rniga o’sha papkada topilgan har bir konfiguratsiyani ishga tushiradi. Bitta tunnel uchun qo’shilgan bitta fayl jim ravishda bir nechtasini ko’tarishi mumkin.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
Odamlar noto’g’ri sozlaydigan narsa — ikkinchi qator. NetworkManager import qilingan profilni saqlaydi va uni ishga tushiradi, lekin faqat boshqa ulanishning ikkilamchi qismi sifatida, ya’ni trigger VPNga emas, tarmoq bog’lanishiga tegishli.
Sozlash xarajati va qamrovini solishtiring
Init skripti yo’li bitta qatorga tushadi va mashinadagi har bir konfiguratsiyani qamrab oladi. Bu marshrutizator uchun to’g’ri, turli tarmoqlarga ulanadigan noutbuk uchun noto’g’ri. NetworkManager yo’li UUID qidiruviga tushadi va tunnelni bitta asosiy ulanishga bog’laydi. U ishdagi SSIDda ko’tariladi, mehmonxona tarmog’ida pastda qoladi.
Qo’lda yozilgan unit eng qimmat va boshqa xizmatlarga nisbatan tartibni ham qo’shib, eng ko’p nazorat beradi. Hal qiluvchi omil — qamrov. Agar mashinada bitta tarmoq va bitta tunnel bo’lsa, paketlangan xizmat halol va oldindan aytib bo’ladigan. Agar tunnel ma’lum bir Wi-Fi tarmog’ini kuzatishi kerak bo’lsa, uchtadan faqat ikkilamchi qism bu shartni qo’shimcha skriptsiz ifodalaydi.
Bitta egasini tanlang va qolganlarini olib tashlang
Ikki egasi ishga tushiradigan profil yuklanishlar orasida o’zgaradigan vaqt hosil qiladi, bu esa har qanday mexanizmning yakka holatidan yomonroq. Egasini tanlang, keyin raqib yo’lni tasodifan emas, ataylab o’chiring.
# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'
# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"
Agar bekor qilinayotgan yo’l paketlangan yo’l bo’lsa, to’g’ri tartibda qiling: AUTOSTART ni none ga qo’ying, hosil qilingan unitlar yangi ro’yxatni olishi uchun systemctl daemon-reload ni ishga tushiring, so’ng endi kerak bo’lmagan shablon nusxasini o’chiring. Qayta yuklashni o’tkazib yuborish eski unitlarni faol qoldiradi va o’zgarish hech qanday ta’sir qilmagandek ko’rinadi.
Osilib qoladigan to’xtatish — javobi cheklangan alohida muammo. TimeoutStopSec systemd SIGKILL yuborishdan oldin qancha kutishini cheklaydi. Uni sozlash uchun to’g’ri joy — drop-in fayli, chunki paketlangan unitni tahrirlash o’zgarishni keyingi yangilanishda yo’qotadi.
Aslida nima ishga tushganini tekshiring
Qayta yuklang va konfiguratsiya fayliga ishonish o’rniga dalillarni o’qing. Tunnelga ega unit faol holat va yuklanishga mos keladigan boshlanish vaqt tamg’asini ko’rsatadi, VPN interfeysi esa siz kirishingizdan oldin mavjud bo’ladi.
systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0
Bu yerga yana bitta tekshiruv to’g’ri keladi: unitning ExecStart siz o’ylagan binarga ishora qilishiga ishonch hosil qiling. Mahalliy kompilyatsiya qilingan klient yoki snap paketi ko’pincha aniq yo’l yoki snap run o’ramini talab qiladi, chunki systemd sizning qobig’ingizning qidiruv tartibini meros olmaydi. command -v openvpn ni unit fayli bilan solishtirish buni bir necha soniyada hal qiladi.
Tanlangan egasini mashinaning eslatmalariga, profil nomi yoniga yozing. Yo’qolgan tunnelni tuzatadigan keyingi odam solishtirishni takrorlamay, o’sha qatordan boshlaydi.