Покретање сачуваног Mac VPN-а из терминала помоћу scutil --nc
Користите scutil --nc да покренете, прегледате и зауставите сачувану macOS VPN услугу, држите акредитиве изван argv и докажите да саобраћај заиста иде кроз тунел.
Имате сачувану VPN услугу у Системским подешавањима и желите да је терминал покрене. На macOS подржани пут је scutil --nc, али само за услуге које поседује сопствени менаџер мрежних веза система. Трака менија није API: клијенти трећих страна обично имају сопствену аутоматизацију, а профил који пошаље услуга за управљање може да одбије локално покретање. Ово је контролна листа коју спроводим: пронађите тачну услугу, прочитајте њено стање, покрените је, сачекајте да се стање промени и затим докажите да саобраћај заиста иде кроз тунел. Зауставите се на првом кораку који се не слаже, јер свака каснија наредба претпоставља да је претходна успела.
Пронађите услугу пре него што покушате да је покренете
Почните са пописом, а не са именом профила којег се сећате:
scutil --nc help
scutil --nc list
Сваки ред спаја статус са идентификатором услуге, типом и приказаним именом. Идентификатор је вредност према којој се пишу скрипте, јер се приказана имена понављају и могу да се мењају. Apple-ов scutil приручник документује режим мрежне везе, док је инсталирани --nc help меродавна листа поднаредби на том Mac-у; не претпостављајте да заставица из старијег водича још постоји у вашој верзији macOS-а.
Празна листа је резултат, а не грешка. Услуга коју је направио клијент добављача или профил за управљање може бити активна док је овде невидљива, или видљива са типом којим сопствени контролер не може да управља. У том случају употребите алат добављача или документацију профила. Прављење паралелног сопственог профила само да бисте имали шта да покренете је лоша трговина.
Прочитајте тренутно стање и потврдите селектор
Питајте услугу за стање пре покретања, да бисте знали шта успешно покретање треба да промени:
scutil --nc status "Office VPN"
Ако две услуге деле приказано име, име је двосмислено. Проследите идентификатор уместо тога; наредба прихвата оба, али само идентификатор гарантује избор једне услуге. Проверите да је реч стања она коју препознајете — обично Connected, Disconnected, Connecting или Disconnecting — пре него што је парсирате у скрипти. Проверите и да ли се профилом управља, јер закључана конфигурација може да прихвати наредбу и ипак је игнорише или затражи потврду.
Овај позив стања је јефтин, па га користите као чувара у аутоматизацији: покрените само када је статус Disconnected и не третирајте Connecting као неуспех. Ако је услуга већ Connected, прескочите покретање уместо да прекинете тунел који ради.
Покрените везу и сачекајте да се стање стабилизује
Захтев за покретање је асинхрон. Наредба се враћа када је захтев прихваћен, а не када се аутентификација заврши или руте инсталирају. Покрените је, затим проверавајте стање са ограниченим чекањем и изађите ако се услуга врати на 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 који се никада не реши обично указује на акредитиве, MFA или сервер, а не на scutil. Наредба не може да пружи интерактивну пријаву, па ће профил који очекује токен или хардверски кључ остати у Connecting и на крају се повући. Прочитајте реч стања пре него што додате поновљене покушаје; петља против захтева за аутентификацију не може да успе.
Не третирајте излазни статус љуске као спремност. Користан сигнал је низ стања, праћен доказом да тунел носи саобраћај. Наредба за покретање која се тихо врати може вас ипак оставити са везом која се никада не аутентификује.
Докажите да тунел носи саобраћај, а не само да пише Connected
Connected описује везу, а не одлуку о рутирању. Сопствене PPP и IKEv2 услуге стварају интерфејс ppp или utun и инсталирају руте, док подељени тунел намерно оставља подразумевану руту на миру. Прегледајте интерфејсе и обе фамилије адреса:
ifconfig -l
netstat -rn -f inet
netstat -rn -f inet6
scutil --dns
Пронађите интерфејс који је услуга направила уместо да погађате број, затим питајте табелу рутирања који интерфејс користи одређено одредиште: route -n get 10.0.0.10, уз замену интерним домаћином. Ако пријави физички интерфејс, тунел је активан али не носи тај ток. Проверите руте подељеног тунела, редослед разрешивача и свако локално правило заштитног зида које дозвољава интерфејс тунела али не и процес.
Разрешавање имена је уобичајени лажни негатив. Интерна имена могу да се разреше кроз погрешан разрешивач док је тунел потпуно здрав, што изгледа као квар VPN-а и није. scutil --dns приказује редослед који ће macOS користити; након промене разрешивача испразните кеш са dscacheutil -flushcache и sudo killall -HUP mDNSResponder.
Држите акредитиве и привилегије изван командне линије
Никада не стављајте лозинку, унапред дељени кључ или токен у аргументе. Аргументи су видљиви у листама процеса и завршавају у историји љуске, а копирани запис подршке може да их ода. Сопствено руковање акредитивима профила — било да је ставка Keychain-а, системски захтев или ток аутентификације клијента — место је за тајне.
Покретање наредбе са sudo не чини интерактивну пријаву надзираном. То мења ефективног корисника, а не доступност GUI захтева, хардверског токена или keychain-а за пријаву. LaunchAgent може да покрене услугу након што се корисник пријави и keychain откључа; LaunchDaemon обично не може да достигне те делове корисничке сесије. Ако организација управља услугом, њена правила животног циклуса побеђују сваку локалну скрипту.
Зауставите услугу и проверите да је остала заустављена
Зауставите истим селектором којим сте је покренули, затим поново прочитајте стање уместо да претпоставите да је тунел нестао:
scutil --nc stop "Office VPN"
scutil --nc status "Office VPN"
Заустављање које се врати на Disconnected ипак оставља једну ствар за проверу: да ли је профил подешен за повезивање на захтев, што га може вратити без ваше скрипте. Ако други клијент поседује руте на истом Mac-у, те руте могу да преживе сопствено заустављање. Поново проверите руту пре него што закључите да је машина изван VPN-а.
За омотач који покрећете ручно, држите редослед фиксним: листа, статус, покретање, провера, тест руте, заустављање, потврда. Не парсирајте пријатељско име из слободног излаза када је идентификатор доступан и не третирајте излаз наредбе за покретање као спремност. Менаџер веза извештава стање; ваш доказ је стање плус рута која показује на тунел.