在 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 服务器的工作目录。