Skripty spouštějí klienty VPN na té vrstvě, kterou zvolil autor, a tato vrstva je zřídka ta, kterou úloha potřebovala. Příkazový řádek dodavatele, vytáčeč operačního systému a záměr mobilní aplikace se vracejí v různých okamžicích života připojení. S tajemstvím také zacházejí různě a tento rozdíl rozhoduje, zda je heslo viditelné pro každého uživatele stroje. Vyberte vrstvu dříve, než napíšete první řádek skriptu.

Vrstva 1: příkazový řádek dodavatele

Většina desktopových klientů dodává příkazový řádek, který bere název profilu a, příliš často, heslo. Starý klient Cisco přijímal sloveso connect s argumenty uživatele a hesla; macOS vystavuje vestavěnou službu přes networksetup; NetworkManager odpovídá na nmcli. Tato volání se vracejí, když příkaz skončí, což není stejný okamžik, kdy je tunel použitelný. Přečtěte si dokumentaci dodavatele pro verzi, kterou nasazujete, protože tato rozhraní se mění a některá se zcela odstraňují.

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

Výhodou je, že dodavatel zná svůj vlastní sklad profilů, takže volání používá stejnou konfiguraci jako GUI. Nevýhodou je, že každý dodavatel vymýšlí vlastní slovesa, a skript napsaný pro jednoho klienta se nepřenáší na jiného. Berte tuto vrstvu jako nejkratší cestu, když je klient pevný a verze připnutá.

Vrstva 2: vlastní služba operačního systému

V Windows je vytáčeč součástí operačního systému a pracuje proti záznamu v telefonním seznamu místo skladu profilů dodavatele. To ho činí přenositelnějším mezi klienty a snáze skriptovatelným z účtu služby. Znamená to také, že připojení může existovat na jednom místě a ne na druhém, což mate lidi, kteří se dívají do špatného seznamu.

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

Použijte povrch PowerShell, když potřebujete záznam vytvořit nebo odstranit, místo abyste ho vytáčeli. Vrstvy WMI a cmdlet vystavují stejné objekty pod různými názvy a odstranění je samostatná operace od odpojení. Skript, který pouze vytáčí, zanechá po migraci zastaralé záznamy. Zkontrolujte, do kterého skladu vaše automatizace zapisuje, než slíbíte, že úklid proběhne.

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

V macOS je ekvivalentem seznam síťových služeb, kde se existující služba připojuje podle názvu, místo aby vznikala za běhu.

Přihlašovací údaje unikají na každé vrstvě, takže zvolte kanál

Vše, co předáte na příkazovém řádku, se objeví v tabulce procesů pro každého místního uživatele a obvykle přežije i v historii shellu. Podporovanou alternativou OpenVPN je číst tajemství ze souboru pomocí --askpass, a soubor sám potřebuje oprávnění odpovídající důvěře, kterou do něj vkládáte. Pojmenovaná roura se vyhne zápisu tajemství na disk, ale dovolí každému procesu, který ji může otevřít, tam zapisovat. Ve Windows uložte tajemství do správce přihlašovacích údajů nebo do souboru, který může číst jen účet služby, a nikdy jako literál v dávkovém souboru.

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

Stejné pravidlo platí pro tokeny a jednorázové kódy: pokud je automatizace potřebuje, potřebuje kanál, který není argumentem příkazového řádku. Otočte tajemství, když změníte mechanismus, protože stará hodnota někde ležela v logu. Skript, který funguje a uniká, není fungující skript.

Počkejte na stav a potom dohlížejte na jednoho vlastníka

Každé z těchto volání se vrací předtím, než je tunel připraven, takže dotazujte stav, který klient vystavuje, nebo zkuste cíl uvnitř s časovým limitem. Kopírování souborů nebo otevírání databázového připojení hned po volání připojení je závod a selhává občas způsobem, který vypadá jako síťová závada.

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

Odpojení má stejný problém opačně: proces může skončit dříve, než trasy zmizí. Použijte háčky klienta tam, kde existují, jako skripty up a down OpenVPN nebo ExecStartPost jednotky systemd, protože běží v bodě, na kterém vám skutečně záleží. Háčky běží s oprávněními toho, co je vyvolalo, takže háček, který restartuje síť, potřebuje výslovné pravidlo místo předpokladu. Udržujte přesně jednoho vlastníka po celou dobu života připojení.

Když dva dohledy spouštějí a zastavují stejný profil, výsledkem je smyčka opětovného připojení, která se čte jako výpadek poskytovatele. Runbook končí, když je vrstva zdokumentována, tajemství má kanál, který není argv, čekací podmínkou je kontrola stavu s časovým limitem a životní cyklus vlastní jeden proces.

Související články