首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bind9命名-检查区域失败,而SOA记录未位于区域顶部

bind9命名-检查区域失败,而SOA记录未位于区域顶部
EN

Unix & Linux用户
提问于 2019-09-08 08:12:35
回答 2查看 6.5K关注 0票数 0

一年前,我完美地创建了bind9,但忽略了准确地记录我所做的事情,现在有些事情发生了变化,我正在努力修复它。这个问题首先表现在DHCP客户端,它们现在无法解决局域网上的DHCP/NS主机。

使用named-checkzone检查我的绑定配置会出现一个错误:

代码语言:javascript
运行
复制
adam@gondolin:~$ sudo named-checkzone 192.168.0 /var/cache/bind/db.192.168.0
/var/cache/bind/db.192.168.0:2: SOA record not at top of zone (0.168.192.in-addr.arpa.192.168.0)
zone 192.168.0/IN: loading from master file /var/cache/bind/db.192.168.0 failed: not at top of zone
zone 192.168.0/IN: not loaded due to errors.

当然,named也不会加载这些区域。

这是区域文件:

代码语言:javascript
运行
复制
adam@gondolin:~$ sudo cat /var/cache/bind/db.192.168.0
$TTL 86400
0.168.192.in-addr.arpa  IN SOA  localdomain. root.localdomain. (
                                1123       ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      gondolin.localdomain.
$ORIGIN 0.168.192.in-addr.arpa.
adam@gondolin:~$ 

我唯一的其他区域文件也给出了同样的结果:

代码语言:javascript
运行
复制
adam@gondolin:~$ sudo cat /var/cache/bind/db.localdomain
$TTL 86400
localdomain             IN SOA  localdomain. root.localdomain. (
                                1650       ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      gondolin.localdomain.
$ORIGIN localdomain.
adam@gondolin:~$ 

这是绑定配置:

代码语言:javascript
运行
复制
adam@gondolin:~$ cat /etc/bind/named.conf.options
acl goodclients {
    localhost;
    localnets;
};
options {
    listen-on {
        192.168.0.3;
        127.0.0.1;
    };
    listen-on-v6 {
        fe80::2a37:37ff:fe03:4225/64;
        ::1;
        #any;
    };
    directory "/var/cache/bind";
    forwarders {
           208.67.220.220;
           208.67.222.222;
    };
    allow-query {
           goodclients;
    };
    allow-recursion {
           goodclients;
    };
    allow-transfer {
           goodclients;
    };
    dnssec-enable no;
    #dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
};
adam@gondolin:~$ 

以及这些区域:

代码语言:javascript
运行
复制
adam@gondolin:~$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

include "/etc/bind/rndc.key";

zone "localdomain" {
    type master;
    notify no;
    file "/var/cache/bind/db.localdomain";
    allow-update {
        key "rndc-key";
    };
};

zone "0.168.192.in-addr.arpa" {
    type master;
    notify no;
    file "/var/cache/bind/db.192.168.0";
    allow-update {
        key "rndc-key";
    };
};
adam@gondolin:~$ 

我不太确定其他配置在这里是相关的,所以我将展示我能想到的一切。

代码语言:javascript
运行
复制
adam@gondolin:~$ cat /etc/hostname
gondolin

adam@gondolin:~$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain gondolin
127.0.1.1   gondolin
192.168.0.3     gondolin.localdomain gondolin

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

resolv.conf可能是一个令人担忧的问题:

代码语言:javascript
运行
复制
adam@gondolin:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 192.168.0.3
domain localdomain
search localdomain
adam@gondolin:~$ 

我认为systemd-resolve消息是不相关的,但是做一个状态说明如下:

代码语言:javascript
运行
复制
adam@gondolin:~$ sudo systemd-resolve --status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

在主机上运行一个简单的查找:

代码语言:javascript
运行
复制
adam@gondolin:~$ dig gondolin

; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> gondolin
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 58942
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 083d35c6e1daa489584481225d74b44000978776cbc340e9 (good)
;; QUESTION SECTION:
;gondolin.          IN  A

;; AUTHORITY SECTION:
.           3600    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019090800 1800 900 604800 86400

;; Query time: 7 msec
;; SERVER: 192.168.0.3#53(192.168.0.3)
;; WHEN: Sun Sep 08 08:56:48 BST 2019
;; MSG SIZE  rcvd: 140

adam@gondolin:~$ 
EN

回答 2

Unix & Linux用户

发布于 2021-12-16 13:21:25

使用此区域配置:

代码语言:javascript
运行
复制
zone "0.168.192.in-addr.arpa" {
type master;
notify no;
file "/var/cache/bind/db.192.168.0";

区域文件的开头是这样的:

代码语言:javascript
运行
复制
$TTL 86400
0.168.192.in-addr.arpa  IN SOA  localdomain. root.localdomain. (

SOA实际上是指一个名为0.168.192.in-addr.arpa.0.168.192.in-addr.arpa.的区域,这显然是不正确的。

你可能会问为什么?

Because您错过了一个句号。

在区域文件中,任何不以句号(.)结尾的域名都将自动将区域的$ORIGIN附加到它。如果您没有显式指定$ORIGIN,它是zone配置语句中区域的名称.但是在configuration语句中,假设在结尾处为句号。在区域文件中,必须在需要时显式地指定它。

一旦您意识到这一点,错误消息应该是有意义的: BIND期望看到指向与zone配置行相同的域名的SOA。

SOA的第一行应该如下所示(如果您不使用@):

代码语言:javascript
运行
复制
0.168.192.in-addr.arpa.  IN SOA  localdomain. root.localdomain. (

在0.168.192. is addr.arpa.结尾处的句号是非常重要的。

您的localdomain区域也有同样的问题。它应该是:

代码语言:javascript
运行
复制
localdomain.             IN SOA  localdomain. root.localdomain. (
票数 2
EN

Unix & Linux用户

发布于 2019-09-09 18:00:16

在关于这个主题的大量不同网页中,我终于找到了一个,它解释了什么和为什么,同时也给出了一个解决方案:

ftp://ftp.iitb.ac.in/LDP/en/DNS-HOWTO/DNS-HOWTO-5.html

在上面的配置中,我的错误是在区域文件中,我需要正确地声明名称服务器中的名称服务器--上面的配置有太多不必要的东西。这个方法很有效,或者至少满足了named-checkzone的要求:

代码语言:javascript
运行
复制
$TTL 3D
@                       IN SOA  gondolin.localdomain. root.gondolin.localdomain. (
                                201909091  ; serial
                                8H         ; refresh (8 hours)
                                2H         ; retry (2 hours)
                                4W         ; expire (4 weeks)
                                1D         ; minimum (1 day)
                                )
                        NS      gondolin
gondolin                A       192.168.0.3
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/539589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档