Domain-Name-System

如何使用 BIND 獲取 NS 記錄的應答響應類型

  • August 12, 2011

我希望有人可以幫我配置一下。我試圖讓 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

差異最終會改變客戶端的行為,然後查詢權威響應,但不會查詢響應響應。(即在第二種情況下,查詢 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

嚴格來說,bind 是正確的。可能還有“真正的名稱伺服器”知道的其他 NS 記錄,客戶端查詢它們以找出答案是正確的。

要複製託管服務提供商的名稱伺服器的行為,您可能必須使用相同的軟體。我不相信你可以用綁定來做到這一點。

我懷疑您的託管服務提供商的名稱伺服器要麼是遞歸響應,要麼是 www.example.com 區域的權威伺服器。您可能希望在沒有遞歸的情況下進行查詢以進行檢查。

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

引用自:https://serverfault.com/questions/299799