我希望有人能帮我配置一下。我试图让 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 记录作为权威记录返回。
# 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
这种差异最终会改变客户端行为,因为随后会查询 Authority 响应,但不会查询 Answer 响应。(即在第二种情况下,查询 ns1.test.com 或 ns2.test.com 以查找“实际”NS 记录。)这是我想要避免的行为。我需要在 BIND 中更改哪些设置才能将 NS 记录作为 Answer 响应返回?
编辑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
答案1
严格来说,bind 是正确的。可能是“真实名称服务器”知道的附加 NS 记录,并且客户端有权查询它们以找出答案。
要复制托管服务提供商的名称服务器的行为,您可能必须使用相同的软件。我不认为您可以使用 bind 来做到这一点。
答案2
我怀疑您的托管服务提供商的名称服务器要么正在递归响应,要么对 www.example.com 区域具有权威性。您可能需要在不需要递归的情况下进行查询以进行检查。
dig +norecurse @ns.host.com www.example.com ns