当区域文件包含其他文件时,在 chroot'd bind 9.8 中使用 dnssec-signzone 时出错

当区域文件包含其他文件时,在 chroot'd bind 9.8 中使用 dnssec-signzone 时出错

在 RHEL 6.5 上使用 bind 9.8.2,运行 chroot'd。

我有一个包含其他文件的区域文件(它是一个在不同数据中心拥有大量服务器的区域,每个数据中心包含一个文件)。

区域文件和包含的文件位于

/var/named/chroot/var/named/zones/master/example.com
/var/named/chroot/var/named/zones/master/lax01

包含文件在相对于 chroot 目录的区域文件中被引用:

$INCLUDE zones/master/lax01

当尝试使用 dnssec-signzone 对区域进行签名时,出现错误,因为它似乎无法加载包含的文件。

# cd /var/named/chroot/var/named/zones/master
# dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) \
   -N INCREMENT -o example.com -t example.com
dnssec-signzone: error: dns_master_load: example.com:287: zones/master/lax01: file not found
dnssec-signzone: fatal: failed loading zone from 'example.com': file not found

有没有更好的方法来引用 INCLUDE 指令的路径?我没有看到指示 dnssec-signzone 考虑 chroot 指令的方法。我是否需要从不同的目录执行此操作并以不同的方式引用路径?

答案1

我认为您的 chroot 与此无关。即使没有 chroot,我仍然认为该命令会失败。dnssec-signzone没有读取named.conf并且不知道通过directory选项指定的工作目录。

鉴于这种情况,所有包含的文件都需要相对于您当前的工作目录。如果您像这样执行该命令,该命令应该可以按预期工作:

# cd /var/named/chroot/var/named
# dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) \
   -N INCREMENT -o example.com -t zones/master/example.com

请注意,我们更改的目录实际上是运行时的 BIND 服务器的工作目录。

相关内容