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 тексеріңіз, өйткені атауларды шешу бөлек саясат және жұмыс істейтін маршрут жеке атаулардың шешілетінін дәлелдемейді.