我在从属 DNS 服务器上正确加载区域时遇到问题。两台服务器都运行 BIND 9.9.3-P2。
我已经为大约 150 个区域提供服务,它们都运行正常。但是,当我添加另一个域时,从属服务器拒绝识别它。
以下是主服务器上的区域规范:
zone "test.no" { type master; file "/var/lib/named/zones/test.zone"; };
以下是从属设备上的区域规范:
zone "test.no" { type slave; masters { master.ip; }; file "/var/lib/named/zones/test.zone"; };
当我在主服务器上执行操作时rndc reload
,从服务器会收到通知,从主服务器传输区域并且不会发出任何抱怨。以下是来自从服务器的日志:
27-Mar-2014 10:30:15.146 zone test.no/IN: no master file
27-Mar-2014 10:30:15.146 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.157 dns_zone_maintenance: zone test.no/IN: enter
27-Mar-2014 10:30:15.158 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.166 zone_timer: zone test.no/IN: enter
27-Mar-2014 10:30:15.166 zone_maintenance: zone test.no/IN: enter
27-Mar-2014 10:30:15.166 queue_soa_query: zone test.no/IN: enter
27-Mar-2014 10:30:15.166 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.166 soa_query: zone test.no/IN: enter
27-Mar-2014 10:30:15.170 refresh_callback: zone test.no/IN: enter
27-Mar-2014 10:30:15.170 refresh_callback: zone test.no/IN: serial: new 2014031901, old not loaded
27-Mar-2014 10:30:15.170 queue_xfrin: zone test.no/IN: enter
27-Mar-2014 10:30:15.171 zone test.no/IN: Transfer started.
27-Mar-2014 10:30:15.171 zone test.no/IN: no database exists yet, requesting AXFR of initial version from x.x.x.x#53
27-Mar-2014 10:30:15.171 transfer of 'test.no/IN' from x.x.x.x#53: connected using x.x.x.y#59644
27-Mar-2014 10:30:15.179 zone test.no/IN: zone transfer finished: success
27-Mar-2014 10:30:15.179 zone test.no/IN: transferred serial 2014031901
27-Mar-2014 10:30:15.179 zone_needdump: zone test.no/IN: enter
27-Mar-2014 10:30:15.179 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.179 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.179 transfer of 'test.no/IN' from x.x.x.x#53: Transfer completed: 1 messages, 6 records, 197 bytes, 0.007 secs (28142 bytes/sec)
27-Mar-2014 10:30:15.180 zone_timer: zone test.no/IN: enter
27-Mar-2014 10:30:15.180 zone_maintenance: zone test.no/IN: enter
27-Mar-2014 10:30:15.180 zone test.no/IN: sending notifies (serial 2014031901)
27-Mar-2014 10:30:15.186 zone_dump: zone test.no/IN: enter
27-Mar-2014 10:30:15.186 zone_settimer: zone test.no/IN: enter
27-Mar-2014 10:30:15.186 zone_gotwritehandle: zone test.no/IN: enter
27-Mar-2014 10:30:15.186 decrement_reference: delete from rbt: 0x9a725d8 test.no
27-Mar-2014 10:30:15.187 dump_done: zone test.no/IN: enter
并/var/lib/named/zones/test.zone
在从属服务器上创建并填充:
-rw-r--r-- 1 named named 250 Mar 27 10:30 test.zone
一切都很好!但是,在我增加主服务器上的序列号并再次重新加载后,我得到了同样的错误:
27-Mar-2014 10:30:51.405 client x.x.x.x#42033: received notify for zone 'test.no': not authoritative
该test.no
区域是我尝试的第二个区域,出现相同的错误,并且配置具有与其余工作区域相同的语法。
主服务器上显示的实际区域文件:
$TTL 1h0m6s
@ IN SOA ns1.domain.no. postmaster.domain.no. (
2014031902 ; serial, todays date + todays serial #
1H ; refresh, seconds
2H ; retry, seconds
2D ; expire, seconds
1H ) ; minimum, seconds
NS ns1.domain.no.
NS ns2.domain.no.
TXT "test.no"
test A 10.0.0.1
答案1
为了让遇到此问题并从 Google 上找到答案的其他人受益,对我来说,该问题是由我使用 BIND 视图引起的。
我配置了多个视图,假设 BIND 会将所有匹配的视图合并为一个,但实际上它只选择了第一个匹配的视图,并只使用该视图,而忽略所有其他视图。因此,客户端只能看到我的一小部分区域,因此视图中缺失的区域将被视为非权威区域。
我的问题是通过将所有内容放入包含文件中并使用这些文件来确保每个视图本身都是完整的来解决的。
答案2
解决了:
服务器上有两个 bind 实例在运行!一个似乎是孤立的,它继续处理请求(因此拒绝它不知道的区域)。另一个忠实地响应rndc
命令,并将所有正确内容记录在与另一个实例相同的日志文件中。
我在将 listen 指令更改为仅 localhost 以过滤日志文件中来自客户端的所有噪音时发现了这个问题。然而,查询不断轰炸日志文件,然后我仔细检查了哪些端口和 IP 正在监听,确实有多个不一致的条目。
我有点失望,因为rndc reload
我可以继续与一个实际上孤立的进程对话,却没有收到任何警告,即由于冲突,命名进程没有绑定到它的 udp 端口 ;-)