Skript startar VPN-klientar på det laget forfattaren valde, og det laget er sjeldan det jobben trongde. Kommandolinja til leverandøren, oppringaren til operativsystemet og ein mobil app-intensjon kjem alle tilbake på ulike punkt i livet til sambandet. Dei handterer også hemmelegheita ulikt, og den skilnaden avgjer om passordet er synleg for kvar brukar på maskina. Vel laget før du skriv den første linja i skriptet.

Lag 1: kommandolinja til leverandøren

Dei fleste skrivebordsklientar leverer ei kommandolinje som tek eit profilnamn og, altfor ofte, eit passord. Den gamle klienten til Cisco godtok eit connect-verb med brukar- og passordargument; macOS eksponerer den innebygde tenesta via networksetup; NetworkManager svarar på nmcli. Desse kalla kjem tilbake når kommandoen er ferdig, noko som ikkje er same augneblinken som når tunnelen blir brukande. Les leverandøren si eiga dokumentasjon for versjonen du rullar ut, fordi desse grensesnitta endrar seg og nokre blir fjerna heilt.

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

Fordelen er at leverandøren kjenner sitt eige profillager, så kallet brukar same konfigurasjon som GUI-et ville gjere. Ulempa er at kvar leverandør finn opp sine eigne verb, og eit skript skrive for ein klient flyttar ikkje over til ein annan. Sjå på dette laget som den kortaste vegen når klienten er fast og versjonen er låst.

Lag 2: den eigne tenesta til operativsystemet

På Windows er oppringaren ein del av operativsystemet, og han arbeider mot ein telefonbokoppføring i staden for profillageret til leverandøren. Det gjer han meir flyttbar mellom klientar og lettare å skripte frå ein tenestekonto. Det tyder òg at sambandet kan finnast på ein stad og ikkje på den andre, noko som forvirrar folk som ser i feil liste.

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

Bruk PowerShell-flata når du må opprette eller fjerne oppføringa i staden for å ringe ho opp. WMI- og cmdlet-laga eksponerer dei same objekta under ulike namn, og fjerning er ein eigen operasjon frå fråkopling. Eit skript som berre ringer opp, vil etterlate seg utdaterte oppføringar etter ein migrering. Sjekk kva lager automatiseringa di skriv til før du lovar at oppryddinga skjer.

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

På macOS er motstykket lista over nettverkstenester, der ei eksisterande teneste blir kopla til ved namn i staden for å bli oppretta på staden.

Innloggingsdata lekk på kvart lag, så vel kanalen

Alt du sender på kommandolinja viser seg i prosesstabellen for kvar lokal brukar, og det overlever vanlegvis òg i skalhistoria. Det støtta alternativet til OpenVPN er å lese hemmelegheita frå ei fil med --askpass, og sjølve fila treng løyve som svarar til tilliten du legg i ho. Eit namngjeve røyr unngår å skrive hemmelegheita til disk, men lèt kvar prosess som kan opne det skrive der. På Windows lagrar du hemmelegheita i innloggingsdatabehandlaren, eller i ei fil som berre tenestekontoen kan lese, og aldri som ein literal i ei batch-fil.

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

Same regelen gjeld for token og eingongskodar: om automatiseringa treng dei, treng automatiseringa ein kanal som ikkje er eit kommandolinjeargument. Rotér hemmelegheita når du byter mekanisme, fordi den gamle verdien har lege ein stad i ein logg. Eit skript som fungerer og lekk, er ikkje eit fungerande skript.

Vent på tilstand, og overvak deretter éin eigar

Kvart av desse kalla kjem tilbake før tunnelen er klar, så spør etter tilstanden klienten eksponerer eller prøv ein destinasjon inne i han med ein tidsgrense. Å kopiere filer eller opne ein databasekopling rett etter tilkoplingskallet er eit kapplaup, og det feilar periodisk på ein måte som ser ut som ein nettverksfeil.

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

Fråkopling har same problemet i motsett retning: prosessen kan gå ut før rutene er borte. Bruk krokane til klienten der dei finst, som OpenVPN up- og down-skripta eller ExecStartPost i ein systemd-eining, fordi dei køyrer på det punktet du faktisk bryr deg om. Krokar køyrer med rettane til det som kalla dei, så ein krok som startar nettet på nytt treng ein uttrykkeleg regel i staden for ei antaking. Hald nøyaktig ein eigar gjennom heile levetida til sambandet.

Når to tilsynsmenn startar og stoppar same profilen, blir resultatet ei gjentilkoplingsløkke som les som eit avbrot hos leverandøren. Runbooken sluttar når laget er dokumentert, hemmelegheita har ein kanal som ikkje er argv, ventevilkåret er ein tilstandssjekk med tidsgrense, og éin prosess eig livssyklusen.

Relaterte artiklar