A szkriptek azon a rétegen indítják a VPN-ügyfeleket, amelyet a szerző választott, és ez a réteg ritkán az, amelyre a feladatnak szüksége volt. A szállító parancssora, az operációs rendszer tárcsázója és egy mobilalkalmazás-szándék mind más-más ponton tér vissza a kapcsolat életében. A titkot is másképp kezelik, és ez a különbség dönti el, hogy a jelszó látható-e a gépen minden felhasználó számára. A réteget a szkript első sorának megírása előtt válassza ki.

Réteg 1: a szállító parancssora

A legtöbb asztali ügyfél parancssort kínál, amely profilszintű nevet és, túl gyakran, jelszót fogad. A régi Cisco-ügyfél connect igét fogadott felhasználói és jelszóargumentumokkal; a macOS a beépített szolgáltatást a networksetup-on keresztül teszi elérhetővé; a NetworkManager az nmcli-re válaszol. Ezek a hívások a parancs befejezésekor térnek vissza, ami nem ugyanaz a pillanat, amikor az alagút használhatóvá válik. Olvassa el a szállító saját dokumentációját a telepített verzióhoz, mert ezek az interfészek változnak, és néhányat teljesen eltávolítanak.

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

Az előny az, hogy a szállító ismeri a saját profilraktárát, így a hívás ugyanazt a konfigurációt használja, mint a GUI. A hátrány az, hogy minden szállító saját igéket talál ki, és az egyik ügyfélhez írt szkript nem vihető át a másikhoz. Tekintse ezt a réteget a legrövidebb útnak, amikor az ügyfél rögzített és a verzió kitűzött.

Réteg 2: az operációs rendszer saját szolgáltatása

Windows-on a tárcsázó az operációs rendszer része, és telefonkönyvi bejegyzés ellen dolgozik a szállító profilraktára helyett. Ez hordozhatóbbá teszi az ügyfelek között, és könnyebbé teszi a szkriptelést szolgáltatásfiókból. Ez azt is jelenti, hogy a kapcsolat létezhet az egyik helyen és nem a másikon, ami összezavarja azokat, akik a rossz listát nézik.

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

A PowerShell-felületet használja, amikor a bejegyzést létre kell hoznia vagy el kell távolítania, nem pedig tárcsáznia. A WMI- és cmdlet-rétegek ugyanazokat az objektumokat teszik elérhetővé különböző neveken, és az eltávolítás külön művelet a leválasztástól. Egy csak tárcsázó szkript elavult bejegyzéseket hagy maga után egy migráció után. Ellenőrizze, melyik raktárba ír az automatizálása, mielőtt megígéri, hogy a tisztítás megtörténik.

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

macOS-on az megfelelő a hálózati szolgáltatások listája, ahol egy meglévő szolgáltatás név szerint kapcsolódik, nem pedig menet közben jön létre.

A hitelesítő adatok minden rétegen kiszivárognak, ezért válassza ki a csatornát

Minden, amit a parancssoron átad, megjelenik a folyamattáblában minden helyi felhasználó számára, és általában a héjtörténetben is túlél. Az OpenVPN támogatott alternatívája, hogy a titkot fájlból olvassa --askpass használatával, és magának a fájlnak olyan jogosultságokra van szüksége, amelyek megfelelnek a belé vetett bizalomnak. A nevesített cső elkerüli a titok lemezre írását, de lehetővé teszi, hogy bármely folyamat, amely meg tudja nyitni, oda írjon. Windows-on tárolja a titkot a hitelesítőadat-kezelőben, vagy olyan fájlban, amelyet csak a szolgáltatásfiók olvashat, és soha ne literálként egy batch-fájlban.

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

Ugyanez a szabály érvényes a tokenekre és az egyszeri kódokra: ha az automatizálásnak szüksége van rájuk, olyan csatornára van szüksége, amely nem parancssori argumentum. Forgassa a titkot, amikor megváltoztatja a mechanizmust, mert a régi érték valahol egy naplóban hevert. Egy működő és szivárgó szkript nem működő szkript.

Várjon az állapotra, majd felügyeljen egyetlen tulajdonost

E hívások mindegyike az alagút készenléte előtt tér vissza, ezért kérdezze le az ügyfél által közzétett állapotot, vagy próbáljon ki egy célpontot belül időkorláttal. Fájlok másolása vagy adatbázis-kapcsolat megnyitása közvetlenül a kapcsolódási hívás után versenyhelyzet, és időnként hálózati hibának látszó módon hibázik.

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

A leválasztásnak ugyanez a problémája fordítva: a folyamat kiléphet, mielőtt az útvonalak eltűnnek. Használja az ügyfél hookjait, ahol léteznek, például az OpenVPN up és down szkriptjeit vagy egy systemd-egység ExecStartPostját, mert azok azon a ponton futnak, amely valóban számít. A hookok annak a jogosultságaival futnak, ami meghívta őket, ezért a hálózatot újraindító hooknak kifejezett szabályra van szüksége, nem feltevésre. A kapcsolat élettartama alatt pontosan egy tulajdonost tartson.

Amikor két felügyelő ugyanazt a profilt indítja és állítja le, az eredmény egy újracsatlakozási hurok, amely szolgáltatói kiesésként olvasható. A runbook akkor ér véget, amikor a réteg dokumentált, a titoknak nem argv csatornája van, a várakozási feltétel időkorlátos állapotellenőrzés, és egy folyamat birtokolja az életciklust.

Kapcsolódó cikkek