Išsaugoto „Mac VPN“ paleidimas iš terminalo su scutil --nc
Naudokite scutil --nc išsaugotai macOS VPN paslaugai paleisti, patikrinti ir sustabdyti, laikykite prisijungimo duomenis už argv ribų ir įrodykite, kad srautas tikrai naudoja tunelį.
Sistemų nustatymuose turite išsaugotą VPN paslaugą ir norite, kad terminalas ją paleistų. macOS palaikomas kelias yra scutil --nc, bet tik paslaugoms, kurios priklauso pačiam sistemos tinklo ryšių valdytojui. Meniu juosta nėra API: trečiųjų šalių klientai paprastai turi savo automatizavimą, o valdymo tarnybos pateiktas profilis gali atmesti vietinį paleidimą. Tai mano atliekamas kontrolinis sąrašas: raskite tikslią paslaugą, perskaitykite jos būseną, paleiskite ją, palaukite, kol būsena pasikeis, ir tada įrodykite, kad srautas tikrai naudoja tunelį. Sustokite ties pirmuoju žingsniu, kuris nesutampa, nes kiekviena vėlesnė komanda daro prielaidą, kad ankstesnė pavyko.
Raskite paslaugą prieš bandydami ją paleisti
Pradėkite nuo inventoriaus, o ne nuo prisimenamo profilio pavadinimo:
scutil --nc help
scutil --nc list
Kiekviena eilutė susieja būseną su paslaugos identifikatoriumi, tipu ir rodomu pavadinimu. Identifikatorius yra reikšmė, pagal kurią rašomi scenarijai, nes rodomi pavadinimai kartojasi ir gali būti keičiami. Apple scutil vadove dokumentuojamas tinklo ryšio režimas, o įdiegtas --nc help yra autoritetingas pakomandžių sąrašas tame Mac; nearkite, kad vėliavėlė iš senesnio vadovo vis dar egzistuoja jūsų macOS versijoje.
Tuščias sąrašas yra rezultatas, o ne klaida. Tiekėjo kliento ar valdymo profilio sukurta paslauga gali būti aktyvi, nors čia nematoma, arba matoma su tipu, kurio vietinis valdiklis negali valdyti. Tokiu atveju naudokite tiekėjo įrankį arba profilio dokumentaciją. Lygiagretaus vietinio profilio kūrimas vien tam, kad būtų ką paleisti, yra blogas sandoris.
Perskaitykite dabartinę būseną ir patvirtinkite selektorių
Prieš paleisdami paklauskite paslaugos būsenos, kad žinotumėte, ką turėtų pakeisti sėkmingas paleidimas:
scutil --nc status "Office VPN"
Jei dvi paslaugos turi tą patį rodomą pavadinimą, pavadinimas dviprasmis. Perduokite identifikatorių; komanda priima abu, bet tik identifikatorius garantuoja vienos paslaugos pasirinkimą. Prieš analizuodami scenarijuje patikrinkite, ar būsenos žodis yra jums žinomas — paprastai Connected, Disconnected, Connecting arba Disconnecting. Taip pat patikrinkite, ar profilis valdomas, nes užrakinta konfigūracija gali priimti komandą ir vis tiek ją ignoruoti arba prašyti patvirtinimo.
Šis būsenos iškvietimas pigus, todėl naudokite jį kaip apsaugą automatizavime: paleiskite tik kai būsena Disconnected, ir nelaikykite Connecting nesėkme. Jei paslauga jau Connected, praleiskite paleidimą, o ne pertraukite veikiantį tunelį.
Paleiskite ryšį ir palaukite, kol būsena stabilizuosis
Paleidimo užklausa asinchroninė. Komanda grįžta, kai užklausa priimta, o ne kai baigiasi autentifikavimas ar įdiegiami maršrutai. Vykdykite ją, tada tikrinkite būseną su ribotu laukimu ir išeikite, jei paslauga grįžta į Disconnected:
scutil --nc start "Office VPN"
n=0
while [ "$n" -lt 30 ]; do
state=$(scutil --nc status "Office VPN" | head -n 1)
[ "$state" = "Connected" ] && break
[ "$state" = "Disconnected" ] && { echo "start failed"; exit 1; }
sleep 2
n=$((n + 1))
done
Connecting būsena, kuri niekada neišsisprendžia, paprastai nurodo prisijungimo duomenis, MFA ar serverį, o ne scutil. Komanda negali suteikti interaktyvaus prisijungimo, todėl profilis, kuris tikisi žetono ar aparatinės įrangos rakto, liks Connecting ir galiausiai atsitrauks. Prieš pridėdami pakartojimus perskaitykite būsenos žodį; ciklas prieš autentifikavimo raginimą negali pavykti.
Nelaikykite apvalkalo išėjimo būsenos pasirengimu. Naudingas signalas yra būsenos eilutė, po kurios pateikiamas įrodymas, kad tunelis neša srautą. Tyliai grįžtanti paleidimo komanda vis tiek gali palikti jus su ryšiu, kuris niekada neautentifikuojamas.
Įrodykite, kad tunelis neša srautą, o ne tik sako Connected
Connected apibūdina ryšį, o ne maršrutizavimo sprendimą. Vietinės PPP ir IKEv2 paslaugos sukuria ppp arba utun sąsają ir įdiegia maršrutus, o padalintas tunelis sąmoningai palieka numatytąjį maršrutą nepaliestą. Patikrinkite sąsajas ir abi adresų šeimas:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Raskite paslaugos sukurtą sąsają, o ne spėkite numerį, tada paklauskite maršrutų lentelės, kurią sąsają naudoja konkretus tikslas: route -n get 10.0.0.10, pakeisdami jį vidiniu hostu. Jei ji praneša fizinę sąsają, tunelis veikia, bet neneša to srauto. Patikrinkite padalinto tunelio maršrutus, sprendėjo tvarką ir bet kurią vietinę užkardos taisyklę, leidžiančią tunelio sąsają, bet ne procesą.
Vardų sprendimas yra įprastas klaidingas neigiamas. Vidiniai vardai gali būti sprendžiami per netinkamą sprendėją, kai tunelis visiškai sveikas, o tai atrodo kaip VPN gedimas ir nėra. scutil --dns rodo tvarką, kurią naudos macOS; pakeitę sprendėją, išvalykite podėlį su dscacheutil -flushcache ir sudo killall -HUP mDNSResponder.
Laikykite prisijungimo duomenis ir privilegijas už komandinės eilutės
Niekada nededkite slaptažodžio, iš anksto bendro rakto ar žetono į argumentus. Argumentai matomi procesų sąrašuose ir patenka į apvalkalo istoriją, o nukopijuotas palaikymo įrašas gali juos atskleisti. Paties profilio prisijungimo duomenų tvarkymas — ar tai Keychain elementas, sistemos raginimas, ar kliento autentifikavimo srautas — yra vieta paslaptims.
Komandos vykdymas su sudo nepadaro interaktyvaus prisijungimo be priežiūros. Tai pakeičia efektyvų naudotoją, o ne GUI raginimo, aparatinės įrangos žetono ar prisijungimo raktų saugyklos prieinamumą. LaunchAgent gali paleisti paslaugą po to, kai naudotojas prisijungia ir raktų saugykla atrakinta; LaunchDaemon paprastai nepasiekia tų naudotojo sesijos dalių. Jei organizacija valdo paslaugą, jos gyvavimo ciklo taisyklės viršija bet kurį vietinį scenarijų.
Sustabdykite paslaugą ir patikrinkite, ar ji liko sustabdyta
Sustabdykite tuo pačiu selektoriumi, kurį naudojote paleidimui, tada perskaitykite būseną, o ne darykite prielaidą, kad tunelio nebėra:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Sustabdymas, kuris grįžta į Disconnected, vis tiek palieka vieną dalyką patikrinti: ar profilis nustatytas jungtis pagal poreikį, o tai gali jį grąžinti be jūsų scenarijaus. Jei kitas klientas tame pačiame Mac turi maršrutus, tie maršrutai gali išgyventi vietinį sustabdymą. Prieš darydami išvadą, kad kompiuteris yra už VPN ribų, dar kartą patikrinkite maršrutą.
Rankiniu būdu paleidžiamam apvalkalui laikykite fiksuotą tvarką: sąrašas, būsena, paleidimas, patikra, maršruto testas, sustabdymas, patvirtinimas. Neanalizuokite draugiško pavadinimo iš laisvos formos išvesties, kai identifikatorius prieinamas, ir nelaikykite paleidimo komandos išėjimo pasirengimu. Ryšių valdytojas praneša būseną; jūsų įrodymas yra būsena ir maršrutas, rodantis į tunelį.