如何將 BIND 配置從 auto-dnssec 維護遷移到 dnssec-policy 而不會中斷?
BIND 9.16 引入了一項新
dnssec-policy
功能,作為對長期建立的功能的進一步自動化的 DNSSEC 密鑰管理和簽名工具auto-dnssec maintain
。該文件似乎沒有涵蓋從舊的遷移到新的,但相關的 wiki 頁面似乎表明已經存在的密鑰將被
dnssec-policy
.也就是說,設置一個新區域
dnssec-policy
很簡單,但是將現有區域從 遷移auto-dnssec maintain
到dnssec-policy
似乎並不像人們預期的那樣工作。我所期望的是與現有密鑰兼容的策略將繼續使用這些密鑰。
似乎發生的情況是所有現有密鑰都立即從區域中刪除,因為它們已經“過期”並被新密鑰替換,即使新策略要求一組兼容的密鑰(相同的算法和大小)並且現有密鑰具有未定義生命週期結束的屬性(僅.key 文件中的
Created
,Publish
和Activate
時間)。我在測試時使用的策略如下所示(命名以反映測試期間的內容):
dnssec-policy alg13-ksk-unlimited-zsk-60day { keys { ksk key-directory lifetime unlimited algorithm ECDSAP256SHA256; zsk key-directory lifetime P60D algorithm ECDSAP256SHA256; }; };
這是配置從更改為時的日誌
auto-dnssec maintain;
輸出dnssec-policy alg13-ksk-unlimited-zsk-60day;
:zone zone.example/IN (signed): reconfiguring zone keys keymgr: DNSKEY zone.example/ECDSAP256SHA256/49004 (KSK) created for policy alg13-ksk-unlimited-zsk-60day keymgr: DNSKEY zone.example/ECDSAP256SHA256/54646 (ZSK) created for policy alg13-ksk-unlimited-zsk-60day Removing expired key 20481/ECDSAP256SHA256 from DNSKEY RRset. DNSKEY zone.example/ECDSAP256SHA256/20481 (ZSK) is now deleted Removing expired key 12506/ECDSAP256SHA256 from DNSKEY RRset. DNSKEY zone.example/ECDSAP256SHA256/12506 (KSK) is now deleted Fetching zone.example/ECDSAP256SHA256/49004 (KSK) from key repository. DNSKEY zone.example/ECDSAP256SHA256/49004 (KSK) is now published DNSKEY zone.example/ECDSAP256SHA256/49004 (KSK) is now active Fetching zone.example/ECDSAP256SHA256/54646 (ZSK) from key repository. DNSKEY zone.example/ECDSAP256SHA256/54646 (ZSK) is now published DNSKEY zone.example/ECDSAP256SHA256/54646 (ZSK) is now active zone zone.example/IN (signed): next key event: 22-Mar-2020 15:08:19.805
可以看出,現有密鑰立即被刪除(甚至沒有遵循正常的翻轉程序!)並替換為相同類型的新密鑰。
考慮到只是立即更換密鑰而不是遵循預期的翻轉過程會破壞一切,顯然簡單地將配置切換到
dnssec-policy
是不行的。查看密鑰文件,我注意到一個附加
.state
文件與舊密鑰和新密鑰並排添加。我不知道這個文件是否需要以
dnssec-policy
某種方式正確操作?事先創建這些文件會以某種方式避免這種行為嗎?其核心問題是:有沒有辦法以
dnssec-policy
非破壞性方式遷移到使用?如果是這樣,怎麼做?
問題中描述的行為是一個錯誤,應該從 BIND 版本 9.16.2 開始解決。
Bug修復
$$ snip $$
- 當嘗試將已簽名的區域從自動 dnssec 維護遷移到基於 dnssec-policy 的區域時,現有密鑰立即被刪除並替換為新密鑰。由於未遵循密鑰翻轉時間限制,某些客戶端可能無法驗證響應,直到所有舊的 DNSSEC 資訊都從記憶體中超時。BIND 現在查看現有密鑰的時間元數據並將其合併到其 DNSSEC 策略操作中。$$ GL #1706 $$