Mac VPN-ийн байнгын маршрут: networksetup эсвэл холболтын hook?
Дахин холбогдох бүрт бичигддэг маршрут бол бодлого биш. Уг префикс VPN үйлчилгээнд, түр туршилтад эсвэл зөвхөн хэлэлцээрийн дараа мэдэгдэх хаягуудад зориулсан hook-д хамаарах эсэхийг шийдээрэй.
Холболт бүрийн дараа бичигддэг маршрут нь тухайн мөчийг шийддэг, долоо хоногийг биш. macOS дээр байнгын сонголт нь ихэвчлэн VPN үйлчилгээтэй хамт хадгалагдсан префикс, учир нь үйлчилгээ түүнийг холболт бүрт дахин суулгаж, үйлчилгээ унтарсан үед хасдаг. Өөр хувилбарууд нь туршилтад зориулсан түр route add ба зөвхөн хэлэлцээрийн дараа мэдэгдэх хаягуудад зориулсан холболтын hook юм.
Маршрут үйлчилгээнд эсвэл сессэд хамаарах эсэхийг шийдээрэй
Префикс юунаас хамаардаг вэ гэж асуугаарай. Хэрэв энэ нь дотоодын VPN үйлчилгээний ард байх тогтмол хувийн сүлжээ бол маршрут тэр үйлчилгээнд хамаарна. Хэрэв холболт бүрт өөрчлөгддөг хамтрагчийн хаягаас хамаардаг бол hook эсвэл төлөвөөр удирдуулсан ажил илүү сайн эзэн байж болно. Хэрэв та зөвхөн дараагийн таван минутын зам шалгаж байгаа бол түр маршрут хангалттай.
Үйлчилгээнд холбогдсон маршрут хамгийн цэвэр амьдралын мөчлөгтэй. Тэр үйлчилгээтэй хамт гарч ирээд, үйлчилгээ холбогдоогүй үед алга болдог тул заасан туннелээс илүү удаан амьдарч чадахгүй. Энэ шинж чанар нь нэг мөр командын тав тухыг бодвол илүү үнэ цэнэтэй.
Сессэд холбогдсон маршрут интерфэйст хамаарах бөгөөд тэр дугаар мэдэгдэлгүй өөрчлөгддөг. Дахин холболт нь туннелд өмнөх сессээс өөр utun нэр өгч болох бөгөөд энэ нь хатуу кодлосон командыг юу ч заахгүй, эсвэл бүр дор нь өөр туннел рүү заасан маршрут болгоно.
Одоогийн маршрут болон үйлчилгээний төлөвийг уншаарай
Систем үнэхээр ашигладаг нэрсээс эхэл. Сүлжээний тохиргоо дахь үйлчилгээний нэр нь доорх командуудын танигч бөгөөд одоогийн маршрутын хүснэгт холбогдсон клиент юу суулгасныг харуулна. Туннель ажиллаж байх үед хоёуланг нь уншаарай.
scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5
Тэр хайлт нь цөм энэ хаягт энэ мөчид аль гарц, интерфэйсийг сонгохыг харуулна. Хэрэв аль хэдийн туннелийг сонгож байгаа бол префикс хамрагдсан бөгөөд шинэ маршрут илүүц болно. Хэрэв локал чиглүүлэгчийг сонгож байгаа бол туннельд тэр префикс дутагдаж байна.
Холбогдсон үедээ хамтрагчийн хаягийг тэмдэглэ. Энэ нь үйлчилгээнд холбогдсон маршрут дахь гарцын утга болох бөгөөд ихэвчлэн netstat -rn дотор туннелийн өгөгдмөл маршрутад харуулдаг очих газар юм.
Префиксыг networksetup-аар хадгал
networksetup хэрэгсэл сүлжээний үйлчилгээнд нэмэлт маршрут хавсаргадаг. OfficeVPN нэртэй үйлчилгээ болон туннелийн хамтрагчаар хүрдэг хувийн префиксийн хувьд хэлбэр нь:
sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN
Үйлчилгээний нэрний дараах гурвал бүр очих газар, түүний сүлжээний маск, гарц болгож туннелийн хамтрагчийг өгнө. Нэг дуудлага хэд хэдэн префикс зөөж болох бөгөөд хоосон дуудлага хадгалсан жагсаалтыг цэвэрлэнэ. Уншигч нь шалгалтын алхам; жагсаалт хоосон бол тохиргоо таны бодож байгаа үйлчилгээнд хэрэглэгдээгүй.
Гарц нь туннелийн хамтрагч байх ёстой, физик чиглүүлэгч биш. Локал гарцыг нэрлэсэн маршрут хувийн префиксыг физик интерфэйсээр гадагш илгээдэг бөгөөд энэ нь нэмэлт алхмуудтай анхны алдаа юм. Хуучирсан хамтрагч нь зөв харагдах маршрут хэзээ ч урсгал зөөдөггүйн хамгийн нийтлэг шалтгаан. Хуучин тэмдэглэлээс хаяг хуулахын оронд холбогдсон төлвөөс хамтрагчийг дахин уншаарай.
route add-г зөвхөн туршилтад ашигла
Шууд маршрут нь префиксыг байнгын болгохын өмнө ажиллаж байгааг батлахад хэрэгтэй. Интерфэйсийн хэлбэр нь гарц хайлтаас зайлсхийдэг:
sudo route -n add -net 10.20.0.0/16 -interface utun4
Маршрут дараагийн дахин холболтод алга болох бөгөөд өнөөдөр байгаа интерфэйсийн дугаараас хамаарна. Энэ нь үүнийг оношлогоо болгодог, байршуулалт биш. Туршилт ажиллаж, үйлчилгээнд холбогдсон маршрут ажиллахгүй бол эхлээд гарцын утгыг харьцуул; энэ бол хамгийн олон удаа буруу байдаг талбар.
VPN-ийн өгөгдмөл маршрутыг сольж хуваалтын зан төлөвийг тулгах зөвлөгөөнөөс болгоомжил. Бүрэн туннелийг тулгадаг клиент дахин холболт эсвэл бодлогын шинэчлэлтийн дараа маршрутуудаа дахин суулгаж болох тул гараар хийсэн өөрчлөлт чимээгүй хүчингүй болно. Цөөн хувийн префикс бол чиглүүлэлтийн асуудал; бүрэн туннелийн бодлогын эсрэг бүх интернэт урсгалыг локал байлгах нь серверийн талын шийдвэр.
Зөвхөн хаяг хэлэлцэгдэж байгаа үед hook сонго
PPP-д суурилсан холбоосуудын хувьд, жишээ нь L2TP, macOS холбоос тогтсон даруйд /etc/ppp/ip-up-г ажиллуулна. Скрипт интерфэйсийн нэр болон хэлэлцэгдсэн локал, алсын хаягуудыг хүлээн авдаг тул серверийн олгосон хамтрагчаас хамаарах маршрут нэмж чадна. Тогтмол үйлчилгээний маршрут илэрхийлж чадахгүй яг тэр тохиолдол энэ юм.
IKEv2 болон үйлдвэрлэгчдийн клиентүүд тэр PPP замыг огт ашиглахгүй байж болох бөгөөд энэ нь скрипт бүх сессийн турш чимээгүй байж болно гэсэн үг. Ийм үед scutil --nc status-г асууж, төлөвийн өөрчлөлтөд хариу үйлдэл хийдэг launchd ажил нь бага зэрэг сааталтайгаар адилтгах механизм юм.
Ямар ч hook ашигласан, үүнийг идемпотент болгож, зөвхөн өөрөө үүсгэсэн маршрутуудыг устгадаг болго. Туннелийг дурдсан бүх маршрутыг устгадаг скрипт эцэст нь VPN серверийг хүртээмжтэй байлгах маршрутыг ч устгах бөгөөд холболт амжилттай болмогц унана.
Хувийн очих газар, энгийн хөтлөлт, дахин холболт эсвэл унтах циклийг шалгаж дуусга. Дараа нь scutil --dns-г шалга, учир нь нэр шийдвэрлэх нь тусдаа бодлого бөгөөд ажиллаж буй маршрут хувийн нэрс шийдэгдэж байгааг батлахгүй.