設置綁定以使用 nsupdate (SERVFAIL)
我正在嘗試使用 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 是否也是如此,但在 Ubuntu
bind9
上執行時啟用了 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