Я надеюсь, что кто-нибудь поможет мне настроить это. Я пытаюсь заставить 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 возвращались в качестве ответов ответа?
Согласно запросу, вот соответствующие разделы файла зоны от хостинг-провайдера:
$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.
В соответствии с запросом, вот результат поиска размещенного 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