我在 debian gnu/linux 上的私有区域运行 bind9 作为主 DNS 服务器,一切正常。namserver 正在 IP 上运行X.X.X.X1
,
$ dig foo.zoneA @dns.zoneA
; <<>> DiG 9.7.3 <<>> foo.zoneA @X.X.X.X1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21295
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2
;; QUESTION SECTION:
;foo.zoneA. IN A
;; ANSWER SECTION:
foo.zoneA. 604800 IN A 192.168.171.Y
;; AUTHORITY SECTION:
zoneA. 604800 IN NS ns2.mycompany.net.
zoneA. 604800 IN NS dns.zoneA.
zoneA. 604800 IN NS dns.mycompany.net.
;; ADDITIONAL SECTION:
dns.mycompany.net. 306 IN A X.X.X.X2
dns.zoneA. 604800 IN A X.X.X.X1
;; Query time: 0 msec
;; SERVER: X.X.X.X1#53(X.X.X.X1)
;; WHEN: Thu Jul 26 17:04:14 2012
;; MSG SIZE rcvd: 142
最近我们必须将我们的一个区域镜像到在 solaris 上运行 bind9 的辅助 DNS 服务器。
在主服务器上,我们允许区域传输到辅助服务器,例如:
acl zoneAdns { X.X.X.X2; };
view "localview" {
match-clients { zoneAdns; ...; };
allow-transfer { zoneAdns; };
zone "zoneA" {
type master;
allow-query { zoneAdns; ...; };
file "/etc/bind/db/db.zoneA";
};
};
i 用于...
指示其他 acl,X.X.X.X2
是辅助 DNS 服务器的 IP。
完成该配置后,就可以在 Solaris 计算机上手动获取区域传输dig axfr zoneA @X.X.X.X1
(其中 XXXX1 是主 DNS 服务器的 IP)。
solaris 机器的配置(根据做这件事的人的说法,因为我无权访问该机器)如下:
zone "zoneA" {
type slave;
masters { X.X.X.X1; };
file "/var/cache/bind/db.zoneA";
};
不幸的是,solaris-host 拒绝充当辅助名称服务器:
$ dig foo.zoneA @X.X.X.X2
; <<>> DiG 9.7.3 <<>> foo.zoneA @X.X.X.X2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33528
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;foo.zoneA. IN A
;; AUTHORITY SECTION:
. 3533 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2012072600 1800 900 604800 86400
;; Query time: 0 msec
;; SERVER: X.X.X.X2#53(X.X.X.X2)
;; WHEN: Thu Jul 26 16:59:21 2012
;; MSG SIZE rcvd: 106
幸运的是,还有第三个名称服务器可用(这次在Linux的再次,使用 IP X.X.X.X3
)。将此名称服务器配置为与 solaris bind9 完全相同(根据那里的技术人员的说法),我们立即获得成功(在允许主服务器上为新 IP 地址进行区域传输之后):
$ dig foo.zoneA @X.X.X.X3
; <<>> DiG 9.7.3 <<>> foo.zoneA @X.X.X.X3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9788
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUESTION SECTION:
;foo.zoneA. IN A
;; ANSWER SECTION:
foo.zoneA. 604800 IN A 192.168.171.Y
;; AUTHORITY SECTION:
zoneA. 604800 IN NS dns.zoneA.
zoneA. 604800 IN NS ns2.mycompany.net.
zoneA. 604800 IN NS dns.mycompany.net.
;; ADDITIONAL SECTION:
dns.mycompany.net. 600 IN A X.X.X.X2
dns.zoneA. 604800 IN A X.X.X.X1
ns2.mycompany.net. 600 IN A X.X.X.X3
;; Query time: 1 msec
;; SERVER: X.X.X.X3#53(X.X.X.X3)
;; WHEN: Thu Jul 26 17:15:53 2012
;; MSG SIZE rcvd: 158
现在,这两个“其他”名称服务器(运行 solaris 的 XXXX2 和运行 linux 的 XXXX3)充当主(solaris)/辅助(linux)对,因此 bind9 至少能够从 solaris 到 linux 进行区域传输。
尝试在两侧使用 bind9 从 Linux 到 Solaris 进行区域传输时,是否存在已知的限制?
答案1
不幸的是,solaris-host 拒绝充当辅助名称服务器
不幸的是,这表明人们对 DNS 的工作方式存在着深深的误解。
世界其他地方如何知道谁可以查询您的域数据?
-> 通过区域文件中配置/定义的名称服务器。
您需要将 Solaris IP 添加为名称服务器 (NS) 记录,并更新区域。
这也将导致通知自动发送,因为它们被发送到所有其他列出的名称服务器。
然后从属设备将响应通知拉动区域。
仅供参考,“递归是”- 否。只是...不。这在权威名称服务器上是没有位置的;而是设置专用的解析器缓存。