![使用 Bind9.9 添加 DNS 子域时出现问题,且 NS 位于子域中](https://linux22.com/image/673902/%E4%BD%BF%E7%94%A8%20Bind9.9%20%E6%B7%BB%E5%8A%A0%20DNS%20%E5%AD%90%E5%9F%9F%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%8C%E4%B8%94%20NS%20%E4%BD%8D%E4%BA%8E%E5%AD%90%E5%9F%9F%E4%B8%AD.png)
我使用旧版 Bind 进行设置,但自从我开始使用 Bind9.9 后,它就不再起作用了……named.conf 仍然相同,递归处于活动状态,我使用的区域没有转发器。但是,我收到错误消息,说没有 NS 的胶合记录,尽管它确实存在……这是新版 Bind 不允许的吗?即,将 NS 放在子域本身中?
在旧的 Bind 中我使用的是 Red Hat,现在使用的是 CentOS7。
这是区域文件:
$TTL 86400
rd2t9g9.redes.intranet. IN SOA pc9-1-v1-9 root (
42 ; serial
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
IN NS pc9-1-v1-9
pc9-1-v1-9 IN A 192.168.99.11
pc9-1-v2-9 IN A 192.168.99.12
area1 IN NS pc9-2-v2-9.area1
area1 IN NS duplicate
duplicate IN A 192.168.99.23
pc9-2-v2-9.area1 IN A 192.168.99.22
运行 checkzone 时,我收到消息
zone rd2t9g9.redes.intranet/IN: area1.rd2t9g9.redes.intranet/NS 'pc9-2-v2-9.area1.rd2t9g9.redes.intranet' (out of zone) has no addresses records (A or AAAA)
zone rd2t9g9.redes.intranet/IN: loaded serial 42
OK
该文件与运行旧 Bind 时的文件完全相同;如果 NS 在域中(即重复),它将起作用,但不允许我在子域中拥有 NS(但以前是这样!)
有任何想法吗?
还将添加named.conf文件:
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "rd2t9g9.redes.intranet" IN {
type master;
file "zone_A";
allow-update { none; };
forwarders { };
};
zone "99.168.192.in-addr.arpa" IN {
type master;
file "rev_zone";
allow-update { none; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
答案1
就允许的内容而言,没有任何变化。可能named-checkzone
有更多的验证,具体取决于您要将其与哪个旧版本进行比较,或者您运行它的环境是否设置不同。
由于该记录指向的名称NS
不在您正在验证的区域内,因此named-checkzone
正在 DNS 中查找该名称(使用系统配置的解析器服务器)。
pc9-2-v2-9.area1.rd2t9g9.redes.intranet
如果您尝试在运行的同一主机上查找,是否有地址记录named-checkzone
?
即dig pc9-2-v2-9.area1.rd2t9g9.redes.intranet A
and/ordig pc9-2-v2-9.area1.rd2t9g9.redes.intranet AAAA
是否给出了肯定的答案?
如果没有,则会出现警告消息。
如果你出于某种原因不想named-checkzone
进行这种类型的验证(你可能确实想这样做,如果这些地址记录在权威端丢失,那将是一个真正的问题),那么-i
选项可用于指定不同的验证模式(例如-i local
)。
答案2
您正在尝试在 rd2t9g9.redes.intranet 中使用 area1.rd2t9g9.redes.intranet 元素。
这会导致named-checkzone
抱怨有元素超出区域,因为子域areas1.rd2t9g9.redes.intranet的服务器可能还不存在,因此named-checkzone
无法解析名称。一旦子域配置正确,警告就会消失。
您的配置应该可以正常工作 - 但是,由于 BIND 的后续版本更加严格,因此我无法保证。避免出现警告的一种方法是删除“.area1”,然后按照您的目的进行配置。
$TTL 86400
@ IN SOA pc9-1-v1-9 root.localhost. (
42 ; serial
3H ; refresh
15M ; retry
1W ; expire
1D ) ; minimum
IN NS pc9-1-v1-9
pc9-1-v1-9 IN A 192.168.99.11
pc9-1-v2-9 IN A 192.168.99.12
area1 IN NS pc9-2-v2-9
area1 IN NS duplicate
duplicate IN A 192.168.99.23
pc9-2-v2-9 IN A 192.168.99.22
我确实更喜欢使用 @ 缩写,而不是再次写下区域,因为它可以在处理多个区域时减少错误。
我还将 SOA 中的根从 root 更改为 root.localhost,因为 RFC 指定它是带有“.”的电子邮件,代表“@”。您可以使用自己的电子邮件代替 root@localhost。
请注意,BIND 9.9 有几项新变化,其中一项可能会对实验室产生影响的变化是,出于性能原因,新的从属文件现在采用原始/二进制格式。如果出于教育目的需要,可以配置 BIND 9.9 以将其保留为文本格式。