Domain-Name-System

設置綁定以使用 nsupdate (SERVFAIL)

  • September 11, 2018

我正在嘗試使用 nsupdate 動態更新我的 DNS 伺服器。

先決條件

我在我的 DNS 伺服器上使用 Debian 6,在我的客戶端上使用 Debian 4。

我使用以下方法創建了一個公鑰/私鑰對:

dnssec-keygen -C -a HMAC-MD5 -b 512 -n USER sub.example.com.

然後我編輯了我的named.conf.local以包含我的公鑰和我希望更新的新區域。現在看起來像這樣(注意:我也嘗試*了 allow-update { any; };*沒有成功):

zone "example.com" {
       type master;
       file "/etc/bind/primary/example.com";
       notify yes;
       allow-update { none; };
       allow-query { any; };
};

zone "sub.example.com" {
       type master;
       file "/etc/bind/primary/sub.example.com";
       notify yes;
       allow-update { key "sub.example.com."; };
       allow-query { any; };
};

key sub.example.com. {
       algorithm HMAC-MD5;
       secret "xxxx xxxx";
};

接下來,我將私鑰文件 ( key.private ) 複製到另一台我想從中更新區域的伺服器。我還在此伺服器上創建了一個包含更新資訊的文本文件(更新)(注意:我也嘗試過玩弄這些東西。沒有成功):

server example.com
zone sub.example.com
update add sub.example.com. 86400 A 10.10.10.1
show
send

現在我正在嘗試使用以下方法更新區域:

nsupdate -k key.private -v update

問題

所述命令給了我以下輸出:

Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;sub.example.com.       IN  SOA

;; UPDATE SECTION:
sub.example.com.    86400   IN  A   10.10.10.1

update failed: SERVFAIL

當我在遠端伺服器上發出 nsupdate 命令時,命名調試級別 3 為我提供了以下資訊(注意:我混淆了客戶端 IP):

06-Aug-2012 14:51:33.977 client X.X.X.X#33182: new TCP connection
06-Aug-2012 14:51:33.977 client X.X.X.X#33182: replace
06-Aug-2012 14:51:33.978 clientmgr @0x2ada3c7ee760: createclients
06-Aug-2012 14:51:33.978 clientmgr @0x2ada3c7ee760: recycle
06-Aug-2012 14:51:33.978 client @0x2ada475f1120: accept
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: read
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: TCP request
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: request has valid signature
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: recursion not available
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: update
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: send
06-Aug-2012 14:51:33.978 client X.X.X.X#33182: sendto
06-Aug-2012 14:51:33.979 client X.X.X.X#33182: senddone
06-Aug-2012 14:51:33.979 client X.X.X.X#33182: next
06-Aug-2012 14:51:33.979 client X.X.X.X#33182: endrequest
06-Aug-2012 14:51:33.979 client X.X.X.X#33182: read
06-Aug-2012 14:51:33.986 client X.X.X.X#33182: next
06-Aug-2012 14:51:33.986 client X.X.X.X#33182: request failed: end of file
06-Aug-2012 14:51:33.986 client X.X.X.X#33182: endrequest
06-Aug-2012 14:51:33.986 client X.X.X.X#33182: closetcp

但它什麼也沒做。該區域沒有更新,我的 nsupdate 也沒有改變任何東西。我不確定文件*/etc/bind/primary/sub.example.com*在第一次更新之前是否應該存在。我在沒有文件、空文件和預配置區域文件的情況下嘗試了它。沒有成功。

我在網上找到的稀疏資訊將我指向有關綁定工作目錄的文件和文件夾權限,因此我更改了*/etc/bind/var/cache/bind*的權限(這是我的“綁定”的主目錄使用者)。

我不是 100% 確定權限是否正確.. 但對我來說看起來不錯:

ls -lah /var/cache/bind/
total 224K
drwxrwxr-x  2 bind bind 4.0K Aug  6 03:13 .
drwxr-xr-x 12 root root 4.0K Jul 21 11:27 ..
-rw-r--r--  1 bind bind 211K Aug  6 03:21 named.run

ls -lah /etc/bind/
total 72K
drwxr-sr-x  3 bind bind 4.0K Aug  6 14:41 .
drwxr-xr-x 87 root root 4.0K Jul 30 01:24 ..
-rw-------  1 bind bind  125 Aug  6 02:54 key.public
-rw-------  1 bind bind  156 Aug  6 02:54 key.private
-rw-r--r--  1 bind bind 2.5K Aug  6 03:07 bind.keys
-rw-r--r--  1 bind bind  237 Aug  6 03:07 db.0
-rw-r--r--  1 bind bind  271 Aug  6 03:07 db.127
-rw-r--r--  1 bind bind  237 Aug  6 03:07 db.255
-rw-r--r--  1 bind bind  353 Aug  6 03:07 db.empty
-rw-r--r--  1 bind bind  270 Aug  6 03:07 db.local
-rw-r--r--  1 bind bind 3.0K Aug  6 03:07 db.root
-rw-r--r--  1 bind bind  493 Aug  6 03:32 named.conf
-rw-r--r--  1 bind bind  490 Aug  6 03:07 named.conf.default-zones
-rw-r--r--  1 bind bind 1.2K Aug  6 14:18 named.conf.local
-rw-r--r--  1 bind bind  666 Jul 29 22:51 named.conf.options
drwxr-sr-x  2 bind bind 4.0K Aug  6 03:57 primary/
-rw-r-----  1 root bind   77 Mar 19 02:57 rndc.key
-rw-r--r--  1 bind bind 1.3K Aug  6 03:07 zones.rfc1918

ls -lah /etc/bind/primary/
total 20K
drwxr-sr-x 2 bind bind 4.0K Aug  6 03:57 .
drwxr-sr-x 3 bind bind 4.0K Aug  6 14:41 ..
-rw-r--r-- 1 bind bind  356 Jul 30 00:45 example.com

我在 Ubuntu 伺服器上遇到了幾乎完全相同的問題,結果證明是兩個問題:

(1) 服裝

我不知道 Debian 是否也是如此,但在 Ubuntubind9上執行時啟用了 apparmor。這意味著它只允許寫入某些地方。這些地點列在 中/etc/apparmor.d/usr.sbin.named,通常建議留在這些目錄中。您可以安裝apparmor-utils軟體包並(暫時)禁用 apparmor 以查看這是否會導致您的問題:

sudo aa-status

應顯示/usr/sbin/named在強製配置文件列表中。然後執行

sudo aa-complain /usr/sbin/named

讓它進入抱怨模式。

(2) 區域文件

幾乎沒有手冊/教程提到這一點,但 bind9 期望(預先)存在的區域文件能夠正常工作。該end of file錯誤可能是由於區域文件尚不存在(/etc/bind/primary/example.com/etc/bind/primary/sub.example.com您的範例中)。您可以像這樣簡單地創建一個:

echo "; DO NOT EDIT MANUALLY - use the \"nsupdate\" utility to prevent data loss
;
\$ORIGIN example.com.
\$TTL 86400  ; 1 day
@    IN SOA  ns1.example.com. hostmaster.example.com. (
      2009074711 ; serial
      7200       ; refresh (2 hours)
      300        ; retry (5 minutes)
      604800     ; expire (1 week)
      60         ; minimum (1 minute)
      )
  IN  NS  ns1.example.com.
ns1    IN  A  <IP of your bind server>" | sudo -u bind tee /etc/bind/primary/example.com

引用自:https://serverfault.com/questions/414734