Танд Системийн тохиргоонд хадгалсан 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-ээс гадуур байна гэж дүгнэхийн өмнө маршрутыг дахин шалга.

Гараар ажиллуулдаг бүрхүүлийн хувьд дарааллыг тогтмол бари: жагсаалт, төлөв, эхлэл, асуулт, маршрутын тест, зогсолт, баталгаа. Танигч боломжтой үед чөлөөт форматын гаралтаас найрсаг нэрийг бүү шинжил, эхлүүлэх командын гаралтыг бэлэн байдал гэж бүү үз. Холболтын менежер төлөвийг мэдээлдэг; чиний баталгаа бол төлөв ба туннель рүү заасан маршрут.

Холбоотой нийтлэлүүд