Uyqu hookiga qayta ulanish buyrug'ini qo'ying va muammo hal qilingan ko'rinadi. U faqat hook tarmoq mavjud bo'lgandan keyin, mijoz tan oladigan identifikatsiya sifatida, mijoz haqiqatan amalga oshiradigan yo'l orqali ishlaganda hal bo'ladi. Uyg'ongandan keyingi nosozliklarning aksariyati shu uchtadan biri, va ularning hech biri hookning o'zida xato sifatida ko'rinmaydi. Hook baribir muvaffaqiyat qaytaradi.

Nol bilan chiqadigan skript sizga tunnel qaytgan-qaytmaganligi haqida hech narsa aytmadi.

Hook ishlaydi, keyin nima?

#!/bin/sh
case "$1" in
  pre)
    vpn-client disconnect
    ;;
  post)
    vpn-client connect
    ;;
esac

Har bir hodisa hookni ikki marta chaqiradi — o'tishdan oldin va keyin — va unga fazani hamda hodisa nomini beradi. U root sifatida minimal muhitda ishlaydi, shuning uchun mutlaq yo'llar kerak va hech qanday ish stoli sessiyasi o'zgaruvchisini kutmaslik kerak. Ikkala chaqiruvning tez qaytishi faqat skript ishga tushganini bildiradi. Profil keyin ko'tarilganmi, bu alohida kuzatuv va jurnalda o'z dalilini talab qiladi.

Faza argumentini dizaynning bir qismi deb biling. pre fazasidagi qayta ulanish urinishi mashina hamma narsani yo'qotish arafasida bo'lganda yuz beradi va muvaffaqiyat qozona olmaydi.

Root, minimal muhit, noto'g'ri foydalanuvchi

Agar mijoz kirish tokenini har bir foydalanuvchi uchun saqlasa, hookni root sifatida ishga tushirish unga taqdim etadigan hech narsa qoldirmaydi. Holatni hook haqiqatan ishlatadigan identifikatsiya ostida tekshiring, ish stoli terminalidan sinab ko'rgan identifikatsiya ostida emas. Ba'zi buildlar uzilishdan keyin interfeysni ushlab turadigan demonni ham qoldiradi, shuning uchun qayta ulanish eskirgan holatga tushadi va jarayonni oldin tozalash uni nopok o'chirish evaziga tiklaydi. Faqat baxtli yo'lni sinasangiz, ikkala xatti-harakat ham ko'rinmaydi.

Hookni mutlaq yo'llar bilan yozing, uni root egaligida va bajariladigan holda saqlang, va nima qilganini jurnalga yozing. O'sha jurnalsiz keyingi tekshiruv noldan boshlanadi.

Avtomatik ulanish VPN yo'li emas

NetworkManager ikkita faollashtirish mexanizmini taklif qiladi: profildagi avtomatik ulanish bayrog'i va asosiy profil faollashganda boshlanadigan ikkilamchi ulanishlar. Mahalliy qurilma turlari birinchisini amalga oshiradi; VPN plaginlari tarixan faqat ikkinchisini amalga oshirgan, shuning uchun OpenVPN profilida avtomatik ulanishni belgilash umuman ta'sir qilmasligi mumkin. Ikkala xususiyatni ham tekshiring, so'ng VPNni Wi-Fi yoki Ethernet profilining ikkilamchisi sifatida ulang.

[Unit]
PartOf=NetworkManager.service
Requires=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service

systemd birligi tomonidan boshqariladigan WireGuard interfeysiga hook o'rniga o'sha qo'shimcha fayl kerak, tarmoq onlayn bo'lgandan keyin tartiblangan.

Tarmoqni kuting, cheklov bilan

timer=1
while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do
  sleep 1; timer=$((timer+1))
  [ $timer -ge 300 ] && exit 0
done
nmcli connection up "work-vpn"

Uyg'onishda tunnel Wi-Fi hali qayta ulanayotganda so'ralishi mumkin, bu har qanday qat'iy uyquni taxminga aylantiradi. Erishish mumkin bo'lgan manzilni kuting, keyin profilni ko'taring va kutishni cheklang, hook uyg'onish yo'lini cheksiz ochiq ushlab turolmasligi uchun. Raqamli indeksdan ko'ra profil nomini afzal ko'ring va agar to'g'ri profil tarmoqqa qarab farq qilsa, sog'lom tunnel o'z tanlovini oldindan faylga yozsin.

Qayta ishga tushirish bo'ronlaridan ham saqlaning, urinishlarni sanab va to'xtang. Har bir muvaffaqiyatsiz tekshiruvga javob beradigan qo'riqchi bitta uzilishni tsiklga aylantiradi.

Tizimni bir marta to'xtatib turing, keyin jurnaldan hookning o'z chiqishini o'qing. Bu tartibni isbotlaydigan yagona sinov.

O'xshash maqolalar