web-dev-qa-db-ja.com

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

edit2:

バインドグループには/ etc/bindへの書き込み権限がありませんでした...

Sudo chown -R bind:bind /etc/bind

問題を修正しました

2
Mazimer

クライアントユーティリティだけからサーバーの問題をデバッグしようとするのではなく、システム管理者のように振る舞い、サーバーログを投稿していただきありがとうございます。

apparmor = "DENIED" operation = "mknod" profile = "/ usr/sbin/named" name = "/ etc/bind/zones /" pid = 18799 comm = "named" requested_mask = "c" denied_mask = "c" fsuid = 112 ouid = 112

これは、Apparmorがネームサーバーによる/etc/bind/zonesでのファイルの作成をブロックしていることを示しているようです。

バインドネームサーバーは、動的更新を(ファイルに)永続的に保存する場所を必要とし、ゾーンファイルが保存されているディレクトリに.jnlジャーナルファイルを作成することによってそれを行います。一般に、デーモンとサービスが独自のランタイム構成を変更するとセキュリティ違反になるため、Apparmorはその操作をブロックしています。

可能な解決策:

  • ゾーンファイルを適切なAppArmor保護のあるディレクトリに移動します。
    私のUbuntu16.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,
1
HBruijn