Скрыпты запускаюць VPN-кліенты на тым узроўні, які абраў аўтар, і гэты ўзровень рэдка бывае тым, які быў патрэбны задачы. Камандны радок пастаўшчыка, дазвоннік аперацыйнай сістэмы і намер мабільнай праграмы вяртаюцца ў розныя моманты жыцця злучэння. Яны і сакрэт апрацоўваюць па-рознаму, і гэтая розніца вырашае, ці бачны пароль кожнаму карыстальніку машыны. Выберыце ўзровень да таго, як напішаце першы радок скрыпта.

Узровень 1: камандны радок пастаўшчыка

Большасць настольных кліентаў пастаўляюць камандны радок, які прымае імя профілю і, занадта часта, пароль. Стары кліент Cisco прымаў дзеяслоў connect з аргументамі карыстальніка і пароля; macOS прадастаўляе ўбудаваную службу праз networksetup; NetworkManager адказвае на nmcli. Гэтыя выклікі вяртаюцца, калі каманда завяршаецца, а гэта не той момант, калі тунель робіцца прыдатным. Прачытайце дакументацыю пастаўшчыка для версіі, якую разгортваеце, бо гэтыя інтэрфейсы змяняюцца, а некаторыя цалкам выдаляюцца.

nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"

Перавага ў тым, што пастаўшчык ведае ўласнае сховішча профіляў, таму выклік выкарыстоўвае тую ж канфігурацыю, што і GUI. Недахоп у тым, што кожны пастаўшчык выдумляе свае дзеясловы, і скрыпт для аднаго кліента не пераносіцца на другі. Лічыце гэты ўзровень найкарацейшым шляхам, калі кліент зафіксаваны, а версія замацавана.

Узровень 2: уласная служба аперацыйнай сістэмы

У Windows дазвоннік з'яўляецца часткай аперацыйнай сістэмы і працуе з запісам у тэлефоннай кнізе, а не са сховішчам профіляў пастаўшчыка. Гэта робіць яго пераноснейшым паміж кліентамі і прасцейшым для скрыптавання з службовага ўліковага запісу. Гэта таксама азначае, што злучэнне можа існаваць у адным месцы і адсутнічаць у другім, што блытае людзей, якія глядзяць не ў той спіс.

rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus

Выкарыстоўвайце паверхню PowerShell, калі трэба стварыць або выдаліць запіс, а не набіраць яго. Узроўні WMI і cmdlet прадастаўляюць тыя ж аб'екты пад рознымі імёнамі, а выдаленне — асобная аперацыя ад адключэння. Скрыпт, які толькі набірае, пакіне састарэлыя запісы пасля міграцыі. Праверце, у якое сховішча піша ваша аўтаматызацыя, перш чым паабяцаць, што чыстка адбудзецца.

Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection

У macOS эквівалентам з'яўляецца спіс сеткавых службаў, дзе існуючая служба падключаецца па імені, а не ствараецца на ляту.

Уліковыя даныя працякаюць на кожным узроўні, таму выбірайце канал

Усё, што вы перадаяце ў камандным радку, з'яўляецца ў табліцы працэсаў для кожнага лакальнага карыстальніка і звычайна перажывае таксама гісторыю абалонкі. Падтрымліваная альтэрнатыва OpenVPN — чытаць сакрэт з файла з --askpass, і сам файл патрабуе правоў, якія адпавядаюць даверу, які вы ў яго ўкладаеце. Іменаваны канал пазбягае запісу сакрэту на дыск, але дазваляе любому працэсу, які можа яго адкрыць, пісаць туды. У Windows захоўвайце сакрэт у менеджэры ўліковых даных або ў файле, які можа чытаць толькі службовы ўліковы запіс, і ніколі як літарал у batch-файле.

openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret

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

Дачакайцеся стану, затым назірайце за адным уладальнікам

Кожны з гэтых выклікаў вяртаецца да таго, як тунель гатовы, таму апытвайце стан, які прадастаўляе кліент, або правярайце прызначэнне ўнутры яго з тайм-аўтам. Капіраванне файлаў або адкрыццё злучэння з базай даных адразу пасля выкліку падключэння — гэта гонка, і яна перыядычна зрываецца так, што выглядае як збой сеткі.

ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null

Адключэнне мае тую ж праблему ў адваротны бок: працэс можа завяршыцца да таго, як маршруты знікнуць. Выкарыстоўвайце хукы кліента там, дзе яны ёсць, напрыклад скрыпты up і down OpenVPN або ExecStartPost юніта systemd, бо яны выконваюцца ў той кропцы, якая вам сапраўды важная. Хукі выконваюцца з прывілеямі таго, што іх выклікала, таму хуку, які перазапускае сетку, патрэбна яўнае правіла, а не здагадка. Трымайце роўна аднаго ўласніка на ўвесь час жыцця злучэння.

Калі два супервізары запускаюць і спыняюць той жа профіль, вынікам становіцца цыкл перападключэння, які чытаецца як збой правайдэра. Runbook сканчваецца, калі ўзровень дакументаваны, у сакрэта ёсць канал, які не з'яўляецца argv, умова чакання — праверка стану з тайм-аўтам, і жыццёвым цыклам валодае адзін працэс.

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