我有一个 dnssec 保护的域名,当所有主域名都无法访问时,该域名需要保持 8 周的有效期。
据我了解,在区域的配置文件中设置应该会生成sig-validity-interval
持续64 天并且每 7 天由 bind9 自动重新签名的 s。64 7
SSIG
当我为域完成此操作时,我惊讶地看到 dnsvis 显示并非所有生成的RRSIG
s 都会持续 64 天。RRSIG
和 的 sDNSKEY
确实SOA
持续了预期的时间,但所有其他RRSIG
s 都会在 11 到 14 天后过期。
我最初以为这可能是在设置签名有效期间隔之前运行 bind9 导致的缓存问题。所以我停止了named
,清除/var/cache/bind
并删除了所有 DNSSEC 文件*.jbk
、、*.jnl
和*.signed
,*.signed.jnl
然后重新启动了 bind。这并没有解决问题。
很明显我在这里做错了什么,但我不知道是什么。以下是我为域使用的配置片段:
区域声明
named.conf.local
:zone "example.com" { type master; file ".../db.example.com"; allow-transfer { ... }; also-notify { ... }; inline-signing yes; auto-dnssec maintain; serial-update-method increment; key-directory "..."; sig-validity-interval 64 7; };
内容
.../db.example.com
:$TTL 300 @ IN SOA ns1.example.com. admin.example.com. ( 2021101004 ; Serial 10m ; Refresh 20m ; Retry 9w ; Expire 1h ) ; Negative Cache TTL ; example.com. IN NS ns1.example.com. example.com. IN NS ns2.example.com. ; ...
答案1
从 bind 版本 9.16.15 (~2021) 开始,bind 似乎只允许控制RRSIG
记录何时过期自定义 dnssec 策略使用:
- 首先,使用选项
signatures-refresh
、和定义自定义策略signatures-validity
,并将signatures-validity-dnskey
其设置为所需的值。 dnssec-policy
然后,通过设置区域块中的选项为给定区域启用自定义策略。
自定义策略可能如下所示:
dnssec-policy example-com-policy {
dnskey-ttl 300;
keys {
ksk key-directory lifetime unlimited algorithm ED25519;
zsk key-directory lifetime unlimited algorithm ED25519;
};
max-zone-ttl 300;
parent-ds-ttl 300;
parent-propagation-delay 2h;
publish-safety 7d;
retire-safety 7d;
signatures-refresh 1439h;
signatures-validity 90d;
signatures-validity-dnskey 90d;
zone-propagation-delay 2h;
};
区域块可能看起来像这样:
zone "example.com" {
type master;
file ".../db.example.com";
allow-transfer { ... };
also-notify { ... };
key-directory "...";
serial-update-method increment;
dnssec-policy example-com-policy;
};
请注意,与传统方法相比,此方法有一些缺点(即auto-dnssec maintain
):
我发现,当对多个域使用单个策略时, bind 会对
rndc
/命令无响应。为每个区域定义单独的策略似乎可以解决这个问题。systemctl
我发现绑定坚持“淘汰”您的 KSK 和 ZSK 密钥,无论它们是否过期。在撰写本文时,我还没有找到避免此问题的方法。
据我所知,这同样适用于主配置和从配置中的绑定。