DNS 区域文件返回有关我的 A 记录的错误。Bind9 Ubuntu 22.04

DNS 区域文件返回有关我的 A 记录的错误。Bind9 Ubuntu 22.04

我正在尝试在 ProxMox Host 上设置一个客户 ubuntu 22.04 DNS/DHCP 服务器。运行时出现错误消息

我的域名已通过 cloudfare 注册(“文件中未显示”,当 cloudfare 是我的名称服务器之一时,该域名可以返回积极的挖掘结果”)所以这应该是一个本地域名,直到我可以配置面向互联网的路由器(奇怪的情况)。

sudo named-checkzone example.local /etc/bind/db.example.local

zone example.local/IN: NS 'ns.example.local' has no address records (A or AAAA)
zone example.local/IN: not loaded due to errors.

我的前向区域文件是:

;
; BIND data file for local loopback interface
;
$TTL    604800
@   IN  SOA ns.example.local. root.example.local. (
                  7     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;Name Server Information
@   IN  NS  ns.example.local.
ns.example.local    IN  A   192.168.4.100
clientlongname.example.local    IN  A   192.168.4.97
client2.example.local   IN  A   192.168.4.98
client3.example.local   IN  A   192.168.4.99
client4.example.local   IN  A   192.168.4.96

当我的反向查找区域文件使用 named-checkzone 时,它​​返回正值。

如果需要的话,下面是我的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";
zone "example.local" IN {
    type master;
    file "/etc/bind/db.example.local";
    allow-update { none; };
};
zone "4.168.192.in-addr.arpa" IN {
    type master;
    file "/etc/bind/db.r.example.local";
    allow-update { none; };
};

我尝试删除 NS 记录前的 @,并将 FQDN 添加到客户端的主机名中。不知道我还能尝试什么,这些该死的记录“看起来”非常简单。

任何的意见都将会有帮助。

谢谢。

答案1

是的,有错误。你正在考虑的记录,

ns.example.local    IN  A   192.168.4.100

被解释为ns.example.local.example.local。要修复此问题,请添加点,使标识符完全合格:

ns.example.local.    IN  A   192.168.4.100
clientlongname.example.local.    IN  A   192.168.4.97
client2.example.local.   IN  A   192.168.4.98
client3.example.local.   IN  A   192.168.4.99
client4.example.local.   IN  A   192.168.4.96

或者删除后缀,利用设置的原点:

ns    IN  A   192.168.4.100
clientlongname    IN  A   192.168.4.97
client2   IN  A   192.168.4.98
client3   IN  A   192.168.4.99
client4   IN  A   192.168.4.96

或者,通过将源设置为 DNS 根来同时修复所有记录在区域的开始处或者至少在第一个不合格记录之前:

$ORIGIN .

我倾向于删除多余的附加内容,通常选择第二种方式:利用原点。


在 DNS 中,以点结尾的记录之间存在区别,这些记录被视为完全合格标识符,以及末尾没有点的标识符。

完全限定的字符会立即按原样读取和解释。例如,单独的点.(DNS根)和example.com.

非限定标识符根据当前起源。在区域开始时,Origin 设置为 BIND 中的区域名称(在您的情况下,example.local为第一个区域和4.168.192.in-addr.arpa第二个区域)。然后,在解析每个记录时,如果有非限定名称,Origin 为附加。这种情况既发生在记录名称上(就像您的情况一样ns.example.local),也发生在记录数据上,例如,在 CNAME、PTR、SOA、NS、MX、SRV 和其他记录中的目标名称。例如,如果您在 SOA 之前没有更改原点,则记录

@ IN SOA ns root 7 604800 86400 2419200 604800

将被解释为与区域中的当前 SOA 记录完全相同 —nsroot都将附加原点。这也是为什么反向区域中的 PTR 记录几乎总是以点结尾的原因 — 我们通常不希望将它们解释为像 这样的名称foo.bar.x.y.z.in-addr.arpa.,而是foo.bar.。您可以在区域文件中随时更改原点,新值将用于所有后续记录,直到再次更改。

相关内容