Scenarijai paleidžia VPN klientus tame sluoksnyje, kurį pasirinko autorius, ir tas sluoksnis retai būna tas, kurio reikėjo darbui. Tiekėjo komandų eilutė, operacinės sistemos rinkiklis ir mobiliosios programos ketinimas visi grįžta skirtingais ryšio gyvavimo momentais. Jie taip pat skirtingai tvarko paslaptį, ir šis skirtumas lemia, ar slaptažodis matomas kiekvienam įrenginio naudotojui. Pasirinkite sluoksnį prieš rašydami pirmą scenarijaus eilutę.

Sluoksnis 1: tiekėjo komandų eilutė

Dauguma darbalaukio klientų pateikia komandų eilutę, kuri priima profilio pavadinimą ir, per dažnai, slaptažodį. Senasis Cisco klientas priėmė connect veiksmažodį su naudotojo ir slaptažodžio argumentais; macOS atskleidžia integruotą paslaugą per networksetup; NetworkManager atsako į nmcli. Šie iškvietimai grįžta, kai komanda baigiasi, o tai nėra tas pats momentas, kai tunelis tampa naudojamas. Skaitykite tiekėjo dokumentaciją apie diegiamą versiją, nes šios sąsajos keičiasi, o kai kurios visiškai pašalinamos.

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

Privalumas tas, kad tiekėjas pažįsta savo profilių saugyklą, todėl iškvietimas naudoja tą pačią konfigūraciją, kurią naudotų GUI. Trūkumas tas, kad kiekvienas tiekėjas išranda savo veiksmažodžius, o vienam klientui parašytas scenarijus neperkeliamas kitam. Laikykite šį sluoksnį trumpiausiu keliu, kai klientas fiksuotas, o versija prisegta.

Sluoksnis 2: pačios operacinės sistemos paslauga

Windows rinkiklis yra operacinės sistemos dalis ir veikia su telefono knygos įrašu, o ne su tiekėjo profilių saugykla. Tai daro jį perkelimesnį tarp klientų ir lengviau scenarijų rašomą iš paslaugos paskyros. Tai taip pat reiškia, kad ryšys gali egzistuoti vienoje vietoje, o ne kitoje, o tai klaidina žmones, žiūrinčius į neteisingą sąrašą.

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

Naudokite PowerShell paviršių, kai reikia sukurti ar pašalinti įrašą, o ne jį rinktis. WMI ir cmdlet sluoksniai pateikia tuos pačius objektus skirtingais pavadinimais, o šalinimas yra atskira operacija nuo atsijungimo. Scenarijus, kuris tik renkasi, paliks pasenusius įrašus po migracijos. Patikrinkite, į kurią saugyklą jūsų automatizavimas rašo, prieš žadėdami, kad valymas įvyks.

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

macOS atitikmuo yra tinklo paslaugų sąrašas, kuriame esama paslauga prijungiama pagal pavadinimą, o ne sukuriama vietoje.

Prisijungimo duomenys nuteka kiekviename sluoksnyje, todėl pasirinkite kanalą

Viskas, ką perduodate komandų eilutėje, rodoma procesų lentelėje kiekvienam vietiniam naudotojui, ir paprastai išlieka ir shell istorijoje. OpenVPN palaikoma alternatyva yra skaityti paslaptį iš failo su --askpass, o pačiam failui reikia leidimų, atitinkančių pasitikėjimą, kuriuo jį apdovanojate. Vamzdis su pavadinimu išvengia paslapties įrašymo į diską, bet leidžia bet kuriam procesui, galinčiam jį atidaryti, rašyti ten. Windows laikykite paslaptį kredencialų tvarkyklėje arba faile, kurį gali skaityti tik paslaugos paskyra, ir niekada kaip literalą paketiniame faile.

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

Ta pati taisyklė galioja žetonams ir vienkartiniams kodams: jei automatizavimui jų reikia, automatizavimui reikia kanalo, kuris nėra komandų eilutės argumentas. Pasukite paslaptį, kai keičiate mechanizmą, nes sena reikšmė gulėjo kažkur žurnale. Scenarijus, kuris veikia ir nuteka, nėra veikiantis scenarijus.

Laukite būsenos, tada prižiūrėkite vieną savininką

Kiekvienas iš šių iškvietimų grįžta prieš tunelį esant pasiruošusiam, todėl apklauskite būseną, kurią atskleidžia klientas, arba išbandykite paskirties vietą jo viduje su laiko limitu. Failų kopijavimas ar duomenų bazės ryšio atidarymas iškart po prisijungimo iškvietimo yra lenktynės, ir tai periodiškai nepavyksta taip, kad atrodo kaip tinklo gedimas.

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

Atsijungimas turi tą pačią problemą priešinga kryptimi: procesas gali baigtis prieš išnykstant maršrutams. Naudokite kliento kablius ten, kur jie yra, pavyzdžiui, OpenVPN up ir down scenarijus arba systemd bloko ExecStartPost, nes jie paleidžiami tame taške, kuris jums tikrai svarbus. Kabliai paleidžiami to, kas juos iškvietė, teisėmis, todėl tinklą perkraunantis kablys turi aiškią taisyklę, o ne prielaidą. Laikykite lygiai vieną savininką per visą ryšio gyvavimą.

Kai du prižiūrėtojai paleidžia ir sustabdo tą patį profilį, rezultatas yra persijungimo kilpa, kuri skaitoma kaip paslaugų teikėjo sutrikimas. Runbook baigiasi, kai sluoksnis dokumentuotas, paslaptis turi kanalą, kuris nėra argv, laukimo sąlyga yra būsenos patikra su laiko limitu, ir vienas procesas valdo gyvavimo ciklą.

Susiję straipsniai