Skripti palaiž VPN klientus tajā slānī, kuru izvēlējās autors, un šis slānis reti ir tas, kas darbam bija vajadzīgs. Piegādātāja komandrinda, operētājsistēmas zvanītājs un mobilās lietotnes nodoms visi atgriežas dažādos savienojuma dzīves punktos. Tie arī apstrādā noslēpumu atšķirīgi, un šī atšķirība izlemj, vai parole ir redzama katram mašīnas lietotājam. Izvēlieties slāni pirms skripta pirmās rindas rakstīšanas.

Slānis 1: piegādātāja komandrinda

Lielākā daļa darbvirsmas klientu piedāvā komandrindu, kas pieņem profila nosaukumu un, pārāk bieži, paroli. Vecais Cisco klients pieņēma darbības vārdu connect ar lietotāja un paroles argumentiem; macOS atklāj iebūvēto pakalpojumu caur networksetup; NetworkManager atbild uz nmcli. Šie izsaukumi atgriežas, kad komanda beidzas, un tas nav tas pats mirklis, kad tunelis kļūst lietojams. Lasiet piegādātāja dokumentāciju par izvietojamo versiju, jo šīs saskarnes mainās un dažas tiek pilnībā noņemtas.

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

Priekšrocība ir tā, ka piegādātājs pazīst savu profilu krātuvi, tāpēc izsaukums izmanto to pašu konfigurāciju, ko izmantotu GUI. Trūkums ir tāds, ka katrs piegādātājs izgudro savus darbības vārdus, un vienam klientam rakstīts skripts nepāriet citam. Uzskatiet šo slāni par īsāko ceļu, kad klients ir fiksēts un versija ir piesprausta.

Slānis 2: pašas operētājsistēmas pakalpojums

Windows zvanītājs ir operētājsistēmas daļa, un tas strādā ar tālruņu grāmatas ierakstu, nevis ar piegādātāja profilu krātuvi. Tas padara to pārnēsājamāku starp klientiem un vieglāk skriptējamu no pakalpojuma konta. Tas arī nozīmē, ka savienojums var pastāvēt vienā vietā un ne otrā, kas mulsina cilvēkus, kuri skatās nepareizajā sarakstā.

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

Izmantojiet PowerShell virsmu, kad jāizveido vai jānoņem ieraksts, nevis jāzvana tam. WMI un cmdlet slāņi atklāj tos pašus objektus ar dažādiem nosaukumiem, un noņemšana ir atsevišķa darbība no atvienošanas. Skripts, kas tikai zvana, pēc migrācijas atstās novecojušus ierakstus. Pārbaudiet, kurā krātuvē jūsu automatizācija raksta, pirms apsolāt, ka tīrīšana notiks.

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

macOS ekvivalents ir tīkla pakalpojumu saraksts, kur esošais pakalpojums tiek savienots pēc nosaukuma, nevis izveidots uz vietas.

Akreditācijas dati noplūst katrā slānī, tāpēc izvēlieties kanālu

Viss, ko nododat komandrindā, parādās procesu tabulā katram vietējam lietotājam, un parasti izdzīvo arī čaulas vēsturē. OpenVPN atbalstītā alternatīva ir lasīt noslēpumu no faila ar --askpass, un pašam failam vajag atļaujas, kas atbilst uzticēšanās līmenim, ko tajā ieguldāt. Nosaukta caurule izvairās no noslēpuma rakstīšanas diskā, bet ļauj jebkuram procesam, kas to var atvērt, rakstīt tur. Windows glabājiet noslēpumu akreditācijas datu pārvaldniekā vai failā, ko var lasīt tikai pakalpojuma konts, un nekad kā literālu paketes failā.

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

Tas pats noteikums attiecas uz marķieriem un vienreizējiem kodiem: ja automatizācijai tie ir vajadzīgi, automatizācijai vajag kanālu, kas nav komandrindas arguments. Rotējiet noslēpumu, kad maināt mehānismu, jo vecā vērtība ir gulējusi kaut kur žurnālā. Skripts, kas strādā un noplūst, nav strādājošs skripts.

Gaidiet stāvokli, pēc tam uzraugiet vienu īpašnieku

Katrs no šiem izsaukumiem atgriežas pirms tuneļa gatavības, tāpēc aptaujājiet stāvokli, ko atklāj klients, vai pārbaudiet galamērķi tā iekšienē ar laika ierobežojumu. Failu kopēšana vai datubāzes savienojuma atvēršana uzreiz pēc savienojuma izsaukuma ir sacīkstes, un tas periodiski neizdodas tā, ka izskatās pēc tīkla kļūmes.

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

Atvienošanai ir tā pati problēma pretējā virzienā: process var beigties pirms maršrutu pazušanas. Izmantojiet klienta āķus tur, kur tie ir, piemēram, OpenVPN up un down skriptus vai systemd vienības ExecStartPost, jo tie darbojas tajā punktā, kas jums patiešām svarīgs. Āķi darbojas ar tā tiesībām, kas tos izsauca, tāpēc āķim, kas restartē tīklu, vajag skaidru noteikumu, nevis pieņēmumu. Uzturiet tieši vienu īpašnieku visā savienojuma dzīves laikā.

Kad divi uzraugi palaiž un aptur vienu un to pašu profilu, rezultāts ir atkārtotas savienošanas cilpa, kas lasās kā pakalpojumu sniedzēja kļūme. Runbook beidzas, kad slānis ir dokumentēts, noslēpumam ir kanāls, kas nav argv, gaidīšanas nosacījums ir stāvokļa pārbaude ar laika ierobežojumu, un viens process pārvalda dzīves ciklu.

Saistītie raksti