Скриптите стартуваат 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, условот за чекање е проверка на состојбата со временско ограничување и еден процес го поседува животниот циклус.

Поврзани статии