Bind

如何使用自動 dnssec 更新區域:維護

  • June 8, 2019

我在 Debian Jessie 上執行權威的 BIND 9.9.5-9+deb8u8-Debian。我有一個可以正常工作的工作區robin.info(各種測試報告成功,例如 pingdom.com 的 DNS 檢查工具上的那個)

我正在嘗試使用 dnssec 保護它。我正在按照BIND DNSSEC 指南第 4 章中的說明進行操作,輕鬆上手。我成功生成了 ZSK 和 KSK,並更新了我的區域,添加了粗體行:

區域“robin.info”{
類型大師;
文件“/etc/bind/zones/robin.info”;
包括“/etc/bind/include-zones/acls”;
       **密鑰目錄“/etc/bind/dnssec/robin.info/2016”;
內聯簽名是;
自動dnssec維護;**
};

我確保 no .jnl, .jbk,.signed.signed.jnlfiles 與 zone 文件一起存在,然後重新啟動 bind withrndc reload並確認 zone 已載入並具有 DNSKEY 條目,儘管我在日誌中有一些錯誤:

11-Dec-2016 13:54:20.742 zone robin.info/IN/internal (signed): loaded serial 2016121111
11-Dec-2016 13:54:20.742 zone robin.info/IN/external (signed): loaded serial 2016121111
11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): receive_secure_serial: unchanged
11-Dec-2016 13:54:20.750 zone robin.info/IN/external (signed): reconfiguring zone keys
11-Dec-2016 13:54:20.766 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:54:20.750
11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): receive_secure_serial: unchanged
11-Dec-2016 13:54:20.796 zone robin.info/IN/internal (signed): reconfiguring zone keys
11-Dec-2016 13:54:20.805 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121113 != transaction first serial 2016121111
11-Dec-2016 13:54:20.805 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error

當我想更新我的區域時,這些串列錯誤似乎會導致問題。我在未簽名區域中進行了更改/etc/bind/zones/robin.info,並將我的序列號增加到2016121121

11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): serial 2016121121 (unsigned 2016121121)
11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): could not get zone keys for secure dynamic update
11-Dec-2016 13:57:58.658 zone robin.info/IN/internal (signed): receive_secure_serial: not found
11-Dec-2016 13:57:58.659 malformed transaction: /etc/bind/zones/robin.info.jnl last serial 2016121121 != transaction first serial 2016121111
11-Dec-2016 13:57:58.659 zone robin.info/IN/external (unsigned): not loaded due to errors.
11-Dec-2016 13:57:58.659 all zones loaded
11-Dec-2016 13:57:58.659 running
11-Dec-2016 13:57:58.661 zone robin.info/IN/internal (signed): reconfiguring zone keys
11-Dec-2016 13:57:58.670 malformed transaction: /etc/bind/zones/robin.info.signed.jnl last serial 2016121115 != transaction first serial 2016121111
11-Dec-2016 13:57:58.670 zone robin.info/IN/internal (signed): zone_rekey:dns_journal_write_transaction -> unexpected error
11-Dec-2016 13:57:58.670 zone robin.info/IN/external (signed): reconfiguring zone keys
11-Dec-2016 13:57:58.671 zone robin.info/IN/external (signed): next key event: 11-Dec-2016 14:57:58.670

我可以確認dig我的舊區域仍在載入(來自 SOA 和不可見的更改)。

這裡有幾個錯誤消息:

  1. 提示我在使用密鑰時遇到問題(“無法獲取用於安全動態更新的區域密鑰”)。但是 bind 在第一次載入時沒有問題,並且我的密鑰文件可以通過 bind 讀取(命名為作為bindgroup 成員的使用者執行bind):
xavier@dent:/etc/bind/zones$ ls -l /etc/bind/dnssec/robin.info/2016
total 17k
-rw-r--r-- 1 root bind  603 Dec 10 17:23 Krobin.info.+008+43324.key
-rw-r----- 1 root bind 1.8k Dec 10 17:23 Krobin.info.+008+43324.private
-rw-r--r-- 1 root bind  604 Dec 10 17:22 Krobin.info.+008+44679.key
-rw-r----- 1 root bind 1.8k Dec 10 17:22 Krobin.info.+008+44679.private
  1. 提示連續劇有錯誤(最初的錯誤是last serial 2016121113 != transaction first serial 2016121111)。但是我認為我不必為連續劇擔心太多,因為在 ISC 的 KB 中我可以讀到:

請注意,此響應中的序列號與文件 example.com.db 中的序列號不同。Named 獨立於未簽名版本跟踪區域的簽名版本的序列號。如果未簽名區域使用比簽名副本中的序列號更高的新序列號進行更新,則簽名副本將增加以匹配它,否則兩者將保持分開。$$ 1 $$

到目前為止,我發現更新區域的唯一方法是停止綁定,刪除.jnl、和文件,然後重新開始綁定.jbk。這似乎是錯誤的,我需要確保增加序列號足以啟動新區域。我做錯了什麼,如何修復我的 dnssec?.signed``.signed.jnl

我想我終於找到了問題的根本原因。我有兩個視圖,它們被配置為包含兩次相同的主區域文件。

**您不能對兩個區域使用相同的文件。**所以這是無效的,並導致了我的問題:

view "internal" {
   match-clients ...;
   zone "example.com" {
       type master;
       file "/etc/bind/zones/example.net";
   };
};
view "external" {
   match-clients ...;
   zone "example.com" {
       type master;
       file "/etc/bind/zones/example.net";
   };
};

“通過範例了解 BIND 9 中的視圖”指南的第 4 章描述了共享區域的正確方法。基本上,只有一個 zone 必須是 master zone,而另一個必須是 slave。在正確的位置添加一些 acls、密鑰和也通知本地主機後,我擺脫了這些錯誤。

最後這是我的最終配置:

key "internal" {
   // TSIG Key generated with dnssec-keygen -a HMAC-MD5 -b 512 -n USER internal
   algorithm hmac-md5;
   secret "XXXX";
};

view "internal" {
   match-clients { key internal; ...IPs...; }; // our network
   zone "robin.info" {
       type slave;
       file "/etc/bind/slave-zones/robin.info"; // Not the same file as external view!
       masters { 127.0.0.1; };
   };
};

view "external" {
   match-clients { !key internal; "any"; }; // everyone else
   server 127.0.0.1 {
       /* Deliver notify messages to internal view with internal key. */
       keys { internal; };
   };
   zone "robin.info" {
       type master;
       file "/etc/bind/zones/robin.info";
       // ACL file with allow-transfer and also-notify
       // including secondary DNS servers and 127.0.0.1
       include "/etc/bind/acls"; 
       key-directory "/etc/bind/dnssec/robin.info/2017";
       inline-signing yes;
       auto-dnssec maintain;
   };
};

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