Змесціце каманду перападлучэння ў хук сну — і праблема выглядае вырашанай. Яна вырашана толькі тады, калі хук запусціцца пасля з'яўлення сеткі, ад імя ідэнтычнасці, якую кліент пазнае, праз шлях, які кліент сапраўды рэалізуе. Большасць збояў пасля прабуджэння — гэта адно з гэтых трох, і ніводзін з іх не паказваецца як памылка ў самім хуку. Хук у любым выпадку вяртае поспех.

Скрыпт, які выходзіць з нулём, нічога не кажа пра тое, ці вярнуўся тунель.

Хук запускаецца, і што далей?

#!/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

Інтэрфейс WireGuard, якім кіруе юніт systemd, мае патрэбу менавіта ў гэтым дадатковым файле, а не ў хуку, і павінен ісці пасля таго, як сетка стане анлайн.

Чакайце сетку, але з мяжой

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 яшчэ перападключаецца, што робіць любы фіксаваны сон здагадкай. Дачакайцеся даступнага адраса, потым падніміце профіль і абмяжуйце чаканне, каб хук не мог трымаць шлях прабуджэння адкрытым бясконца. Аддавайце перавагу назве профілю перад лікавым індэксам, і калі правільны профіль залежыць ад сеткі, няхай здаровы тунель запіша свой выбар у файл загадзя.

Сцеражыцеся і бур перазапускаў: лічыце спробы і спыняйцеся. Вартаўнік, які рэагуе на кожную няўдалую праверку, ператварае адзін збой у цыкл.

Прыпыніце сістэму адзін раз, потым прачытайце журнал на прадмет уласнага вываду хука. Гэта адзіны тэст, які даказвае парадак.

Падобныя артыкулы