Раздзелены тунель — гэта палітыка маршрутызацыі, выяўленая як набор правілаў, і кліент — гэта толькі тое, што іх усталёўвае. Раздзяленне адбываецца ў двух месцах: правілы супастаўлення, якія выбіраюць шлях для кожнага пакета, і прывязкі, якія ўтрымліваюць праграму на адным інтэрфейсе, што б ні казала табліца. Які механізм выкарыстоўвае ваш кліент, тлумачыць большасць нечаканасцей, пра якія паведамляюць людзі.

Палітыку, якую можна выкласці ў адным радку, можна праверыць. Палітыка, апісаная як больш хуткі прагляд, — не, і яна не скажа вам, якое правіла змяніць, калі запыт ідзе не ў той бок.

Кліент усталёўвае правілы, ядро робіць выбар

Калі тунель узнімаецца, кліент дадае маршруты і часта правілы палітыкі ў тую ж табліцу, якой карыстаюцца іншыя вашы інтэрфейсы. Кожны пакет затым трапляе ў пошук, які параўноўвае яго прызначэнне з кожным прэтэндэнтам-прэфіксам і пакідае самае дакладнае супадзенне, а прыярытэт вырашае нічыю паміж правіламі, што паказваюць на розныя табліцы. Нішто ў гэтым пошуку не ведае, што пакет прыйшоў з закладкі браўзера, а не з задачы рэзервовага капіравання. Перамагае тое правіла, якое задае шлях, і вы можаце прачытаць яго да і пасля змены.

Вось чаму раздзелены тунель можа выглядаць адвольным. Два прызначэнні ў адной праграме могуць ісці рознымі шляхамі проста таму, што адзін прэфікс вузейшы за другі.

Той жа выбар існуе на кожнай платформе, хоць назвы змяняюцца. Windows пераносіць рашэнне ў сваю платформу фільтраў, Android паказвае спіс дазволаў для кожнай праграмы праз сваю службу VPN, а macOS прывязвае тунель да прылады, якая ўсё яшчэ падпарадкоўваецца табліцы маршрутызацыі. Нататкі Microsoft пра маршрутызацыю вартыя чытання для выпадку Windows, а кіраўніцтва, напісанае для адной платформы, рэдка пераносіцца нязменным на іншую.

Прывязка да праграм і прэфіксы прызначэння — розныя інструменты

Палітыка прызначэння пытаецца, куды ідзе пакет, і звяртаецца да табліцы маршрутаў або правіла палітыкі. Палітыка для праграмы пытаецца, якая праграма адкрыла сокет, і платформа ўтрымлівае гэтую праграму на інтэрфейсе тунеля, нават калі больш дакладны маршрут паказвае ў іншае месца. Другая мацнейшая, бо перажывае змены табліцы, але яна ахоплівае толькі працэсы, якія платформа можа прыпісаць. Дапаможны працэс, убудаваны браўзер або служба, якая адкрывае ўласнае злучэнне, могуць не атрымаць у спадчыну прывязку, якую вы меркавалі.

Ні адзін з падыходаў не выжывае без дапамогі пры палітыцы, заснаванай на імёнах. Адрасы буйных сайтаў круцяцца па сетках матэрыялаў, таму прывязка імя хоста да некалькіх прэфіксаў стварае правіла, якое ціха перастае супадаць. Палітыка, якая павінна ісці за імёнамі, патрабуе кампанента, які ўлічвае рэзалютар, а не статычнага маршруту.

DNS і аварыйны перамыкач ідуць сваімі правіламі

Развязанне імёнаў — асобнае рашэнне ад маршрутызацыі пакетаў, і раздзелены тунель звычайна хоча два рэзалютары: кампанійскі для ўнутраных імёнаў, лакальны для ўсяго астатняга. Кліент можа ўсталяваць налады DNS для кожнага інтэрфейсу, перадаць запыты заглушанаму рэзалютару або пакінуць сістэмнае значэнне некранутым. Браўзер з уласным зашыфраваным рэзалютарам абыходзіць усе тры ўладкаванні. Праверце запыт замест таго, каб меркаваць, што рэзалютар пайшоў за маршрутам.

Аварыйны перамыкач дадае фільтр зверху, і гэты фільтр не заўсёды адрознівае намернае выключэнне ад выпадковай уцечкі. Некаторыя кліенты блокуюць усё па-за тунелем, а іншыя дазваляюць выключэнні, якія абвяшчае палітыка, таму прачытайце, як паводзіць сябе ваш, перш чым спадзявацца на любы з двух.

Праверце раздзяленне з абодвух бакоў

Праверце ўключаны шлях і выключаны шлях асобна і ацэньвайце вынік па назве інтэрфейсу, а не па публічным адрасе. Гэтыя каманды мяркуюць хост Linux з ужо ўзнятай прыладай тунеля. Замяніце 203.0.113.10 на прызначэнне, якое ваша палітыка накіроўвае ўнутр, а 198.51.100.25 — на тое, што яна адпраўляе вонкі.

ip route get 203.0.113.10
ip route get 198.51.100.25
resolvectl query intranet.example.com
curl -s --interface tun0 https://example.com -o /dev/null -w '%{http_code}\n'

Чытайце першыя два адказы разам, бо інтэрфейс, названы ў кожным, паказвае, ці паставіла раздзяленне гэтае прызначэнне на тунель. Запыт рэзалютара паказвае, які сервер адказаў на ўнутранае імя, а апошняя каманда даказвае, што прылада тунеля наогул можа несці запыт. Збой у другім радку пры поспеху ў першым азначае, што палітыка робіць менавіта тое, што ёй сказалі.

Паўтарыце набор пасля перападлучэння і пасля змены сеткі. Абнаўленне арэнды і зменлівасць інтэрфейсаў — гэта месцы, дзе раздзяленне перастае адпавядаць намеру, дзеля якога было пабудавана, і захаваны вывад кожнага запуску робіць дрыфт відавочным.

Падобныя артыкулы