如何不中断地将 BIND 配置从 auto-dnssec 维护迁移到 dnssec-policy?

如何不中断地将 BIND 配置从 auto-dnssec 维护迁移到 dnssec-policy?

BIND 9.16 引入了新的dnssec-policy作为长期建立的进一步自动化 DNSSEC 密钥管理和签名设施的功能auto-dnssec maintain功能。

该文档似乎没有涵盖从旧版本迁移到新版本,但相关维基页面似乎表明已经存在的密钥将被拾取dnssec-policy

话虽如此,使用 建立新区域dnssec-policy非常简单,但将现有区域从 迁移auto-dnssec maintaindnssec-policy似乎并不像人们预期的那样有效。
我原本期望与现有密钥兼容的策略将继续使用这些密钥。

似乎发生的情况是,所有现有密钥都会立即从区域中删除,因为它们已“过期”并被新密钥替换,即使新策略要求一组兼容的密钥(相同的算法和大小)并且现有密钥没有定义生命终止属性(.key 文件中只有CreatedPublish和时间)。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以无中断的方式迁移到使用?如果有,怎么做?

答案1

问题中描述的行为是一个错误,应该在 BIND 版本 9.16.2 中得到解决。

来自BIND 9.16.2 发行说明

Bug修复

[剪辑]

  • 当尝试将已签名的区域从 auto-dnssec 维护迁移到基于 dnssec-policy 的区域时,现有密钥会被立即删除并替换为新密钥。由于未遵循密钥轮换时间限制,因此某些客户端可能无法验证响应,直到所有旧 DNSSEC 信息从缓存中超时。BIND 现在会查看现有密钥的时间元数据并将其纳入其 DNSSEC 策略操作中。[GL #1706]

相关内容