我正在进行有关如何设置 DNS 服务器的内部测试(Centos 7 Virtual)。
使用 bind 我毫无问题地得到了一个 named-checkzone -D 并且在最后有一个 OK 语法。
但当我尝试获取反向区域时,它一直显示无所有者/无当前所有者名称
[root@CentOS named]# cat db.climent.cat
$TTL 1H
@ IN SOA servidor hostmaster (
2004070101 ;; serial
8H ;; refresh for slaves
3H ;; retry
4W ;; expire time at slaves
1H ;; negative TTL
)
IN NS servidor
IN MX 10 servidor
a01 IN A 192.168.56.1
a02 IN A 192.168.56.2
a03 IN A 192.168.56.3
a04 IN A 192.168.56.4
a05 IN A 192.168.56.5
a06 IN A 192.168.56.6
a07 IN A 192.168.56.7
a08 IN A 192.168.56.8
a09 IN A 192.168.56.9
a10 IN A 192.168.56.10
a11 IN A 192.168.56.11
a12 IN A 192.168.56.12
a13 IN A 192.168.56.13
a14 IN A 192.168.56.14
a15 IN A 192.168.56.15
a16 IN A 192.168.56.16
a17 IN A 192.168.56.17
a18 IN A 192.168.56.18
a19 IN A 192.168.56.19
a20 IN A 192.168.56.20
#a21 IN A 192.168.56.21
a22 IN A 192.168.56.22
a23 IN A 192.168.56.23
a24 IN A 192.168.56.24
a25 IN A 192.168.56.25
a26 IN A 192.168.56.26
a27 IN A 192.168.56.27
a28 IN A 192.168.56.28
a29 IN A 192.168.56.29
a30 IN A 192.168.56.30
a31 IN A 192.168.56.31
a32 IN A 192.168.56.32
a33 IN A 192.168.56.33
a34 IN A 192.168.56.34
a35 IN A 192.168.56.35
servidor IN A 192.168.56.21
;Els servidors de noms i de correu electrònic han de ser host A
correu IN CNAME servidor
dns IN CNAME servidor
;; Defineix dominis de serveis amb CNAMEs. IMPORTANT: es posen noms de màquina que resolgui DNS i no IPs.
www IN CNAME a01
ftp IN CNAME a02
和反向区域文件
[root@CentOS named]# cat db.56.168.192
$TTL 1H
@ IN SOA servidor.climent.cat. hostmaster.climent.cat. (
1; Serial
604800; Refresh
86400; Retry
2419200; Expire
604800 ); Negative Cache TTL
IN NS servidor.climent.cat.
1 IN PTR a1.climent.cat.
2 IN PTR a2.climent.cat.
3 IN PTR a3.climent.cat.
4 IN PTR a4.climent.cat.
5 IN PTR a5.climent.cat.
6 IN PTR a6.climent.cat.
7 IN PTR a7.climent.cat.
8 IN PTR a8.climent.cat.
9 IN PTR a9.climent.cat.
10 IN PTR a10.climent.cat.
11 IN PTR a11.climent.cat.
12 IN PTR a12.climent.cat.
13 IN PTR a13.climent.cat.
14 IN PTR a14.climent.cat.
15 IN PTR a15.climent.cat.
16 IN PTR a16.climent.cat.
17 IN PTR a17.climent.cat.
18 IN PTR a18.climent.cat.
19 IN PTR a19.climent.cat.
20 IN PTR a20.climent.cat.
#21 IN PTR a21.climent.cat.
22 IN PTR a22.climent.cat.
23 IN PTR a23.climent.cat.
24 IN PTR a24.climent.cat.
25 IN PTR a25.climent.cat.
26 IN PTR a26.climent.cat.
27 IN PTR a27.climent.cat.
28 IN PTR a28.climent.cat.
29 IN PTR a29.climent.cat.
30 IN PTR a30.climent.cat.
31 IN PTR a31.climent.cat.
32 IN PTR a32.climent.cat.
33 IN PTR a33.climent.cat.
34 IN PTR a34.climent.cat.
35 IN PTR a35.climent.cat.
36 IN PTR servidor.climent.cat.
它给出的错误是...
[root@CentOS named]# named-checkzone -D 56.168.192.in-addr.arpa db.56.168.192
db.56.168.192:2: no current owner name
db.56.168.192:9: no current owner name
zone 56.168.192.in-addr.arpa/IN: loading from master file db.56.168.192 failed: no owner
zone 56.168.192.in-addr.arpa/IN: not loaded due to errors.
有什么想法、建议或帮助吗?在网上找了一些教程或信息,但没能成功
PS:在我使用 DNS 进行更大规模测试之前,我使用的 Centos 恰好位于 ip 21 中,这就是为什么它被注释的原因
答案1
SOA 行上的前导空格问题?
答案2
为了详细说明 hargut 的简短回答,问题似乎归结为对主文件格式(区域文件应该遵循的 DNS 区域数据的标准化文本表示)的一些误解。
您询问的错误似乎是由于行上意外的前导空格造成的。(问题中包含的和文件SOA
中似乎都存在同样的意外前导空格问题。)db.climent.cat
db.56.168.192
前导空格之所以至关重要,是因为主文件格式基于一组由空格分隔的字段,其中第一个字段从每行的最左边开始。
最左边的字段是所有者姓名(在错误消息中引用)并且字段本身始终存在(而其他一些字段是可选的)。 在您的例子中,由于前导空格,所有字段都已向右移动,而所有者姓名为空(第一组空格之前的值是空字符串)。
空值所有者姓名定义为之前的所有者姓名也应该重新用于此记录,但是对于第一条记录这显然行不通,因为没有先前的记录。
另一件需要注意的事情是,你说#21
记录被注释掉了。它实际上并没有被注释掉,因为#
主文件格式中没有注释字符。如果你想注释掉某些内容,你必须使用注释字符;
,就像您所做的那样; Serial
。
答案3
我在 Debian 上做了类似的事情,但我看到我们的反向区域文件有所不同。我的有一个$ORIGIN
。
另外,您是否添加了区域/etc/bind/named.conf.local
或类似内容以将其引入?
最后,区域文件中的注释是分号;
而不是井号#
从/etc/bind/named.conf.local
:
zone "97.99.10.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.10.99.97";
};
还有/etc/bind/db.10.99.97
:
user@darkstar:~/ $ cat /etc/bind/db.10.99.97
$TTL 3D ; default ttl for records without a specified lifetime
$ORIGIN 97.99.10.in-addr.arpa.
@ IN SOA ns.restricted.test. root.restricted.test. (
1536033696 ; serial number
1638 ; ns refresh
204 ; ns retry
10485 ; authority expiry
256 ); min (RFC2308 §4)
; we dont use a hostname when we tell about our nameserver(s)
IN NS ns.restricted.test.
; hostname in this case is the last quad of the IP address
2 IN PTR gw.restricted.test.
2 IN PTR ns.restricted.test.