如何使用 BIND 获取 NS 记录的答案响应类型

如何使用 BIND 获取 NS 记录的答案响应类型

我希望有人能帮我配置一下。我试图让 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

相关内容