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

Повезани чланци