nsupdate 回答 SERVFAIL

nsupdate 回答 SERVFAIL

我一直在尝试设置一个可以更新的域。我正在使用 bind9,我曾经使用过

ddns-confgen -a hmac-sha512 -k <keyname>

为了生成我的密钥,我在 /etc/bind/keys.local 中添加了密钥

key "<keyname>" {
        algorithm hmac-sha512;
        secret "<secret>";
};

我的named.conf文件如下所示:

include "/etc/bind/keys.local";
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

我的named.conf.local文件如下所示:

zone "<subdomain_name>" {
    type master;
    update-policy {
        grant <keyname> zonesub ANY;
    };
    file "<zone_file>"; # zone file path
};

zone "<reverse_zone>.in-addr.arpa" {
    type master;
    update-policy {
        grant <keyname> zonesub ANY;
    };
    file "<reverse_zone_file>";
};

我是否忽略了一些显而易见的东西?因为当我这样做时:

sudo nsupdate -k <keyfile>
server <dns_server>
zone <subdomain_name>
update add newhost.<subdomain_name> 86400 A <newhost_ip>
send

我最终收到了 SERVFAIL 回复...

dig <dns_server>

ping <dns_server>

工作正常,我只是无法让 DDNS 工作。我尝试过类似这个的其他线程中的响应,但无论我怎么尝试,最终都给我 SERVFAIL。提前感谢任何建议。

edit1:这是我尝试 nsupdate 时服务器端的相应日志:

signer "<keyname>" approved
apparmor="DENIED" operation="mknod" profile="/usr/sbin/named" name="/etc/bind/zones/<zone_file>" pid=18799 comm="named" requested_mask="c" denied_mask="c" fsuid=112 ouid=112
client <client_ip>#62287/key <keyname>: signer "<keyname>" approved
client 172.30.2.253#62287/key <keyname>: updating zone '<zonename>/IN': adding an RR at 'host3.<zonename>' A <new_host_ip>
/etc/bind/zones/<zone_file>: create: permission denied
client <client_ip>#62287/key <keyname>: updating zone 'aci.riviera.local/IN': error: journal open failed: unexpected error

编辑2:

事实证明绑定组对 /etc/bind 没有写权限...

sudo chown -R bind:bind /etc/bind

解决了问题

答案1

感谢您像系统管理员一样发布您的服务器日志,而不是尝试仅从客户端实用程序调试服务器问题。

apparmor="DENIED" 操作="mknod" 配置文件="/usr/sbin/named" 名称="/etc/bind/zones/" pid=18799 comm="named" requested_mask="c" denied_mask="c" fsuid=112 ouid=112

这似乎表明 Apparmor 正在阻止您的名称服务器在 中创建文件/etc/bind/zones

绑定名称服务器需要一个地方来永久存储(在文件中)动态更新,并通过.jnl在存储区域文件的目录中创建日志文件来实现这一点。Apparmor 阻止该操作,因为一般来说,守护进程和服务更改其自己的运行时配置时会违反安全规定。

可能的解决方案:

  • 将区域文件移动到具有正确 AppArmor 保护的目录。
    在我的 Ubuntu 16.04 上,/etc/apparmor.d/usr.sbin.named指定为 动态更新区域(和日志)文件
    /var/lib/bind/的常规替代方案。/etc/bind
  • 覆盖默认的 AppArmor 保护。

创建本地覆盖并允许在 /etc/bind/zones 中动态更新:

# /etc/apparmor.d/local/usr.sbin.named 

/etc/bind/zones/** rw,

相关内容