Domain-Name-System

如何將 BIND 配置為引用

  • September 7, 2022

我在本地 BIND 中創建了一個區域:

zone "labs" {
   type master;
   file "/etc/bind/db.labs";
};

zone "foo.labs" {
   type master;
   file "/etc/bind/db.foo.labs";
};

/etc/bind/db.labs:

@  3600  IN  SOA  labs.  root.labs.  (
  2019041900
  3600
  600
  604800
  600 )
  3600  IN  NS  ns1.labs.
  3600  IN  NS  ns2.labs.
  3600  IN  NS  ns3.labs.

ns1      IN  A  172.16.238.100
ns2      IN  A  172.16.238.110
ns3      IN  A  172.16.238.120

/etc/bind/db.foo.labs:

@  3600  IN  SOA  labs.  root.labs.  (
  2019041900
  3600
  600
  604800
  600 )
  3600  IN  NS  ns.foo.labs.

ns      IN  A  172.16.238.200

這個 BIND 實例正在偵聽172.16.238.100,我得到了另一台伺服器正在偵聽172.16.238.200,它將為foo.labs.

我希望我的 BIND 實例充當參考,這意味著如果我查詢dig @172.16.238.100 foo.labs我應該獲得 NS 記錄(例如,與根伺服器的行為相同。dig @a.gtld-servers.net. google.com A給我 NS 記錄,因為它充當參考)

但截至目前:

dig @labs_bind9 foo.labs A

;; QUESTION SECTION:
;foo.labs.          IN  A

;; AUTHORITY SECTION:
foo.labs.       600 IN  SOA labs. root.labs. 2019041900 3600 600 604800 600
dig @labs_bind9 foo.labs NS

;; QUESTION SECTION:
;foo.labs.          IN  NS

;; ANSWER SECTION:
foo.labs.       3600    IN  NS  ns.foo.labs.

;; ADDITIONAL SECTION:
ns.foo.labs.        3600    IN  A   172.16.238.200

在這種情況下,強制 BIND 提供 NS 記錄缺少什麼?如何將 BIND 作為推薦,我在文件或野外範例中看不到任何內容。

我希望我的 BIND 實例充當參考,這意味著如果我查詢 dig @172.16.238.100 foo.labs 我應該獲得 NS 記錄(例如,與根伺服器的行為相同。dig @a.gtld-servers.net . google.com A 給了我 NS 記錄,因為它充當了推薦)

讓我們看看這裡發生了什麼

#dig @a.gtld-servers.net. google.com A

; <<>> DiG 9.10.3-P4-Debian <<>> @a.gtld-servers.net. google.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56733
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 9
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; AUTHORITY SECTION:
google.com.             172800  IN      NS      ns2.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.

;; ADDITIONAL SECTION:
ns2.google.com.         172800  IN      AAAA    2001:4860:4802:34::a
ns2.google.com.         172800  IN      A       216.239.34.10
ns1.google.com.         172800  IN      AAAA    2001:4860:4802:32::a
ns1.google.com.         172800  IN      A       216.239.32.10
ns3.google.com.         172800  IN      AAAA    2001:4860:4802:36::a
ns3.google.com.         172800  IN      A       216.239.36.10
ns4.google.com.         172800  IN      AAAA    2001:4860:4802:38::a
ns4.google.com.         172800  IN      A       216.239.38.10

;; Query time: 87 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: Wed Sep 07 14:03:26 +06 2022
;; MSG SIZE  rcvd: 287

在這裡,您要求 DNS 伺服器遞歸地為您a.gtld-servers.net.解析名稱的 IPv4 ( )。google.com``flags: qr

a.gtld-servers.net.google.com區域不具有權威性,並且不允許遞歸查詢(請參閱;; WARNING: recursion requested but not availabl),因此它的答案對於您的 A 查詢 ( ANSWER: 0) 而言是無意義的。

但是因為區域a.gtld-servers.net.的權威名稱伺服器com.非常友好地告訴您哪些名稱伺服器負責該google.com.區域,這意味著您應該向這些伺服器詢問名稱的 IPv4 地址google.com(請參閱 參考資料;; AUTHORITY SECTION:)。

這些 NS 記錄稱為委託記錄

此外,它還會報告這些名稱伺服器的 IP 地址,以便您提前了解它們以避免委派記錄解析循環(請參閱 參考資料;; ADDITIONAL SECTION:)。

這些 A 記錄稱為膠水記錄

所以你可能會這樣:

/etc/bind/db.labs:

@  3600  IN  SOA  labs.  root.labs.  (
  2019041900
  3600
  600
  604800
  600 )
  3600  IN  NS  ns1.labs.
  3600  IN  NS  ns2.labs.
  3600  IN  NS  ns3.labs.

foo          IN  NS ns.foo.labs. ; delegation for foo.labs.
ns.foo.labs. IN  A ip_of_ns.foo.labs. ; glue record

ns1      IN  A  172.16.238.100
ns2      IN  A  172.16.238.110
ns3      IN  A  172.16.238.120

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