Падключыце офісны VPN, і раптам кожны запыт імені ідзе да карпаратыўнага рэзалвера. Публічныя імёны ўсё яшчэ вызначаюцца, таму нішто не выглядае зламаным, пакуль не сарвецца імя лакальнага прынтара або запіс split-horizon не верне адрас офіса. На некаторых усталёўках Fedora адбываецца адваротнае: рэзалвер правайдэра працягвае адказваць пасля ўзняцця тунеля. І тое, і другое — адно пытанне: які рэзалвер валодае гэтым запытам, — а ў сістэмах NetworkManager адказ жыве ва ўласцівасцях DNS кожнага злучэння.

Два злучэнні, адзін пераможны рэзалвер

Кожнае злучэнне аб'яўляе прыярытэт DNS. Звычайныя злучэнні па змаўчанні маюць 50, а VPN-злучэнні — 0, і перамагае меншае значэнне. Менавіта таму VPN-злучэнне моўчкі пераўзыходзіць правадное для кожнага дамена, на які яно прэтэндуе: нуль перамагае пяцьдзясят без чыйго-небудзь выбару.

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

Прыярытэт вызначае парадак, спіс пошуку вызначае ўладанне

nmcli -f connection.id,ipv4.dns,ipv4.dns-search,ipv4.dns-priority con show "Corp VPN"
resolvectl status
readlink -f /etc/resolv.conf

Спіс пошуку — гэта заява аб уладанні. Голы дамен, напрыклад corp.example, становіцца суфіксам пошуку і маршрутным даменам. Форма толькі для маршрутызацыі ~corp.example адпраўляе запыты пад гэтым суфіксам у гэтае злучэнне, не дадаючы дамен да кароткіх імён. Гэтая тыльда — розніца паміж «спытай гэты сервер» і «спытай гэты сервер і дапішы за мяне».

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

Затым зрабіце перавагу яўнай і перазапусціце злучэнне:

nmcli con modify "Corp VPN" ipv4.dns-priority -100
nmcli con modify "Corp VPN" ipv6.dns-priority -100
nmcli con modify "Corp VPN" ipv4.dns-search "~corp.example,corp.example"
nmcli con up "Corp VPN"

Адмоўны прыярытэт — гэта дакументаваны спосаб сказаць «аддайце перавагу гэтаму злучэнню», а ўстаноўка для абодвух сямействаў адрасоў захоўвае паводзіны ўзгодненымі на хасце з падключэннем IPv6. Змена ўласцівасці без перазапуску злучэння не змяняе нічога з таго, што зараз працуе, таму паслядоўнасць заканчваецца яўнай камандай up.

Няхай systemd-resolved трымае раздзяленне

Стандартны плагін dnsmasq згортвае запыты ў адзін лакальны рэзалвер, таму падзел па кожным канале застаецца грубым. systemd-resolved паказвае раздзяленне па кожным канале, і resolvectl query называе канал, які адказаў.

systemctl enable --now systemd-resolved
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved NetworkManager
resolvectl query build.corp.example

Пасля гэтага карпаратыўны канал нясе corp.example, а публічны рэзалвер абслугоўвае астатняе. Калі запыт трапляе на няправільны канал, каманда называе канал, які на яго адказаў, і ведаць гэта лепш, чым ведаць толькі адрас.

Узгадніце схему DNS з тыпам тунеля

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

Далей ёсць kill switch, які блакуе DNS па-за тунелем. Імёны вызначаюцца для зон тунеля і не вызначаюцца ўсюды іншае, пакуль злучэнне цалкам здаровае. Працаздольныя адказы — яўны дазвол для лакальнага рэзалвера LAN або лакальны кэш, які перасылае толькі карпаратыўную зону, і любы з іх — выключэнне з уласнікам, а не дэфект тунеля.

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

Праверце па кожным канале, потым яшчэ раз пасля перападключэння

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

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

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