我想要做的是创建一个已经存在的区域子域,但是我收到“更新失败:SERVFAIL”错误。
我目前有的是:
#!/bin/bash
record=yyy.mydomain.com
ttl=5
(
echo "server localhost"
echo "zone mydomain.com"
echo "update add ${record} 300 A 217.x.x.x"
echo "send"
) | /usr/bin/nsupdate
我的区域配置
zone "mydomain.com" {
type master;
file "/etc/bind/zones/mydomain.com";
allow-update {
127.0.0.1;
217.x.x.x;
};
};
有人知道我错过了什么吗?
答案1
好的,问题出在我的区域位于“区域”文件夹中,授予该组能够写入的权限,问题就解决了
答案2
看起来问题在于named
无法写入路径/etc/bind/zones/mydomain.com
(和相关.jnl
文件)。
尽管可以简单地让运行 的用户对该路径进行写入named
,但这样做有点不合常规,因为这与通常的使用方式不太相符/etc
。
通常,服务从中读取其配置/etc
,但如果服务在某处存储数据,那么这些文件通常会驻留在某处/var
。
虽然它并不是普遍适用或严格遵守的,但文件系统层次标准关于类 UNIX 操作系统的整体目录结构可能值得一读。
Ubuntu(Debian?)中 BIND 包的维护者已经记录了他们建议的配置模式和目录结构,完全符合这些要求。
摘录自/usr/share/doc/bind9/README.Debian.gz
:
虽然您可以自由地为需要对其他区域具有权威性的服务器构建任何结构,但我们建议您将您作为主服务器的任何区域的数据库文件放在 /etc/bind 中(根据复杂性,甚至可以放在子目录结构中),并在 named.conf 文件中使用完整路径名。您作为辅助服务器的任何区域都应在 named.conf 中使用简单文件名(相对于 /var/cache/bind)进行配置,因此数据文件将存储在 BIND 的工作目录中(默认为 /var/cache/bind)。 需要自动更新(例如通过 DHCP 和/或 nsupdate)的区域应存储在 /var/lib/bind 中,并使用完整路径名指定。