Дакументацыя раздзеленага тунэля патрабуе правіла DNS каля кожнага маршруту
Маршрут вырашае па адрасе, рэзалвер — па імені. Апішыце абодва селектары для кожнага патоку, кожны з адным тэстам, інакш запіска праваліцца, калі DNS зменіцца.
Запіска пра раздзелены тунэль, якая кажа "офісны трафік ідзе праз VPN", задкументавала адно рашэнне і мае на ўвазе тры іншыя. На ўзроўні пакетаў табліца маршрутызацыі выбірае інтэрфейс па адрасе прызначэння; на ўзроўні імён рэзалвер выбірае сервер па запыце, і гэтыя два выбары робяцца незалежна. Таму карэктна задкументаваны прэфікс усё яшчэ можа даць машыну, якая развязвае ўнутранае імя ў публічны адрас, або не развязвае нічога, пакуль маршрут выглядае бездакорна.
Два селектары, адна спроба злучэння
Калі праграма звяртаецца да files.corp.example, адбываюцца два пошукі да таго, як узнікне пакет. Рэзалвер вырашае, які сервер атрымае запыт, выкарыстоўваючы дамены пошуку, дамены маршрутызацыі для кожнага канала або яўнае правіла профілю. Затым табліца маршрутызацыі вырашае, куды пойдзе атрыманы адрас, выкарыстоўваючы найдаўжэйшае супадзенне прэфікса з прызначэннем.
Нішто не звязвае гэтыя два рашэнні. Прыватная зона можа адказаць адрасам 10.20.4.11 у той час як табліца маршрутызацыі накіроўвае 10.20.0.0/16 у тунэль, і злучэнне працуе. Перавярніце любое з іх, і яно зламаецца так, што выглядае як іншае: правільная палітыка DNS плюс адсутны маршрут дае развязанае імя і тайм-аўт, а правільны маршрут плюс публічны рэзалвер дае адрас, які чыста маршрутызуецца не туды.
DNS з раздзеленым гарызонтам робіць гэта вастрэй. Адно і тое ж імя можа вярнуць прыватны адрас ад унутранага рэзалвера і публічны адрас ад рэзалвера, звернутага да інтэрнэту, таму запіска, якая фіксуе толькі прэфікс, не можа прадказаць, які адрас кліент фактычна выкарыстае. Запішыце шлях рэзалвера, інакш адрас — здагадка.
Што прапускае запіска толькі пра маршрут
Запіс толькі пра маршрут непрыдатны для самай частай памылкі раздзеленага тунэля: імён. Карыстальнік паведамляе, што унутраная сетка не загружаецца, тунэль узняты, і прэфікс прысутнічае. Той, хто возьме заяўку, не мае запісу, які рэзалвер павінен быў адказаць, не мае спосабу адрозніць няправільны суфікс пошуку ад заблакаванага сервера і не мае базавай лініі для параўнання.
Другі пропуск — гэта спіс выключэнняў. Дызайн раздзеленага тунэля вызначаецца ў такой жа ступені тым, што застаецца па-за тунэлем, як і тым, што ў яго ўваходзіць, і выключаныя дыяпазоны звычайна ламаюцца першымі, бо больш канкрэтны лакальны маршрут або фільтр на баку кліента можа перасягнуць намер, не кранаючы профіль.
Трэці — далёкі бок тунэля. Маршрут кліента толькі кладзе пакет на дрот; шлюз усё яшчэ павінен перасылаць яго і мець шлях назад. Даведнік strongSwan па перасылцы нагадвае, што правілы перасылкі і міжсеткавага экрана на шлюзе — частка функцыі, а не сантэхніка, якую можна меркаваць.
Палі, якія робяць запіску выканальнай
Адзін радок на паток, а паток — гэта прызначэнне плюс імя плюс уладальнік. Вось палі, якія перажываюць сутыкненне з рэальным інцыдэнтам:
| Field | Why it has to be written down |
|---|---|
| Destination prefix and address family | The route is per family; an IPv4 note says nothing about a AAAA answer |
| Selected tunnel or direct path | Names the decision, not the symptom |
| Private namespace and resolver | Which domain, which server, which search suffix |
| Public name path | Confirms public names do not accidentally use the private resolver |
| Where the rule lives | Client profile, server push, OS policy or management tool |
| Owner and review date | Namespaces change owner more often than routes change |
Радок "дзе гэта жыве" — той, які людзі прапускаюць. Прэфікс, прасунуты серверам, маршрут, дададзены профілем кліента, і маршрут, набраны ў абалонцы, адрозніваюцца тым, хто можа іх змяніць і ці перажывуць яны перападключэнне. Без гэтага поля наступны інжынер не зможа сказаць, на які з трох ён глядзіць.
Адзін тэст на правіла, а не на тунэль
Кожны радок патрабуе дзвюх бясшкодных праверак: адна практыкуе маршрут, другая — імя. Для маршруту запытайце нешта, што павінна перасекчы тунэль, і пацвердзіце шлях, а не дасягальнасць, напрыклад tracert -d 10.20.4.11 у Windows або ip route get 10.20.4.11 у Linux. Для імя запытайце прыватнае імя і запішыце, які сервер адказаў, выкарыстоўваючы resolvectl query files.corp.example або dig files.corp.example супраць рэзалвера, які называе запіска.
Дадайце і адмоўнае чаканне: што павінна адбыцца, калі тунэль не працуе. Выключаная праграма на прыладзе Android або iOS з уключаным блакаваннем без VPN можа наогул не мець злучэння, а кліент для працоўнага стала можа пакінуць тую ж праграму працаваць, пакуль тунэль перападключаецца. Запіс меркаванага адказу ператварае "VPN зламаў маю праграму" ў правяральную заяву.
Трымайце запіс разам з канфігурацыяй
Захоўвайце запіску побач з профілем, які яна апісвае, і версіянуйце яе разам з гэтым профілем. Дакумент у вікі, які ніхто не абнаўляе, — гэта чутка; табліца ў тым жа рэпазітары, што і прасунутыя маршруты і палітыка рэзалвера, можа быць прагледжана ў тым жа змяненні.
Калі нешта ламаецца, параўнайце ужыты маршрут і эфектыўны рэзалвер з запісам, перш чым дадаваць яшчэ адно выключэнне. Дзве з трох частых прычын — старое правіла прасторы імён і дапаможны працэс па-за палітыкай праграмы — выглядаюць дакладна як збой VPN і незаўважныя, калі запіска пералічвае толькі прэфіксы.
Перш чым назваць запіску гатовай, пераканайцеся, што яна пісьмова адказвае на гэта: які прэфікс, для якой сям'і адрасоў; якая прыватная прастора імён, якім рэзалверам адказваецца; якія імёны наўмысна застаюцца публічнымі; дзе кожнае правіла наладжана і хто ім валодае; і адна каманда, якая даказвае маршрут, і адна, якая даказвае імя. Калі чагосьці з гэтага не хапае, наступны інцыдэнт будзе дыягнаставаны з нуля.