Уйку илгегине кайра туташуу буйругун кой — маселе чечилгендей көрүнөт. Ал илгек тармак пайда болгондон кийин, кардар тааный турган идентификатор катары, кардар чындап ишке ашырган жол менен иштегенде гана чечилет. Ойгондон кийинки каталардын көбү ушул үчөөнүн бири, жана алардын эч бири илгектин өзүндө ката катары көрүнбөйт. Илгек кандай болбосун ийгилик кайтарат.

Нөл менен чыккан скрипт сизге туннелдин кайтып келгени тууралуу эч нерсе айткан жок.

Илгек иштейт, анан эмне?

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

Ар бир окуя илгекти эки жолу чакырат — өтүүнүн алдында жана кийин — ага фазаны жана окуянын атын берет. Ал root катары минималдуу чөйрөдө иштейт, ошондуктан абсолюттук жолдор керек жана эч кандай жумуш үстөлү сессиясынын өзгөрмөсүн күтүүгө болбойт. Эки чакыруунун тез кайтышы скрипттин иштегенин гана билдирет. Профилдин кийин көтөрүлгөнү өзүнчө байкоо жана журналда өз далилин талап кылат.

Фаза аргументин долбоордун бөлүгү катары караңыз. pre фазасындагы кайра туташуу аракети машина баарын жоготууга аз калганда болот жана ийгиликтүү боло албайт.

Root, минималдуу чөйрө, туура эмес колдонуучу

Эгер кардар кирүү токенин ар бир колдонуучу боюнча сактаса, илгекти root катары иштетүү ага сунуштай турган эч нерсе калтырбайт. Абалды илгек чындап колдонгон идентификатордун астында текшер, жумуш үстөлү терминалынан сынаган идентификатордун астында эмес. Айрым курулуштар ажыраткандан кийин интерфейсти кармап турган демонду да калтырат, ошондуктан кайра туташуу эскирген абалга түшөт, ал эми процессти алдын ала тазалоо аны таза эмес өчүрүүнүн баасына калыбына келтирет. Эки жүрүм-турум тең бактылуу жолду гана сынаганда көрүнбөйт.

Илгекти абсолюттук жолдор менен жаз, аны root менчигинде жана аткарылуучу күйүндө карма, жана эмне кылганын журналга жаз. Ошол журналсыз кийинки тергөө нөлдөн башталат.

Автоматтык туташуу VPN жолу эмес

NetworkManager эки активдештирүү механизмин сунуштайт: профилдеги автоматтык туташуу желеги жана негизги профил активдешкенде башталган экинчилик туташуулар. Жергиликтүү түзмөк түрлөрү биринчисин ишке ашырат; VPN кошумчалары тарыхый жактан экинчисин гана ишке ашырган, ошондуктан OpenVPN профилинде автоматтык туташууну белгилөө такыр таасир этпеши мүмкүн. Эки касиетти тең текшер, анан VPN-ды Wi-Fi же Ethernet профилинин экинчилиги катары тирке.

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

systemd бирдиги менен башкарылган WireGuard интерфейсине илгектин ордуна ошол кошумча файл керек, тармак онлайн болгондон кийин иреттелген.

Ойгонууда тармакты күтүңүз, шектеу менен

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"

Ойгонууда туннелди Wi-Fi дагы кайра туташып жатканда сурашы мүмкүн, бул ар кандай туруктуу уйкуну божомолго айландырат. Жеткиликтүү даректи күт, анан профилди көтөр, жана күтүүнү чекте, илгек ойгонуу жолун чексиз ачык кармай албашы үчүн. Сандык индекстен профилдин атын артык көр, эгер туура профил тармакка жараша өзгөрсө, соо туннел тандоосун алдын ала файлга жазып койсун.

Кайра иштетүү бороондорунан да сактаныңыз, аракеттерди санап жана токтоп. Ар бир ийгиликсиз текшерүүгө жооп берген күзөтчү бир тыныгууну циклге айландырат.

Системаны бир жолу токтот, анан журналдан илгектин өз чыгышын оку. Бул тартипти далилдеген жалгыз сынак.

Тектеш макалалар