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.

StarterWhat triggers itTypical failure
Init script and templated unitsBoot, plus anything in the autostart listStarts every config, not the one you meant
NetworkManager secondaryActivation of the base Wi-Fi or Ethernet profileNothing happens until that base link comes up
Hand-written unit or wrapperWhatever its WantedBy and ExecStart sayRuns 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.

O'xshash maqolalar