Я просматривал документацию BIND / DNS и не смог найти четкого ответа. tl; dr - запрос вторичного сервера имен для делегированной зоны Запись делает не работа с включенной рецизией. И, по определению, не работает и с отключенной рекурсией, поскольку все, что определено в зоне, с нашей точки зрения, - это NS и связующая запись.
Программный стек: bind-9.3.6-4 на CentOS 5.4 x86 для вторичного сервера имен; bind-9.2.4-30 на Centos 4.7 x86 для основного сервера имен.
Я буду использовать как синонимы главный и первичный, подчиненный и вторичный соответственно.
Наша установка выглядит следующим образом (имена / IP-адреса изменены для защиты невиновных):
ns.pr.example.com == первичный сервер имен, 10.10.0.1, 192.168.0.1
ns1.pr.example.com == вторичный сервер имен, 10.11.0.1, 192.168.0.2
ns2.pr.example.com == вторичный сервер имен, 10.11.0.2, 192.168.0.3
delegated.pr.example.com == делегированная подзона
nsdelegated.pr.example.com == авторский NS для
поддомен delegated.pr.example.com, 10.11.0.5 НЕ под нашим контролем!
Вы заметите, что ns1 и ns2 могут общаться с ns.pr.example.com через общую сеть - 192.168.0.0/24. Однако ns.pr.example.com не может поговорите с хостом nsdelegated.pr.example.com, у которого есть только адрес 10.11.0.0/24.
Сеть 192.168 заменяет наше пространство общедоступных IP-адресов; но сети 10.10 и 10.11 являются частными закрытыми сетями, используемыми для кластерных вычислений. О подключении ns.pr.example.com к сети 10.11 напрямую или через статический маршрут не может быть и речи.
На первичном сервере имен, ns.pr.example.com, в файл зоны добавляется следующее определение вместе с обновленным серийным номером:
/etc/ named.conf:
zone "pr.example.com" {
type master;
file [db.filename];
};
db.filename:
delegated.pr.example.com. IN NS nsdelegated.pr.example.com.
nsdelegated.pr.example.com. IN A 10.11.0.5 ; glue record
Это реплицируется на подчиненные серверы, ns1 и ns2. Запись можно увидеть как в плоских файлах, так и подтвердить с помощью dig:
пример раба
dig -t ns +short @ns1 delegated.pr.example.com
nsdelegated.pr.example.com IN A 10.11.0.5
мастер-пример
dig -t ns +short @ns delegated.pr.example.com
nsdelegated.pr.example.com IN A 10.11.0.5
Сам nsdelegated сервер реагирует:
dig -t a +short @nsdelegated.pr.example.com randomhost.delegated.pr.example.com
10.11.0.222
Но поиск на вторичном сервере имен с установленным битом, требуемым для рекурсии (по умолчанию), не выполняется.
dig +recurse +short -t a @ns1 randomhost.delegated.pr.example.com
[no output]
Он также не работает на первичном сервере, ns, но этого можно было ожидать, поскольку ns.pr.example.com не может связаться с 10.11.0.5 и ответить на запрос. Нерекурсивные запросы также терпят неудачу, поскольку соответствующая информация должна быть получена с сервера nsdelegated.pr.example.com.
Мой вопрос: почему рекурсивные вопросы к вторичный серверы имен выходят из строя? У них есть правильная информация о делегировании, запись NS и связующая запись, и они могут связываться с делегированным сервером имен.
Я догадываюсь, что как вторичный сервер имён он может каким-то образом «передать» рекурсивный вопрос основному серверу имён, где он затем не работает. Но я не могу найти никакой документации по этому поводу, и это не имеет интуитивного смысла.
Есть идеи или предложения по отладке? Я включил максимальное ведение журнала для named, а также ведение журнала запросов, но мне не удалось получить достоверную информацию. Не было очевидного журнала «покажи мне поисковые запросы, которые вы делаете от имени клиентов».
Спасибо.
У вас нет рецидива? в вашем named.conf. Если у вас нет конфигурации с двумя зонами, вы должны ее иметь. Однако это не позволит bind отвечать за вас на рекурсивные запросы.
Я полагаю, вы можете настроить двойную зону с разрешенной рекурсией из вашей локальной сети, но не из Интернета.
Конечно, вам нужно указать делегированную зону в named.conf, иначе bind будет думать, что это просто запись с точками, которую она должна иметь, поскольку она является авторитетной для зоны pr.example.com.
Вы хотите что-то вроде этого. В главном файле named.conf вы указываете новую зону (и соответственно новую зону в подчиненных устройствах):
zone "delegated.pr.example.com." { type master; file [db.filename]; };
а файл зоны должен быть:
delegated.pr.example.com. NS nsdelegated.pr.example.com.
nsdelegated.pr.example.com. IN A 10.11.0.5 ; glue record
Теперь главный DNS-сервер и его подчиненные знают о новой зоне, и все должно работать.
==== РЕДАКТИРОВАТЬ
Ошибка, запись SOA находится не в ps.example.com, а в определении зоны в delegated.pr.example.com. Исправлено.