WireGuard не перадае DNS: абслугоўванне прыватнай зоны BIND
Рухапрывітанне пераносіць ключы і дазволеныя IP, але ніколі не пераносіць рэзалвер. Вось гатовая прыватная зона BIND 9 і кліенцкая палітыка для кожнага злучэння, якая прымушае яе развязацца.
Вы ўзнялі WireGuard, тунель прапускае трафік, а ўнутранае імя ўсё яшчэ не развязваецца. Наступны крок звычайна — шукаць наладу DNS у канфігурацыі WireGuard, нібыта партнёр можа перадаць рэзалвер, як робяць некаторыя іншыя VPN. Не можа. Рухапрывітанне пераносіць ключы, адрасы інтэрфейса і дазволеныя IP, і ў ім няма поля для DNS-сервераў або даменаў пошуку. Палітыка развязання жыве на кліенце, і менавіта там месца выпраўленню.
Тунель і рэзалвер — розныя дамовы
WireGuard наўмысна малы. Ён рухае пакеты для адрасоў, якія вы пазначылі, і аўтэнтыфікуе партнёраў; усё вышэй за гэты пласт — ваша праектаванне. OpenVPN можа перадаць dhcp-option DNS, бо яго канал кіравання пераносіць канфігурацыю, і гэтая розніца збівае тых, хто пераходзіць паміж імі.
Такім чынам, працоўны тунель нічога не кажа пра развязанне імёнаў. Кліент можа мець бездакорны маршрут да 10.90.0.1 і ўсё адно адпраўляць запыты да публічнага рэзалвера; таму сімптом выглядае як “VPN зламаў DNS”, хоць DNS ніколі не быў накіраваны на VPN.
Абслугоўвайце зону, не робячыся рэкурсіўным рэзалверам
Бок сервера — невялікая аўтарытэтная зона, а не агульны рэзалвер. У гэтым прыкладзе шлюз 10.90.0.1, кліенты 10.90.0.0/24, а праграма, якая вам патрэбна, адказвае на 10.60.0.20.
Далучыце гэтыя налады да існуючага блока options, а не стварайце другі:
options {
listen-on { 127.0.0.1; 10.90.0.1; };
listen-on-v6 { none; };
allow-query { 127.0.0.1; 10.90.0.0/24; };
allow-transfer { none; };
recursion no;
};Затым абвясціце зону і яе файл:
zone "corp.example" {
type primary;
file "/etc/bind/db.corp.example";
};$TTL 300
@ IN SOA ns.corp.example. hostmaster.corp.example. ( 1 3600 600 604800 300 )
@ IN NS ns.corp.example.
ns IN A 10.90.0.1
portal IN A 10.60.0.20Праверце перад перазагрузкай, бо сінтаксічная памылка пры перазагрузцы выводзіць з ладу ўвесь сервер для ўсіх зон, якія ён абслугоўвае:
named-checkconf
named-checkzone corp.example /etc/bind/db.corp.exampleАдкрыйце UDP і TCP 53 толькі на інтэрфейсе VPN. Публікацыя прыватнага аўтарытэта на публічным інтэрфейсе запрашае і запыты, і пералічэнне, а allow-transfer мусіць заставацца зачыненым, пакуль другасны сапраўды не мае патрэбы.
Накіруйце кліент на яго, для кожнага злучэння
Меркавана NetworkManager валодае злучэннем, а systemd-resolved з'яўляецца рэзалверам. Спачатку прачытайце існуючую палітыку, асабліва любы каранёвы дамен маршрутызацыі, бо запіс ~. перасягне тое, што вы збіраецеся дадаць.
nmcli connection modify wg-office +ipv4.dns 10.90.0.1
nmcli connection modify wg-office +ipv4.dns-search '~corp.example'Тыльда — галоўны сімвал. Яна пазначае дамен як толькі-маршрут: імёны пад corp.example ідуць да DNS-сервера гэтага злучэння, і дамен не дадаецца як суфікс пошуку кароткага імені. Без яе ўвод portal пачынае развязваць portal.corp.example, што зручна для вас і нечакана для ўсіх іншых. Трымайце тыльду ўнутры лапак, бо без лапак яна — раскрыццё абалонкі, якое чакае, каб паказаць на вашу хатнюю дырэкторыю.
Ужывіце змену праз кіраўнік, які валодае інтэрфейсам, потым перападключыце злучэнне. Не запускайце другі асобнік wg-quick для таго ж інтэрфейса; два ўладальнікі будуць ваяваць за маршруты, і адзін з іх пераможа ў найгоршы момант.
Праверце шлях раней за імя
Запытайце імя з кліента і пацвердзіце і адказ, і сервер, які яго выдаў:
resolvectl query portal.corp.exampleКалі гэта вяртае 10.60.0.20, дамова DNS выкананая. Калі адбываецца тайм-аўт, спачатку праверце маршрут да 10.90.0.1, потым правіла брандмаўэра, потым allow-query на серверы. Збоі развязання імёнаў у гэтай канфігурацыі амаль заўсёды дасягальнасць або ACL, а не файл зоны. Працуйце ад кліента вонкі, бо сервер не можа сказаць вам, чаму запыт не прыйшоў.
Памятайце, што праграма ўсё яшчэ патрабуе свайго маршруту і свайго дазволу на сэрвіс. Развязанае імя, якое паказвае на недасягальны адрас, — гэта іншы збой у тым жа адзенні.
Што ўсё яшчэ не аўтаматычна
Праграмы з уласнай логікай рэзалвера цалкам ігнаруюць сістэмны рэзалвер, і ніякая колькасць nmcli гэтага не зменіць. Разгортванні, якія правяраюць DNSSEC, патрабуюць яснага праекта давярэчага якара для прыватнай зоны; адказ не ў тым, каб агульнай інструкцыяй адключыць праверку. Тэстуйце тым жа кліенцкім праграмным забеспячэннем, якое выкарыстоўваюць вашыя карыстальнікі, а не інструментам, які выпадкова ўжывае сістэмны рэзалвер. Розніца паміж гэтымі двума і ёсць увесь зварот аб памылцы.
Флоты могуць аўтаматызаваць гэтую кліенцкую палітыку праз сваю сістэму забеспячэння, але палітыка застаецца асобным аб'ектам з уладальнікам. Даведнік BIND 9 апісвае кантроль праслухоўвання і запытаў, ужытыя вышэй, і гэта правільнае месца, каб пацвердзіць паводзіны для вашай усталяванай версіі.
Наступны крок: дадайце павышэнне серыйнага нумара зоны і каманды праверкі ў вашу працэдуру змяненняў, каб рэдагаванне запісу не магло трапіць у вытворчасць непаправеранае.