Skriptovanie klienta VPN: vyberte vrstvu pred heslom
CLI dodávateľa, rasdial, zámer aplikácie alebo automatizácia rozhrania zlyhávajú každý inak. Vyberte vrstvu, držte tajomstvo mimo argv a čakajte na stav, nie na návratové kódy.
Skripty spúšťajú klientov VPN na tej vrstve, ktorú zvolil autor, a táto vrstva je zriedka tá, ktorú úloha potrebovala. Príkazový riadok dodávateľa, vytáčač operačného systému a zámer mobilnej aplikácie sa vracajú v rôznych okamihoch života pripojenia. S tajomstvom tiež zaobchádzajú rôzne a tento rozdiel rozhoduje, či je heslo viditeľné pre každého používateľa stroja. Vyberte vrstvu skôr, než napíšete prvý riadok skriptu.
Vrstva 1: príkazový riadok dodávateľa
Väčšina desktopových klientov dodáva príkazový riadok, ktorý berie názov profilu a, príliš často, heslo. Starý klient Cisco prijímal sloveso connect s argumentmi používateľa a hesla; macOS vystavuje vstavanú službu cez networksetup; NetworkManager odpovedá na nmcli. Tieto volania sa vracajú, keď príkaz skončí, čo nie je rovnaký okamih, keď je tunel použiteľný. Prečítajte si dokumentáciu dodávateľa pre verziu, ktorú nasadzujete, pretože tieto rozhrania sa menia a niektoré sa úplne odstraňujú.
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
Výhodou je, že dodávateľ pozná svoj vlastný sklad profilov, takže volanie používa rovnakú konfiguráciu ako GUI. Nevýhodou je, že každý dodávateľ vymýšľa vlastné slovesá, a skript napísaný pre jedného klienta sa neprenáša na iného. Berte túto vrstvu ako najkratšiu cestu, keď je klient pevný a verzia pripnutá.
Vrstva 2: vlastná služba operačného systému
V Windows je vytáčač súčasťou operačného systému a pracuje proti záznamu v telefónnom zozname namiesto skladu profilov dodávateľa. To ho robí prenositeľnejším medzi klientmi a ľahšie skriptovateľným z účtu služby. Znamená to tiež, že pripojenie môže existovať na jednom mieste a nie na druhom, čo mýli ľudí, ktorí sa pozerajú do nesprávneho zoznamu.
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
Použite povrch PowerShell, keď potrebujete záznam vytvoriť alebo odstrániť, namiesto jeho vytáčania. Vrstvy WMI a cmdlet vystavujú tie isté objekty pod rôznymi názvami a odstránenie je samostatná operácia od odpojenia. Skript, ktorý iba vytáča, zanechá po migrácii zastarané záznamy. Skontrolujte, do ktorého skladu vaša automatizácia zapisuje, než sľúbite, že upratovanie prebehne.
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
V macOS je ekvivalentom zoznam sieťových služieb, kde sa existujúca služba pripája podľa názvu, namiesto toho, aby vznikala za behu.
Prihlasovacie údaje unikajú na každej vrstve, takže zvoľte kanál
Všetko, čo odovzdáte na príkazovom riadku, sa objaví v tabuľke procesov pre každého miestneho používateľa a zvyčajne prežije aj v histórii shellu. Podporovanou alternatívou OpenVPN je čítať tajomstvo zo súboru pomocou --askpass, a súbor sám potrebuje oprávnenia zodpovedajúce dôvere, ktorú doň vkladáte. Pomenovaná rúra sa vyhne zápisu tajomstva na disk, ale dovolí každému procesu, ktorý ju môže otvoriť, tam zapisovať. V Windows uložte tajomstvo do správcu prihlasovacích údajov alebo do súboru, ktorý môže čítať len účet služby, a nikdy ako literál v dávkovom súbore.
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
Rovnaké pravidlo platí pre tokeny a jednorazové kódy: ak ich automatizácia potrebuje, potrebuje kanál, ktorý nie je argumentom príkazového riadku. Otočte tajomstvo, keď zmeníte mechanizmus, pretože stará hodnota niekde ležala v logu. Skript, ktorý funguje a uniká, nie je fungujúci skript.
Počkajte na stav a potom dohliadajte na jedného vlastníka
Každé z týchto volaní sa vracia predtým, než je tunel pripravený, takže dopytujte stav, ktorý klient vystavuje, alebo skúste cieľ vnútri s časovým limitom. Kopírovanie súborov alebo otváranie databázového pripojenia hneď po volaní pripojenia je pretek a zlyháva občas spôsobom, ktorý vyzerá ako sieťová porucha.
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
Odpojenie má rovnaký problém opačne: proces môže skončiť skôr, než trasy zmiznú. Použite háky klienta tam, kde existujú, ako skripty up a down OpenVPN alebo ExecStartPost jednotky systemd, pretože bežia v bode, na ktorom vám skutočne záleží. Háky bežia s oprávneniami toho, čo ich vyvolalo, takže háčik, ktorý reštartuje sieť, potrebuje výslovné pravidlo namiesto predpokladu. Udržujte presne jedného vlastníka počas celej životnosti pripojenia.
Keď dvaja dohľadovia spúšťajú a zastavujú ten istý profil, výsledkom je slučka opätovného pripojenia, ktorá sa číta ako výpadok poskytovateľa. Runbook končí, keď je vrstva zdokumentovaná, tajomstvo má kanál, ktorý nie je argv, čakacia podmienka je kontrola stavu s časovým limitom a životný cyklus vlastní jeden proces.