这是关于将签名区域从 BIND 的旧auto-dnssec
迁移到新dnssec-policy
的一些笔记:
- 迁移目的:将区域从旧的
auto-dnssec
迁移到新的dnssec-policy
,以最小的中断进行,继续将 DNSSEC 密钥视为静态配置,不进行密钥更替,给密钥无限的生命周期。 - 风险避免:迁移到
dnssec-policy
可能会触发意外的密钥更替或算法更替,可能是配置的dnssec-policy
与现有密钥不匹配或named
内部的dnssec-policy
机制误解了现有密钥的状态。 - 须知事项:之前的博客介绍了
dnssec-policy
的一些基础知识,如rndc dnssec
命令、调试日志、dnssec-policy
状态名称等。 - 前期准备:区域大多使用算法 13(ECDSA P256 SHA256),若使用 RSA 密钥可先升级,目前不研究
dnssec-policy
的算法更替。 - 版本选择:将主 DNS 服务器升级到最新的 Debian Stable(bookworm,12.5),使用 BIND 9.18.24,认为 9.18 是长期支持版本,有更多的 bug 修复。
- 测试工具:使用 Ansible 设置在开发框上创建主 DNS 服务器的隔离副本,用于实验
dnssec-policy
和制定迁移计划。 - 需要自定义策略的原因:BIND 的默认
dnssec-policy
与使用auto-dnssec
的区域策略不匹配,需要自定义策略,且还有其他设置需要更新为新样式。 - 匹配现有策略:检查密钥目录,根据现有密钥的算法和无限生命周期等信息制定匹配的
dnssec-policy
,如包含一个 ZSK 和一个 KSK,算法为 13 等。 更多策略细节:
- 最大区域 TTL:
dnssec-policy
机制需确保状态转换慢于相关 TTL,默认 24h,若区域 TTL 更长,named
将拒绝加载区域。 - DNSKEY TTL:通常使用 1 小时 TTL,基础设施记录使用 24 小时 TTL,在
dnssec-policy
中通过dnskey-ttl
设置。 - 签名生命周期:更喜欢较短的 RRSIG 生命周期,在
auto-dnssec
中通过named.conf
的options
块设置,在dnssec-policy
中通过signatures-refresh
、signatures-validity
和signatures-validity-dnskey
设置。 - 其他设置:还有其他与更替时间相关的
dnssec-policy
设置,由于给密钥设置了无限生命周期,可保持其他设置为默认。
- 最大区域 TTL:
- 准备密钥文件:确保区域的 DNSSEC 密钥文件包含区域当前状态的完整描述,使用
dnssec-settime
命令编辑密钥文件,确定 KSK 和 ZSK,更新 KSK 的“sync”和 DS 发布时间等,更新密钥后需在 Ansible 仓库和主服务器上部署。 - 重大配置更改:将新的
dnssec-policy
应用到区域,如zone dotat.at
配置中添加dnssec-policy fanf
,激活更改前确保调试日志打开,激活后可查看日志消息确认状态,如DNSKEY
等状态变为“OMNIPRESENT”,rndc dnssec -status
输出确认一切正常,启用dnssec-policy
后区域的.key
和.private
文件不变,新增.state
文件包含旧的时间元数据。 - 完成:已完成所有个人区域的迁移,将有其他杂项笔记放在另一篇帖子中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。