1.5.5. 使用自动密钥生成和区维护功能进行 DNSSEC 区域签名
您可以使用域名系统安全扩展 (DNSSEC) 为区域签名,以确保身份验证和数据完整性。此类区域包含额外的资源记录。客户端可以使用它们来验证区域信息的真实性。
如果您为区启用 DNSSEC 策略功能,BIND 会自动执行以下操作:
- 创建密钥
- 为区域签名
- 维护区域,包括重新签名并定期替换密钥。
要启用外部 DNS 服务器以验证区的真实性,您必须在父区中添加该区域的公钥。请联系您的域供应商或 registry,以了解更多有关如何完成此操作的详细信息。
此流程使用 BIND 中的内置 default DNSSEC 策略。这个策略使用单一 ECDSAP256SHA 密钥签名。另外,还可创建自己的策略来使用自定义密钥、算法和计时。
先决条件
-
bind软件包已安装。 - 配置您要启用 DNSSEC 的区域。
-
named或named-chroot服务正在运行。 - 服务器可将时间与时间服务器同步。对于 DNSSEC 验证,系统时间准确非常重要。
流程
编辑
/etc/named.conf文件,并将dnssec-policy default;添加到您要启用 DNSSEC 的区域:zone "example.com" { ... dnssec-policy default; };重新载入 BIND:
# systemctl reload named如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot命令来重新加载该服务。BIND 将公钥存储在
/var/named/K<zone_name>.+<algorithm>+<key_ID>.key文件中。使用此文件显示区的公钥,格式为父区所需的格式:DS 记录格式:
# dnssec-dsfromkey /var/named/Kexample.com.+013+61141.key example.com. IN DS 61141 13 2 3E184188CF6D2521EDFDC3F07CFEE8D0195AACBD85E68BAE0620F638B4B1B027DNSKEY 格式:
# grep DNSKEY /var/named/Kexample.com.+013+61141.key example.com. 3600 IN DNSKEY 257 3 13 sjzT3jNEp120aSO4mPEHHSkReHUf7AABNnT8hNRTzD5cKMQSjDJin2I3 5CaKVcWO1pm+HltxUEt+X9dfp8OZkg==
- 请求将区域的公钥添加到父区。请联系您的域供应商或 registry,以了解更多有关如何完成此操作的详细信息。
验证
从启用了 DNSSEC 签名的区域查询您自己的 DNS 服务器:
# dig +dnssec +short @localhost A www.example.com 192.0.2.30 A 13 3 28800 20220718081258 20220705120353 61141 example.com. e7Cfh6GuOBMAWsgsHSVTPh+JJSOI/Y6zctzIuqIU1JqEgOOAfL/Qz474 M0sgi54m1Kmnr2ANBKJN9uvOs5eXYw==本例假定 BIND 在同一主机上运行并响应
localhost接口上的查询。在将公钥添加到父区并传播到其他服务器后,验证服务器是否将查询上的身份验证数据(
ad)标记设置为已签名区域:# dig @localhost example.com +dnssec ... ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ...