Starti konservitan Mac-VPN-on el la terminalo per scutil --nc
Uzu scutil --nc por starti, inspekti kaj haltigi konservitan macOS VPN-servon, tenu akreditaĵojn ekster argv, kaj pruvu, ke la trafiko efektive uzas la tunelon.
Vi havas konservitan VPN-servon en Sistemaj agordoj, kaj vi volas, ke la terminalo ekfunkciigu ĝin. En macOS la subtenata vojo estas scutil --nc, sed nur por servoj, kiujn posedas la propra retkonekta administrilo de la sistemo. La menubreto ne estas API: tripartaj klientoj kutime havas sian propran aŭtomatigon, kaj profilo enpuŝita de administra servo povas rifuzi lokan starton. Jen la kontrollisto, kiun mi sekvas: trovu la ĝustan servon, legu ĝian staton, startu ĝin, atendu la statŝanĝon, kaj poste pruvu, ke la trafiko efektive uzas la tunelon. Haltu ĉe la unua paŝo, kiu ne kongruas, ĉar ĉiu posta komando supozas, ke la antaŭa sukcesis.
Trovu la servon antaŭ ol provi starti ĝin
Komencu per la inventaro, ne per la profilnomo, kiun vi memoras:
scutil --nc help
scutil --nc list
Ĉiu linio parigas staton kun serva identigilo, tipo kaj montra nomo. La identigilo estas la valoro, kontraŭ kiu oni skriptas, ĉar montraj nomoj ripetiĝas kaj povas esti redaktitaj. La scutil-manlibro de Apple dokumentas la retkonektan reĝimon, dum la instalita --nc help estas la aŭtoritata listo de subkomandoj sur tiu Mac; ne supozu, ke flago el pli malnova gvidilo ankoraŭ ekzistas en via macOS-versio.
Malplena listo estas rezulto, ne eraro. Servo kreita de vendista kliento aŭ administra profilo povas esti aktiva dum nevidebla ĉi tie, aŭ videbla kun tipo, kiun la denaska regilo ne povas stiri. En tiu kazo, uzu la ilon de la vendisto aŭ la profilan dokumentaron. Krei paralelan denaskan profilon nur por havi ion por starti estas malbona interŝanĝo.
Legu la nunan staton kaj konfirmu la selektilon
Demandu la servon antaŭ ol starti ĝin, por ke vi sciu, kion sukcesa starto devus ŝanĝi:
scutil --nc status "Office VPN"
Se du servoj kunhavas montran nomon, la nomo estas ambigua. Transdonu la identigilon anstataŭe; la komando akceptas ambaŭ, sed nur la identigilo garantiite elektas unu servon. Kontrolu, ke la statvorto estas unu, kiun vi rekonas — kutime Connected, Disconnected, Connecting aŭ Disconnecting — antaŭ ol analizi ĝin en skripto. Kontrolu ankaŭ, ĉu la profilo estas administrata, ĉar ŝlosita agordo povas akcepti la komandon kaj tamen ignori ĝin aŭ peti konfirmon.
Ĉi tiu statdemando estas malmultekosta, do uzu ĝin kiel gardanton en aŭtomatigo: startu nur kiam la statuso estas Disconnected, kaj ne traktu Connecting kiel fiaskon. Se la servo jam estas Connected, preterlasu la starton anstataŭ interrompi funkciantan tunelon.
Startu la konekton kaj atendu, ke la stato stabiliĝu
La startpeto estas malsinkrona. La komando revenas kiam la peto estas akceptita, ne kiam aŭtentikigo finiĝas aŭ itineroj instaliĝas. Rulu ĝin, poste demandu la staton kun limigita atendo kaj eliru, se la servo refalas al 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
Statuso Connecting, kiu neniam solviĝas, kutime indikas akreditaĵojn, MFA aŭ la servilon, ne scutil. La komando ne povas provizi interagan saluton, do profilo, kiu atendas ĵetonon aŭ aparatan ŝlosilon, restos en Connecting kaj finfine refalos. Legu la statvorton antaŭ ol aldoni ripetojn; buklo kontraŭ aŭtentikiga peto ne povas sukcesi.
Ne traktu la elirstaton de la ŝelo kiel pretecon. La utila signalo estas la stata ĉeno, sekvata de pruvo, ke la tunelo portas trafikon. Starta komando, kiu kviete revenas, ankoraŭ povas lasi vin kun konekto, kiu neniam aŭtentikiĝas.
Pruvu, ke la tunelo portas trafikon, ne nur ke ĝi diras Connected
Connected priskribas la konekton, ne la itineran decidon. Denaskaj PPP kaj IKEv2 servoj kreas ppp- aŭ utun-interfacon kaj instalas itinerojn, dum dividita tunelo intence lasas la defaŭltan itineron trankvila. Inspektu la interfacojn kaj ambaŭ adresajn familiojn:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Trovu la interfacon, kiun la servo kreis, anstataŭ diveni numeron, poste demandu la itineran tabelon, kiun interfacon specifa celo uzas: route -n get 10.0.0.10, anstataŭigante per interna gastiganto. Se ĝi raportas la fizikan interfacon, la tunelo estas aktiva sed ne portas tiun fluon. Kontrolu itinerojn de dividita tunelo, la ordon de solvilo, kaj ajnan lokan fajroŝirman regulon, kiu permesas la tunelan interfacon sed ne la procezon.
Nom-solvado estas la kutima falsa negativo. Internaj nomoj povas solviĝi per la malĝusta solvilo dum la tunelo estas tute sana, kio aspektas kiel VPN-fiasko kaj ne estas. scutil --dns montras la ordon, kiun macOS uzos; post solvila ŝanĝo, malplenigu la kaŝmemoron per dscacheutil -flushcache kaj sudo killall -HUP mDNSResponder.
Tenu akreditaĵojn kaj privilegiojn ekster la komandlinio
Neniam metu pasvorton, antaŭe kunhavatan ŝlosilon aŭ ĵetonon en la argumentojn. Argumentoj estas videblaj en procezaj listoj kaj eniras la ŝelan historion, kaj kopiita subtena transskribaĵo povas ilin liki. La propra akreditaĵa pritraktado de la profilo — ĉu Keychain-ero, sistema peto aŭ la aŭtentikiga fluo de la kliento — estas la loko por sekretoj.
Ruli la komandon per sudo ne igas interagan saluton senhoma. Ĝi ŝanĝas la efektivan uzanton, ne la haveblecon de GUI-peto, aparata ĵetono aŭ la saluta ŝlosilringo. LaunchAgent povas starti servon post kiam la uzanto salutas kaj la ŝlosilringo malŝlosiĝas; LaunchDaemon kutime ne atingas tiujn partojn de la uzanta sesio. Se organizo administras la servon, ĝiaj vivciklaj reguloj venkas super ajna loka skripto.
Haltigu la servon kaj kontrolu, ke ĝi restis haltigita
Haltigu per la sama selektilo, kiun vi uzis por starti, poste relegu la staton anstataŭ supozi, ke la tunelo malaperis:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Haltigo, kiu revenas al Disconnected, tamen lasas unu aferon kontroli: ĉu la profilo estas agordita por konekti laŭ postulo, kio povas revenigi ĝin sen via skripto. Se alia kliento posedas itinerojn sur la sama Mac, tiuj itineroj povas postvivi denaskan haltigon. Kontrolu la itineron denove antaŭ ol konkludi, ke la maŝino estas ekster la VPN.
Por ĉirkaŭaĵo, kiun vi rulas permane, tenu la ordon fiksita: listo, statuso, starto, demando, itinera testo, haltigo, kontrolo. Ne analizu la amikan nomon el liberforma eligo kiam la identigilo disponeblas, kaj ne traktu la eliron de la startkomando kiel pretecon. La konekta administrilo raportas staton; via pruvo estas la stato plus itinero, kiu montras al la tunelo.