Domain-Name-System

如何將 BIND 配置從 auto-dnssec 維護遷移到 dnssec-policy 而不會中斷?

  • May 11, 2020

BIND 9.16 引入了一項新dnssec-policy功能,作為對長期建立的功能的進一步自動化的 DNSSEC 密鑰管理和簽名工具auto-dnssec maintain

該文件似乎沒有涵蓋從舊的遷移到新的,但相關的 wiki 頁面似乎表明已經存在的密鑰將被dnssec-policy.

也就是說,設置一個新區域dnssec-policy很簡單,但是將現有區域從 遷移auto-dnssec maintaindnssec-policy似乎並不像人們預期的那樣工作。

我所期望的是與現有密鑰兼容的策略將繼續使用這些密鑰。

似乎發生的情況是所有現有密鑰都立即從區域中刪除,因為它們已經“過期”並被新密鑰替換,即使新策略要求一組兼容的密鑰(相同的算法和大小)並且現有密鑰具有未定義生命週期結束的屬性(僅.key 文件中的Created,PublishActivate時間)。

我在測試時使用的策略如下所示(命名以反映測試期間的內容):

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 開始解決。

來自BIND 9.16.2 發行說明

Bug修復

$$ snip $$

  • 當嘗試將已簽名的區域從自動 dnssec 維護遷移到基於 dnssec-policy 的區域時,現有密鑰立即被刪除並替換為新密鑰。由於未遵循密鑰翻轉時間限制,某些客戶端可能無法驗證響應,直到所有舊的 DNSSEC 資訊都從記憶體中超時。BIND 現在查看現有密鑰的時間元數據並將其合併到其 DNSSEC 策略操作中。$$ GL #1706 $$

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