Imate spremljenu VPN uslugu u Postavkama sustava i želite da je terminal pokrene. Na macOS-u podržan je put scutil --nc, ali samo za usluge koje posjeduje vlastiti upravitelj mrežnih veza sustava. Traka izbornika nije API: klijenti trećih strana obično imaju vlastitu automatizaciju, a profil koji je poslao servis za upravljanje može odbiti lokalno pokretanje. Ovo je kontrolni popis koji slijedim: pronađite točnu uslugu, pročitajte njezino stanje, pokrenite je, pričekajte da se stanje promijeni i zatim dokažite da promet doista ide kroz tunel. Zaustavite se na prvom koraku koji se ne slaže jer svaka kasnija naredba pretpostavlja da je prethodna uspjela.

Pronađite uslugu prije nego što je pokušate pokrenuti

Počnite s popisom, a ne s imenom profila kojeg se sjećate:

scutil --nc help
scutil --nc list

Svaki redak povezuje status s identifikatorom usluge, tipom i prikazanim imenom. Identifikator je vrijednost prema kojoj se pišu skripte jer se prikazana imena ponavljaju i mogu se mijenjati. Appleov scutil priručnik dokumentira način mrežne veze, dok je instalirani --nc help mjerodavan popis podnaredbi na tom Macu; ne pretpostavljajte da zastavica iz starijeg vodiča još postoji u vašoj verziji macOS-a.

Prazan popis je rezultat, a ne pogreška. Usluga koju je stvorio klijent dobavljača ili profil za upravljanje može biti aktivna dok je ovdje nevidljiva, ili vidljiva s tipom kojim vlastiti kontroler ne može upravljati. U tom slučaju upotrijebite alat dobavljača ili dokumentaciju profila. Stvaranje paralelnog vlastitog profila samo da biste imali što pokrenuti loša je trgovina.

Pročitajte trenutačno stanje i potvrdite selektor

Provjerite stanje usluge prije pokretanja da biste znali što uspješno pokretanje treba promijeniti:

scutil --nc status "Office VPN"

Ako dvije usluge dijele prikazano ime, ime je dvosmisleno. Proslijedite identifikator umjesto toga; naredba prihvaća oba, ali samo identifikator jamči odabir jedne usluge. Provjerite da je riječ stanja ona koju prepoznajete — obično Connected, Disconnected, Connecting ili Disconnecting — prije nego je parsirate u skripti. Provjerite i upravlja li se profilom jer zaključana konfiguracija može prihvatiti naredbu i ipak je ignorirati ili zatražiti potvrdu.

Ovaj poziv stanja je jeftin pa ga upotrijebite kao čuvar u automatizaciji: pokrenite samo kada je status Disconnected i ne tretirajte Connecting kao neuspjeh. Ako je usluga već Connected, preskočite pokretanje umjesto da prekinete tunel koji radi.

Pokrenite vezu i pričekajte da se stanje stabilizira

Zahtjev za pokretanje je asinkron. Naredba se vraća kada je zahtjev prihvaćen, a ne kada autentifikacija završi ili se rute instaliraju. Pokrenite je, zatim provjeravajte stanje s ograničenim čekanjem i izađite ako se usluga vrati na 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

Status Connecting koji se nikada ne riješi obično upućuje na vjerodajnice, MFA ili poslužitelj, a ne na scutil. Naredba ne može pružiti interaktivnu prijavu pa će profil koji očekuje token ili hardverski ključ stajati u Connecting i na kraju se povući. Pročitajte riječ stanja prije dodavanja ponovnih pokušaja; petlja protiv upita za autentifikaciju ne može uspjeti.

Ne tretirajte izlazni status ljuske kao spremnost. Koristan signal je niz stanja, praćen dokazom da tunel nosi promet. Naredba za pokretanje koja se tiho vrati može vas ipak ostaviti s vezom koja se nikada ne autentificira.

Dokažite da tunel nosi promet, a ne samo da piše Connected

Connected opisuje vezu, a ne odluku o usmjeravanju. Vlastite PPP i IKEv2 usluge stvaraju sučelje ppp ili utun i instaliraju rute, dok podijeljeni tunel namjerno ostavlja zadanu rutu na miru. Pregledajte sučelja i obje obitelji adresa:

ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns

Pronađite sučelje koje je usluga stvorila umjesto da pogađate broj, zatim pitajte tablicu usmjeravanja koje sučelje koristi određena destinacija: route -n get 10.0.0.10, uz zamjenu internim hostom. Ako prijavi fizičko sučelje, tunel je aktivan ali ne nosi taj tok. Provjerite rute podijeljenog tunela, redoslijed razrješivača i svako lokalno pravilo vatrozida koje dopušta sučelje tunela ali ne proces.

Razrješavanje imena uobičajeni je lažni negativ. Interna imena mogu se razriješiti kroz pogrešan razrješivač dok je tunel savršeno zdrav, što izgleda kao kvar VPN-a i nije. scutil --dns prikazuje redoslijed koji će macOS koristiti; nakon promjene razrješivača ispraznite predmemoriju s dscacheutil -flushcache i sudo killall -HUP mDNSResponder.

Držite vjerodajnice i privilegije izvan naredbenog retka

Nikada ne stavljajte lozinku, unaprijed dijeljeni ključ ili token u argumente. Argumenti su vidljivi u popisima procesa i završavaju u povijesti ljuske, a kopirani transkript podrške može ih odati. Vlastito rukovanje vjerodajnicama profila — bilo da je riječ o stavci Keychaina, sistemskom upitu ili toku autentifikacije klijenta — mjesto je za tajne.

Pokretanje naredbe s sudo ne čini interaktivnu prijavu nadziranom. Ono mijenja efektivnog korisnika, a ne dostupnost GUI upita, hardverskog tokena ili keychaina za prijavu. LaunchAgent može pokrenuti uslugu nakon što se korisnik prijavi i keychain otključa; LaunchDaemon obično ne može dosegnuti te dijelove korisničke sesije. Ako organizacija upravlja uslugom, njezina pravila životnog ciklusa pobjeđuju svaku lokalnu skriptu.

Zaustavite uslugu i provjerite da je ostala zaustavljena

Zaustavite istim selektorom kojim ste je pokrenuli, zatim ponovno pročitajte stanje umjesto da pretpostavite da je tunel nestao:

scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"

Zaustavljanje koje se vrati na Disconnected ipak ostavlja jednu stvar za provjeru: je li profil postavljen na povezivanje na zahtjev, što ga može vratiti bez vaše skripte. Ako drugi klijent posjeduje rute na istom Macu, te rute mogu preživjeti vlastito zaustavljanje. Ponovno provjerite rutu prije nego zaključite da je stroj izvan VPN-a.

Za omotač koji pokrećete ručno držite redoslijed fiksnim: popis, status, pokretanje, provjera, test rute, zaustavljanje, potvrda. Ne parsirajte prijateljsko ime iz slobodnog izlaza kada je identifikator dostupan i ne tretirajte izlaz naredbe za pokretanje kao spremnost. Upravitelj veza izvješćuje stanje; vaš dokaz je stanje plus ruta koja pokazuje na tunel.

Povezani članci