Har bir ulanishdan keyin yoziladigan marshrut lahzani hal qiladi, haftani emas. macOSda doimiy tanlov odatda VPN xizmati bilan saqlanadigan prefiks bo'ladi, chunki xizmat uni har bir ulanishda qayta o'rnatadi va xizmat o'chirilganda olib tashlaydi. Muqobillar sinov uchun vaqtinchalik route add va faqat muzokaralardan keyin ma'lum bo'lgan manzillar uchun ulanish hookidir.

Marshrut xizmatga yoki sessiyaga tegishli ekanini hal qiling

Prefiks nimaga bog'liq ekanini so'rang. Agar u mahalliy VPN xizmati orqasidagi barqaror shaxsiy tarmoq bo'lsa, marshrut o'sha xizmatga tegishli. Agar u har bir ulanishda o'zgaradigan sherik manziliga bog'liq bo'lsa, hook yoki holat bilan boshqariladigan ish yaxshiroq egasi bo'lishi mumkin. Agar siz faqat keyingi besh daqiqa uchun yo'lni tekshirayotgan bo'lsangiz, vaqtinchalik marshrut yetarli.

Xizmatga bog'langan marshrut eng toza hayot tsikliga ega. U xizmat bilan birga paydo bo'ladi va xizmat ulanmagan bo'lsa yo'qoladi, shuning uchun u ko'rsatayotgan tunnelidan uzoq yashay olmaydi. Bu xususiyat bir qatorli buyruq qulayligidan qimmatroq.

Sessiyaga bog'langan marshrut interfeysga tegishli va bu raqam ogohlantirishsiz o'zgaradi. Qayta ulanish tunnelga oldingi sessiya ishlatganidan boshqa utun nomini berishi mumkin, bu esa qattiq kodlangan buyruqni hech narsaga yoki, undan yomoni, boshqa tunnelga ishora qiluvchi marshrutga aylantiradi.

Joriy marshrut va xizmat holatini o'qing

Tizim haqiqatda ishlatadigan nomlardan boshlang. Tarmoq sozlamalaridagi xizmat nomi quyidagi buyruqlar uchun identifikator, joriy marshrutlar jadvali esa ulangan mijoz nima o'rnatganini ko'rsatadi. Tunnel ishlab turganda ikkalasini ham o'qing.

scutil --nc list
networksetup -listnetworkserviceorder
netstat -rn | head -30
route get 10.20.5.5

Bu qidiruv yadro ayni damda bu manzil uchun qaysi shlyuz va interfeysni tanlashini ko'rsatadi. Agar u allaqachon tunnelni tanlasa, prefiks qoplangan va yangi marshrut ortiqcha bo'lardi. Agar u mahalliy router'ni tanlasa, tunnelda bu prefiks yo'q.

Ulangan paytda sherik manzilini qayd eting. U xizmatga bog'langan marshrutda shlyuz qiymatiga aylanadi va odatda netstat -rn ichida tunnelning standart marshruti uchun ko'rsatilgan manzil shu bo'ladi.

Prefiksni networksetup bilan saqlang

networksetup asbobi tarmoq xizmatiga qo'shimcha marshrutlarni biriktiradi. OfficeVPN nomli xizmat va tunnel sherigi orqali yetib boriladigan shaxsiy prefiks uchun shakl quyidagicha:

sudo networksetup -setadditionalroutes OfficeVPN 10.20.0.0 255.255.0.0 10.8.0.6
networksetup -getadditionalroutes OfficeVPN

Xizmat nomidan keyingi har bir uchlik manzilni, uning tarmoq maskasini va shlyuz sifatida tunnel sherigini beradi. Bitta chaqiruv bir nechta prefiksni olib yurishi mumkin, bo'sh chaqiruv esa saqlangan ro'yxatni tozalaydi. O'quvchi tekshirish bosqichidir; agar ro'yxat bo'sh bo'lsa, sozlama siz o'ylagan xizmatga qo'llanmagan.

Shlyuz tunnel sherigi bo'lishi kerak, jismoniy router emas. Mahalliy shlyuzni nomlaydigan marshrut shaxsiy prefiksni jismoniy interfeys orqali tashqariga yuboradi, bu qo'shimcha qadamlar bilan asl nosozlikdir. Eskirgan sherik to'g'ri ko'rinadigan marshrutning hech qachon trafik olib yurmasligining eng keng tarqalgan sababidir. Sherikni eski yozuvdan manzil ko'chirish o'rniga ulangan holatdan qayta o'qing.

route add buyrug'ini faqat sinov uchun ishlating

To'g'ridan-to'g'ri marshrut prefiksning ishlashini doimiy qilishdan oldin isbotlash uchun foydalidir. Interfeys shakli shlyuz qidiruvidan qochadi:

sudo route -n add -net 10.20.0.0/16 -interface utun4

Marshrut keyingi qayta ulanishda yo'qoladi va bugun mavjud interfeys raqamiga bog'liq. Bu uni diagnostikaga aylantiradi, joylashtirishga emas. Agar sinov ishlasa va xizmatga bog'langan marshrut ishlamasa, avval shlyuz qiymatini solishtiring; eng ko'p xato bo'ladigan maydon shu.

VPNning standart marshrutini almashtirib bo'linish xatti-harakatini majburlash haqidagi maslahatlardan ehtiyot bo'ling. To'liq tunnelni majburlaydigan mijoz qayta ulanish yoki siyosat yangilanishidan keyin marshrutlarini qayta o'rnatishi mumkin, shuning uchun qo'lda kiritilgan o'zgartirish jimgina bekor qilinadi. Bir nechta shaxsiy prefiks marshrutlash muammosi; to'liq tunnel siyosatiga qarshi butun internet trafigini mahalliy ushlab turish server tomonidagi qaror.

Hookni faqat manzil muzokara qilinganda tanlang

PPP asosidagi ulanishlar uchun, masalan L2TP, macOS ulanish o'rnatilgach /etc/ppp/ip-up buyrug'ini bajaradi. Skript interfeys nomini hamda kelishilgan mahalliy va uzoq manzillarni oladi, shuning uchun server ajratgan sherikka bog'liq marshrut qo'sha oladi. Aynan shu holatni qat'iy xizmat marshruti ifodalay olmaydi.

IKEv2 va ishlab chiqaruvchi mijozlari bu PPP yo'lidan umuman foydalanmasligi mumkin, ya'ni skript butun sessiya davomida jim turishi mumkin. Bu sodir bo'lganda, scutil --nc status ni so'rab, holat o'zgarishiga javob beradigan launchd ishi kichik kechikish bilan ekvivalent mexanizm bo'ladi.

Qaysi hookdan foydalanmasangiz ham, uni idempotent qiling va u faqat o'zi yaratgan marshrutlarni olib tashlasin. Tunnelni tilga oladigan har bir marshrutni o'chiradigan skript oxir-oqibat VPN serverini yetib borish mumkin bo'lgan holda ushlab turuvchi marshrutni ham o'chiradi va ulanish muvaffaqiyatli bo'lishi bilanoq uziladi.

Shaxsiy manzilni, oddiy ko'rib chiqishni va qayta ulanish yoki uyqu siklini tekshirib yakunlang. So'ngra scutil --dns ni ko'zdan kechiring, chunki nomlarni hal qilish alohida siyosat va ishlaydigan marshrut shaxsiy nomlar hal qilinishini isbotlamaydi.

O'xshash maqolalar