Пастаянныя маршруты для VPN на Mac: networksetup ці хук падлучэння?
Маршрут, які ўводзіцца пасля кожнага перападлучэння, не з’яўляецца палітыкай. Вызначце, ці належыць прэфікс службе VPN, часоваму тэсту ці хуку для адрасоў, якія вядомыя толькі пасля ўзгаднення.
Маршрут, які ўводзіцца пасля кожнага падлучэння, вырашае момант, а не тыдзень. У macOS трывалы выбар звычайна — прэфікс, захаваны разам са службай VPN, бо служба пераўсталёўвае яго пры кожным падлучэнні і выдаляе, калі служба спынена. Альтэрнатывы — часовы route add для тэставання і хук падлучэння для адрасоў, якія вядомыя толькі пасля ўзгаднення.
Вызначце, ці належыць маршрут службе ці сеансу
Спытайце, ад чаго залежыць прэфікс. Калі гэта фіксаваная прыватная сетка за ўласнай службай VPN, маршрут належыць гэтай службе. Калі ён залежыць ад адраса партнёра, які змяняецца пры кожным падлучэнні, лепшым уладальнікам можа быць хук або задача, якая кіруецца станам. Калі вы толькі правяраеце шлях на наступныя пяць хвілін, часовага маршруту дастаткова.
Маршрут, прывязаны да службы, мае самы чысты жыццёвы цыкл. Ён з’яўляецца разам са службай і знікае, калі служба не падключана, таму не можа перажыць тунель, на які паказвае. Гэтая ўласцівасць каштоўнейшая за зручнасць аднарадковай каманды.
Маршрут, прывязаны да сеансу, належыць інтэрфейсу, а гэты нумар змяняецца без папярэджання. Перападлучэнне можа даць тунелю іншае імя 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, каб прымусіць падзел. Кліент, які ўводзіць поўны тунель, можа пераўсталяваць свае маршруты пасля перападлучэння або абнаўлення палітыкі, таму ручная змена скасоўваецца маўкліва. Жменька прыватных прэфіксаў — гэта праблема маршрутызацыі; трымаць увесь інтэрнэт-трафік лакальным насуперак палітыцы поўнага тунеля — рашэнне на баку сервера.
Выбірайце хук, толькі калі адрас узгадняецца
Для сувязей на аснове PPP, такіх як L2TP, macOS выконвае /etc/ppp/ip-up пасля ўсталявання сувязі. Скрыпт атрымлівае імя інтэрфейса і ўзгодненыя лакальны і аддалены адрасы, таму ён можа дадаць маршрут, які залежыць ад партнёра, прызначанага серверам. Гэта менавіта выпадак, які фіксаваны маршрут службы не можа выказаць.
IKEv2 і кліенты вытворцаў могуць зусім не выкарыстоўваць гэты шлях PPP, а значыць, скрыпт можа маўчаць увесь сеанс. Калі гэта адбываецца, задача launchd, якая апытвае scutil --nc status і рэагуе на змену стану, — эквівалентны механізм з невялікай затрымкай.
Які б хук вы ні выкарыстоўвалі, зрабіце яго ідэмпатэнтным і няхай ён выдаляе толькі створаныя ім маршруты. Скрыпт, які выдаляе кожны маршрут, што згадвае тунель, у рэшце рэшт выдаліць маршрут, які трымае сервер VPN дасяжным, і злучэнне ўпадзе, як толькі ўдасца.
Скончыце праверкай прыватнага пункта прызначэння, звычайнага аглядання і цыкла перападлучэння або сну. Затым агледзіце scutil --dns, бо развязанне імёнаў — асобная палітыка, і працоўны маршрут не даказвае, што прыватныя імёны развязваюцца.