以下问题的解决方案:使用$ddns-confgen
或,前者为您提供了粘贴到文件$tsig-keygen
中的语法named.conf
问题:
我正在尝试配置 BIND9(ver9.161-Ubuntu),以允许我创建 Letsecrypt 可用于验证域的 TXT 记录,最终允许为内部/私有系统生成 SSL 证书。
关于这些流程有很多文档,特别是 Home Assistant 的分步指南(有关配置 nginx + letsencrypt 的家庭自动化套件)。然而,自最初制作文档以来,算法和流程似乎已经发生了变化。
文档要求生成 DNSSEC 密钥以允许主机更新
$dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST letsencrypt
dnssec-keygen: fatal: unknown algorithm HMAC-SHA512
如果我运行dnssec-keygen --help
,它会提供一个算法列表,这些算法
“RSASHA1 | NSEC3RSASHA1 | RSASHA256 | RSASHA512 | ECDSAP256SHA256 | ECDSAP384SHA384 | ED25519 | ED448 | DH”
如果将上述命令更改为:RSASHA512
并且密钥大小更改为,1024
则系统会出现以下错误:
dnssec-keygen: fatal: invalid DNSKEY nametype HOST
在仔细研究了算法之后,唯一不会抛出错误的算法是 DH,通过将算法设置为 DH 即可生成密钥。
下一个问题是,在 name.conf.local 文件中使用时无法识别 DH 协议。
在文件中添加关键部分named.conf.local
:
key "letsencrypt" {
algorithm DH;
secret "averylongkey==";
};
但是当我跑步时:
$ sudo named-checkconf
/etc/bind/named.conf.local:14: unknown algorithm 'DH'
基本上,旧文档要求您使用过时的密钥生成方法。
答案1
这实际上只是设置一个普通配置以允许对区域进行动态更新。
创建适合 TSIG 的密钥,例如:
$ tsig-keygen letsencrypt-key
key "letsencrypt-key" {
algorithm hmac-sha256;
secret "igyPH4oXPjutSfJVpv3CTgTjxSOyehJ7uVO274UuUDo=";
};
$
并将此密钥放入您的配置中。
然后对于相关区域添加一个update-policy
,允许客户端使用此密钥来管理为此目的所需的任何记录。
例如
zone "example.com {
...
update-policy {
grant letsencrypt-key. name _acme-challenge.www.example.com. TXT;
grant letsencrypt-key. name _acme-challenge.example.com. TXT;
...
};
};
旁注:
请记住,当区域配置为通过动态更新进行管理时,除了 BIND 本身之外,其他任何东西都不适合对区域文件进行更改。
如果之前直接编辑该文件,这确实意味着工作流程会有所不同,但总的来说,我认为这是一种更现代、更不容易出错的方法,即通过动态更新协议进行所有更改,而不是外部进程直接写入区域文件。例如,工具国家免疫学学会确实允许类似的编辑体验,但通过动态更新应用更改。
答案2
您不需要 DNSSEC 密钥。您需要 RNDC 密钥。运行 egrndc-confgen
以生成建议的配置和密钥。您可能必须根据允许更新的主机和绑定接口应接受更新的需求调整此配置。