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

Как получить тип ответа Answer для записей NS с помощью BIND

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

Когда я запрашиваю DNS-серверы своего хостинг-провайдера, запись NS возвращается как запись ответа.

# dnsq NS www.example.com ns.host.com
2 www.example.com:
113 bytes, 1+2+0+2 records, response, noerror
query: 2 www.example.com
answer: www.example.com 3600 NS lb1.example.com
answer: www.example.com 3600 NS lb2.example.com
additional: lb1.example.com 3600 A 1.2.3.4
additional: lb2.example.com 3600 A 5.6.7.8

Когда я запрашиваю свой внутренний сервер BIND, запись NS возвращается как запись Authority.

# dnsq NS www.test.com bind.local
2 www.test.com:
110 bytes, 1+0+2+2 records, response, noerror
query: 2 www.test.com
authority: www.test.com 3600 NS lb1.test.com
authority: www.test.com 3600 NS lb2.test.com
additional: lb1.test.com 3600 A 10.254.0.1
additional: lb2.test.com 3600 A 10.254.0.2

Разница в конечном итоге приводит к изменению поведения клиента в том, что затем запрашиваются ответы центра, а ответы ответа - нет. (т.е. во втором случае запрашивается ns1.test.com или ns2.test.com для нахождения «фактической» NS-записи.) Этого поведения я бы хотел избежать. Какие настройки я бы изменил в BIND, чтобы записи NS возвращались в качестве ответов ответа?

Редактировать 1

Согласно запросу, вот соответствующие разделы файла зоны от хостинг-провайдера:

$ORIGIN example.com.
@   86400   IN  SOA <omitted> <omitted> 104 28800 450 1209600 900
lb1 3600    IN  A   1.2.3.4
lb2 3600    IN  A   5.6.7.8
@   172800  IN  NS  ns1.host.com.
@   172800  IN  NS  ns2.host.com.
www 3600    IN  NS  lb1.example.com.
www 3600    IN  NS  lb2.example.com.
ns1 86400   IN  A   <Host's Nameserver>
ns2 86400   IN  A   <Host's Nameserver>

И с моего локального сервера BIND:

$TTL 1h
test.com.               IN  SOA ns1.test.com. ns2.test.com. (
    1   ;
    10000   ;
    3600    ;
    86400   ;
    3600    )   ;
; Name servers
test.com.               IN  NS  ns1.test.com.
test.com.               IN  NS  ns2.test.com.
;
; Addresses
ns1.test.com.           IN  A   10.254.0.1
ns2.test.com.           IN  A   10.254.0.2
lb1.test.com.           IN  A   10.254.0.101
lb2.test.com.           IN  A   10.254.0.102
;
; Delegation
www.test.com.           IN  NS  lb1.test.com.
www.test.com.           IN  NS  lb2.test.com.

Я пытаюсь делегировать www.test.com паре балансировщиков нагрузки DNS.

Редактировать 2

В соответствии с запросом, вот результат поиска размещенного DNS-провайдера с отключенной рекурсией:

# dig +norecurse @ns.host.com www.example.com ns

; <<>> DiG 9.5.1-P2.1 <<>> +norecurse @ns.host.com www.example.com ns
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14494
;; flags: qr; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;www.example.com.   IN  NS

;; ANSWER SECTION:
www.example.com. 3600   IN  NS  lb2.test.com.
www.example.com. 3600   IN  NS  lb1.test.com.

;; ADDITIONAL SECTION:
lb2.test.com. 3600  IN  A   83.246.78.219
lb1.test.com. 3600  IN  A   96.56.160.204

;; Query time: 88 msec
;; SERVER: 216.239.128.4#53(216.239.128.4)
;; WHEN: Fri Aug 12 12:16:42 2011
;; MSG SIZE  rcvd: 113

Строго говоря, привязка правильная. Там может быть дополнительными записями NS, о которых «истинные серверы имен» знают, и клиент вправе запросить их, чтобы узнать.

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

Я подозреваю, что сервер имен вашего хостинг-провайдера либо отвечает рекурсивно, либо является авторитетным для зоны www.example.com. Вы можете запросить без рекурсии желаемый бит для проверки.

dig +norecurse @ns.host.com www.example.com ns