我有同样的问题命名检查区域错误。我已经交叉检查了我的区域文件并且它们的 FQDN 格式正确。
我使用以下命令检查了区域文件:
:/etc/bind$ sudo named-checkzone linuxconfig.org zones/master/db.linuxconfig.org
zone linuxconfig.org/IN: sample.linuxconfig.org/NS 'ns1.sample.linuxconfig.org' (out of zone) has no addresses records (A or AAAA)
zone linuxconfig.org/IN: loaded serial 1
OK
该文件:db.linuxconfig.org.
包含以下内容:
;
; BIND data file for linuxconfig.org
;
$TTL 3h
@ IN SOA ns1.linuxconfig.org. admin.linuxconfig.org. (
1 ; Serial
3h ; Refresh after 3 hours
1h ; Retry after 1 hour
1w ; Expire after 1 week
1h ) ; Negative caching TTL of 1 day
;
@ IN NS ns1.linuxconfig.org.
linuxconfig.org. IN MX 10 mail.linuxconfig.org.
linuxconfig.org. IN A 192.168.0.19
ns1 IN A 92.168.0.10
www IN CNAME @
mail IN A 12.168.0.10
ftp IN CNAME linuxconfig.org.
sample IN NS ns1.sample.linuxconfig.org.
ns1.sample.linuxconfig.org. IN A 1.1.1.1
如果我删除了 ns1.sample.linuxconfig.org. 记录,那么 BIND 将会抱怨.. has no REQUIRED GLUE address records
。
named-checkzone
当 BIND 可以成功接受文件并在查询时返回记录时, 为什么会出现抱怨?
答案1
如果传递-i local
或-i local-sibling
,named-checkzone
将完全成功。请参阅手册页以了解 的解释-i
。
基本上-i
进行加载后区域完整性检查,默认为-i full
:
模式“完整”检查委托 NS 记录是否引用 A 或 AAAA 记录(区域内和区域外的主机名)。它还检查区域中的粘合地址记录是否与子区域所通告的记录相匹配。模式“本地”仅检查引用区域内主机名的 NS 记录或是否存在某些必需的粘合,即当名称服务器位于子区域中时。
首先,这解释了为什么即使在运行中 named-checkzone 失败,区域仍会加载:您收到的错误来自于区域之后进行的检查,通过在此处执行真实的 DNS 查询。
事实上,它尝试查询ns1.sample.linuxconfig.org
但失败了,因此出现错误,如果你这样做,ltrace
你会看到:
getaddrinfo("ns1.sample.linuxconfig.org.", nil, 0x7ffe2c6c4bb0, 0x7ffe2c6c4b78) = -2