Вопрос или проблема
Я владею доменом (в дальнейшем именуемым example.com
), он зарегистрирован в OVH. У него есть несколько записей A
и MX
, все они обслуживаются корректно DNS-серверами OVH.
Теперь я хочу делегировать home.example.com
на домашний сервер (PiHole) на 192.168.10.2
. Этот DNS-сервер работает и корректно обслуживает многие записи.
Чтобы делегировать подсеть, я добавил следующее в DNS-зону example.com
:
home IN NS ns-home.example.com.
ns-home IN A 192.168.10.2
OVH автоматически увеличивает серийный номер зоны. Чтобы убедиться, что он правильный, я проверил это:
root@srv ~# dig @1.1.1.1 example.com SOA
example.com. 3600 IN SOA dns102.ovh.net. tech.ovh.net. 2024122001 86400 3600 3600000 60
2024122001
– это то, что я также вижу в DNS-зоне на OVH. Значит, новая версия зоны была развернута.
Проблема: запись A
возвращается корректно, но NS
– нет:
root@srv ~# dig @1.1.1.1 ns-home.example.com A
ns-home.example.com. 3600 IN A 192.168.10.2
dig @1.1.1.1 home.example.com NS
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 22 (No Reachable Authority): (at delegation home.example.com.)
;; QUESTION SECTION:
;home.example.com. IN NS
Что означает этот ответ? Что еще нужно сделать для делегирования подсети?
Я в конечном итоге перемещу запись NS
на локальный DNS-сервер с записью клея, но пока я хотел бы, чтобы это работало в этом более простом сценарии.
Запрос, который вы сделали для NS
, был рекурсивным1; это означает, что ответ не поступал из записей делегирования на OVH – он на самом деле будет следовать за делегированием вплоть до возвращения записей NS из вашей PiHole.
Но записи NS делегирования указывают на частный IP-адрес, 192.168.10.2, к которому разрешатель CloudFlare 1.1.1.1 не может получить доступ – поэтому он никогда не сможет разрешить ничего за пределами этой делегации, как и любой другой публичный разрешатель. Вот что означает второй ответ; это означает “1.1.1.1 не смог связаться с ‘ns-home.example.com’ по адресу 192.168.10.2” (ns-home является “авторитетом”).
Имейте в виду: сервер, который вы указываете с помощью @
, – это не просто “начальная точка” для dig
; это сервер, который делает все преследование делегирования за вас, в то время как сам dig просто ждет ответа – так же, как ваша операционная система обрабатывает DNS-запросы.
Таким образом, недостаточно, чтобы делегации имели записи A/AAAA, доступные с точки зрения клиента, они также должны быть доступны с точки зрения разрешателя.
Поэтому, если вы абсолютно уверены, что разрешатель будет внутренним для вашей сети (например, если ваши ПК все запрашивают ваш локальный PiHole, и PiHole работает на Unbound или BIND9, чтобы локально отслеживать делегирования, не полагаясь на внешние), – тогда да, ваша текущая настройка будет работать, но вы должны протестировать это с dig @<pihole_ip>
, а не с dig @<random_public_resolver>
.
Тем не менее, если вы хотите, чтобы делегированная подсеть (и ее подподсети) были разрешимы с помощью любого публичного сервера, тогда делегация должна быть сделана на общедоступный IP-адрес. Вам нужно будет проверить, какое DNS-программное обеспечение использует PiHole, подходит ли оно для раскрытия в Интернете (т.е. оценка безопасности), настроить “портовый переадресации” для TCP/53 и UDP/53 с вашего основного шлюза LAN на PiHole (для IPv4), и наконец, изменить запись ns-home
A/AAAA так, чтобы она указывала на ваш публичный IPv4-адрес (и/или публичный IPv6 вашего PiHole).
1 Запрос имел установленный параметр “Рекурсия желательна”, что по умолчанию для dig, и это также единственный способ, которым вы получите ответ от 1.1.1.1 или другого разрешателя.
Отключить этот параметр можно с помощью +norecurse
или +nordflag
, но рекурсивный запрос должен быть сделан непосредственно к авторитетным серверам – т.е. серверам, которые уже держат DNS-данные для вашего домена. И если вы скажете ‘dig’ запрашивать на авторитетном сервере… тогда указание +norecurse
становится несколько избыточным.
Поэтому, если вы хотите протестировать, была ли корректно опубликована ваша запись NS в OVH, вам нужно сделать:
dig [+norecurse] @nsXXX.ovh.net home.example.com NS
Кроме того, существуют инструменты, которые могут следовать за делегированным путем:
dnstracer -s . home.example.com
delv [-i] +ns home.example.com
(опция-i
подавляет валидацию DNSSEC для более минимального вывода)dig +trace home.example.com
(может быть менее точным)- DNSViz.
Ответ или решение
Когда вы видите сообщение "No Reachable Authority at delegation" (или "NS record not returned by the DNS") при запросе записи NS для поддомена, это указывает на проблему с разрешением DNS, связанной с делегированием субдомена на другой DNS-сервер. В данном случае давайте разберёмся с конкретным примером, где домен example.com
зарегистрирован у OVH, а поддомен home.example.com
настраивается на локальный сервер, PiHole, с IP-адресом 192.168.10.2
.
Причины проблемы
-
Закрытые IP-адреса: DNS-сервер, указанный в записи NS (в данном случае
ns-home.example.com
), указывает на частный IP-адрес192.168.10.2
. Это означает, что никаких внешних DNS-резолверов, как, например, 1.1.1.1 от Cloudflare, не смогут достучаться до этого сервера, поскольку такие адреса доступны только в локальной сети (LAN). -
Рекурсивные запросы: Запрос, выполненный с использованием
dig @1.1.1.1 home.example.com NS
, является рекурсивным. Это означает, что резолвер пытается разрешить адреса с использованием стандартного процесса обхода делегирований до самого "владельца" поддомена. Однако, поскольку запись NS указывает на недоступный сервис, возвращается ошибка "No Reachable Authority". -
Отсутствие глут-записей: В процессе делегирования поддомена необходимо также учитывать возможность создания глут-записи для
ns-home.example.com
. Глут-запись позволяет указать IP-адрес DNS-сервера в корневой зоне, таким образом обеспечивая его доступность для внешних резолверов.
Решение проблемы
Для успешной делегации поддомена и исправления данной проблемы предложены следующие шаги:
-
Проверка доступа: Убедитесь, что ваш DNS-сервер PiHole (и другие соответствующие сервисы) доступны через интернет. Если в дальнейшем вы хотите, чтобы резолверы в интернете имели доступ к поддомену, IP-адрес
ns-home.example.com
должен быть публичным. -
Настройка портов: Проверьте маршрутизатор и настройки брандмауэра, чтобы убедиться, что порты TCP и UDP для 53 (используемые для DNS) направляются на IP-адрес PiHole. Это необходимо для обеспечения внешнего доступа к вашему DNS-серверу.
-
Создание глут-записи: Вам нужно будет добавить глут-запись для
ns-home.example.com
в зонеexample.com
, указывающую на публичный IP-адрес вашей сети. Это даст возможность внешним резолверам находить ваш DNS-сервер. -
Регрессивная проверка: После выполнения вышеуказанных действий протестируйте доступность своих записей. Используйте команды
dig
напрямую к вашему серверу на локальном IP или используйте инструменты, такие какdig +trace
,dnstracer
илиDNSViz
, чтобы проследить путь до делегированного поддомена.
Приведя эти действия в порядок, вы сможете обеспечить правильную настройку делегирования поддомена, и проблема с сообщением "No Reachable Authority at delegation" будет устранена. Убедитесь, что ваши настройки DNS соответствуют требованиям безопасности и производительности, особенно если вы намерены делать их доступными из Интернета.