Назад | Перейти на главную страницу

BIND: как делегировать подзону другому DNS-серверу?

Я нахожусь в процессе миграции из рабочей группы, обслуживаемой DNS-сервером BIND9, в домен AD на базе Windows Server 2008 R2, и я хотел бы продолжать использовать сервер BIND до тех пор, пока не будет готова инфраструктура AD.

Во время настройки AD через dcpromo я получаю предупреждение о том, что я должен убедиться, что наш текущий DNS-сервер делегирует доменное имя AD серверу AD.

Предположим, мой домен AD - mydomain.lan, а мой обычный домен BIND - example.com. Я устанавливаю свой сервер BIND как авторизованный для LAN, но хочу делегировать mydomain.lan. на IP-адрес сервера AD.

Мой named.conf.local содержит:

zone "lan" {
        type master;
        file "zone.lan";
};

И zone.lan содержит:

$ORIGIN lan.
$TTL 1H ; 1 hour
@                       IN SOA  dns.example.com. hostmaster.example.com. (
                                201008137  ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        IN NS   dns.example.com.

$ORIGIN mydomain.lan.
@                       IN NS   dc1.mydomain.lan.
dc1                     IN A    10.10.0.200 ; 'glue' record

Когда я запрашиваю dns.example.com для "lan", я могу получить ожидаемый ответ, но когда я запрашиваю "mydomain.lan" или "dc1.mydomain.lan", я получаю ответ NXDOMAIN. Все мои попытки пока потерпели неудачу.

Как правильно создать и делегировать подзону?

Обновление: дополнительная информация

$ dig mydomain.lan @dns.example.com NS +norecurse

; <<>> DiG 9.7.0-P1 <<>> @dns.example.com mydomain.lan NS +norecurse
; (3 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23380
;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;mydomain.lan.          IN  NS

;; AUTHORITY SECTION:
mydomain.lan.       3600    IN  NS  dc1.mydomain.lan.

;; ADDITIONAL SECTION:
dc1.mydomain.lan.   3600    IN  A   10.10.0.200

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Aug 15 00:41:05 2010
;; MSG SIZE  rcvd: 64

$ dig @dc1.mydomain.lan dc1.mydomain.lan
dig: couldn't get address for 'dc1.mydomain.lan': not found

$ dig @10.10.0.200 dc1.mydomain.lan

; <<>> DiG 9.7.0-P1 <<>> @10.10.0.200 dc1.mydomain.lan
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21348
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;dc1.mydomain.lan.      IN  A

;; ANSWER SECTION:
dc1.mydomain.lan.   1200    IN  A   10.10.0.200

;; Query time: 6 msec
;; SERVER: 10.10.0.200#53(10.10.0.200)
;; WHEN: Sun Aug 15 00:55:11 2010
;; MSG SIZE  rcvd: 50

$ dig @10.10.0.200 mydomain.lan

; <<>> DiG 9.7.0-P1 <<>> @10.10.0.200 mydomain.lan
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24664
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mydomain.lan.          IN  A

;; ANSWER SECTION:
mydomain.lan.       600 IN  A   10.10.0.200

;; Query time: 0 msec
;; SERVER: 10.10.0.200#53(10.10.0.200)
;; WHEN: Sun Aug 15 01:04:39 2010
;; MSG SIZE  rcvd: 46

Проблема в вашем named.conf. Я предполагаю, что у вас есть форвардеры, определенные где-то в вашем named.conf. Для любой зоны, для которой ваш сервер является полномочным, вам необходимо отключить пересылку. Используя приведенный выше образец, вы должны изменить его следующим образом:

zone "lan" {
    type master;
    file "zone.lan";
    forwarders { };
};

Как только вы это сделаете, он должен работать.

Проблема с файлом зоны.

$ORIGIN lan.
$TTL 1H ; 1 hour
@                       IN SOA  dns.example.com. hostmaster.example.com. (
                                201008137  ; serial
                                28800      ; refresh (8 hours)
                                14400      ; retry (4 hours)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        IN NS   dns.example.com.

$ORIGIN mydomain.lan.
@                       IN NS   dc1.mydomain.lan.
dc1                     IN A    10.10.0.200 ; 'glue' record

@ Относится к имени зоны, как определено в named.conf.

zone "lan" {
        type master;
        file "zone.lan";
};

это просто "лан". Созданная вами запись

lan. IN NS dc1.nydomain.lan.

Я не использую ярлыки BIND для важных записей, потому что это легко забыть или неправильно понять поведение, что приводит к неожиданным результатам.

(Я понимаю, что, вероятно, уже слишком поздно помогать этому человеку, но если кто-то еще посмотрит на это, попробуйте удалить ярлыки BIND, чтобы увидеть, решит ли это ваши проблемы.)

Похоже, вам не хватает «dc1» в качестве хоста в зоне, управляемой AD; клей используется только для поиска авторитетных серверов, а не как фактический контент после того, как эти серверы были достигнуты.

Возможно, вы захотите изучить dig +trace чтобы увидеть запрошенные серверы, когда они не используются @server.name, чтобы увидеть отслеживаемую цепочку делегирования.