![如何修复我的 DNSSEC?我的 DNSSEC 一直无法正常工作,而且问题可能更加严重](https://linux22.com/image/775785/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%E6%88%91%E7%9A%84%20DNSSEC%EF%BC%9F%E6%88%91%E7%9A%84%20DNSSEC%20%E4%B8%80%E7%9B%B4%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%EF%BC%8C%E8%80%8C%E4%B8%94%E9%97%AE%E9%A2%98%E5%8F%AF%E8%83%BD%E6%9B%B4%E5%8A%A0%E4%B8%A5%E9%87%8D.png)
我尝试使用 DNSSEC 但没有成功。为了帮助理解 DNSSEC,我阅读了许多在线文章、rndc 手册页、dnssec-*,查看了 dnsviz.net 和 dnssec-analyzer.verisignlabs.com/。大多数信息都详细解释了 DNSSEC,但我需要知道该做什么以及如何修复问题。
例如,dnsviz.net/allenintech.com 表示“权威名称服务器未提供有效的 DNSKEY 记录来匹配 TLD 名称服务器发布的 DS 记录”。
NS 提供的 DNSKEY 记录如何与 TLD 发布的 DS 记录相匹配?我是否缺少配置?是否有 rndc 或 dnssec-* 命令可以完成此操作?
系统 Ubuntu 20.04 BIND 9.16.1-Ubuntu(稳定版本)Apache/2.4.48(Ubuntu)
named.conf 区域文件 为了解决问题,除了几个区域外,所有区域都保留了下来。我认为减少区域更有助于诊断和解决问题。
注意 两个视图:内部和外部 IP 本地服务器:10.0.0.1(内部视图) 静态 IP 服务器:99.93.25.17(外部视图) 辅助 NS:51.38.99.90
options{
directory "/etc/bind/zoneFiles/";
listen-on port 53 { 127.0.0.1; 10.0.0.1; 99.93.25.17; };
allow-transfer { none; };
dnssec-policy default;
bindkeys-file "/etc/bind/zoneFiles/bind.keys";
};
acl "mylo" {
127.0.0.1;
};
acl "mylan" {
10.0.0.0/24;
};
acl "mywireless" {
192.168.1.0/24;
};
view inside {
match-clients {"mylan"; "mylo"; "mywireless";};
recursion yes;
zone "." {
type hint;
file "/etc/bind/zoneFiles/root.hints";
};
zone "allenintech.com" {
type master;
file "/etc/bind/zoneFiles/insideView/allenintech.com.inside/db.allenintech.com.inside";
key-directory "/etc/bind/zoneFiles/insideView/allenintech.com.inside";
allow-transfer {51.38.99.90;};
};
};
view outside {
recursion no;
match-clients {any;};
allow-query {any;};
#--------------------------------------------------
zone "." {
type hint;
file "/etc/bind/zoneFiles/root.hints";
};
zone "allenintech.com" {
type master;
file "/etc/bind/zoneFiles/outsideView/allenintech.com.outside/db.allenintech.com.outside";
key-directory "/etc/bind/zoneFiles/outsideView/allenintech.com.outside";
allow-transfer {51.38.99.90;};
};
};
内部视图
$ORIGIN **allenintech.com.**
$TTL 86400
@ IN SOA ns2.allenintech.com. besus.allenintech.com. (
2022030750 ; Serial
28800 ; Refresh
120 ; Retry
1209600 ; Expire
86400 ; Minumum
)
; Name servers
@ IN NS ns2.allenintech.com.
ns2 IN A 10.0.0.1
; Web Services
www IN A 10.0.0.1
@ IN A 10.0.0.1
外观
$ORIGIN **allenintech.com.**
$TTL 86400
@ IN SOA ns1.allenintech.com. besus.allenintech.com. (
2022030725 ; Serial
28800 ; Refresh
120 ; Retry
1209600 ; Expire
86400 ; Minumum
)
; Name Servers
@ IN NS ns1.allenintech.com. ; primary
ns1 IN A 99.93.25.17 ; primary
NS fns2.42.pl. ; secondary
; Web Services
www IN A 99.93.25.17
@ IN A 99.93.25.17
**当前图像
旧图像 德斯维兹 dnssec 分析器.verisignlab
旧图像 https://dnssec-analyzer.verisignlabs.com/allenintech.com
答案1
13/61524
用于签署区域 ( ) 的 DNSSEC 密钥与DS
父区域 ( ) 签署的记录com.
不匹配13/51277
。请DS
在您的注册商处更新您的记录。
该dnssec-signzone
命令应该创建一个名为的文件,dsset-allenintech.com
其中包含正确的DS
记录:
allenintech.com. IN DS 61524 13 1 ****************************************
allenintech.com. IN DS 61524 13 2 ******************************************************** ********
答案2
解决方案如下:Bind9 设置了“dns-policy default”,如上面的选项部分所示。这很重要,也很酷。大多数帮助和文档都没有提到“dns-policy default”,而是提到了以前、较旧甚至已弃用的方法中的“dns-policy default”。
1.注释掉named.conf中除一个区域配置之外的所有区域配置,例如 example.com。
区域“example.com”{类型主控;文件“/.../example.com.outsideView/example.com.outside”;键目录“/.../zoneFiles/outsideView/example.com.outside”;};
A)文件是 example.com 区域文件的位置。我将内部和外部视图分开,并明确区域文件代表哪个视图,因此是 example.com.outside。
b)密钥目录是写入 DNSSEC 密钥的位置和其中复制放置了 example.com 的区域文件。务必将 bind9 配置中的区域文件 example.com(即 name.conf 文件)与复制到 key-directory 的区域文件 example.com(如 name.conf 选项所示)分开保存。您可以根据需要修改文件中的区域文件 example.com。它是工作副本。key-directory 中的区域文件 example.com 副本将由 DNSSEC“dnssec-policy default”修改或“签名”。
2.一旦使用文件和密钥目录设置了区域配置文件的 bind9 选项, a) 使用“systemctl restart bind9”或“rndc reload”重新启动绑定。“rndc reload”将重新加载配置文件和区域。当无法理解 DNSSEC 与绑定和区域配置的交互时,我使用了“rndc reload”。当事情变得清晰时,“systemctl restart bind9”就足够了。b) 成功重新启动 bind9 后,cd 到 key-directory。将有区域文件 example.com.outside,.jnl 和 K.(key|state|private) 文件如下:
例如.com.outside
例如.com.outside.jnl
Kexample.com.+013+12345.key Kexample.com.+013+12345.state Kexample.com.+013+12345.private (013 - 算法编号, 12345 - 密钥)
3)从密钥中提取 DS 记录使用以下命令并保存输出
a) dnssec-dsfromkey Kexample.com.outside+013+12345.key > DSkeyexample.com.outside。
b) DSkeyexample.com.outside 将在文件 example.com.outside 中包含区域 example.com 的 DS 记录,例如,cat DSkeyexample.com.outside 生成:
example.com.IN DS 12345 13 2 1234adb69784efc7528746dab15432abfd78764cd543cccd5432123abcdef123
c) 将DS记录发送给ISP或者将此DS记录输入到ISP的DNSSEC接口中。
4)签署区域,example.com(文件名为 example.com.outside)。请记住,区域 example.com 位于两个位置:文件和复制到 key-directory 的位置。位于绑定配置“文件”中的 example.com 用于更改和修改。复制到绑定配置“key-directory”的区域文件 example.com 由 DNSSEC 签名。
a) 最初,两个区域文件的大小都一样小,即当然是相同的,例如 8KB。签名时,密钥目录中的区域文件大小将翻两番,例如从 8KB 变为 24KB。此外,使用编辑器打开位于密钥目录中的区域文件。注意签名数据。签名区域是 DNSSEC 重写密钥目录中的区域文件时。“dnssec-policy default”签名并维护区域。
b)区域签名并不总是立即发生。使用“systemctl status bind9”观察下一个密钥更新,以获取区域可能被签名的时间指示。
5)对区域文件进行更改/修正 a) 不要更改或修改密钥目录中的已签名或未签名区域文件。更改并修改文件中的区域文件并保存,并记得增加序列号。然后将更改复制或另存为密钥目录。是的,已签名或未签名区域文件将被覆盖。b) 重新启动 bind9:systemctl restart bind9。
6)强制区域签名。当 bind9 运行时,没有错误,但区域不会签名。
a) 移除/删除 *.jnl 文件并增加位于文件中的区域文件的序列。然后复制/另存为到密钥目录。然后 systemctl restart bind9。
b) 使用 rndc 命令强制签名。请参阅 man rndc
rndc flush——刷新服务器的缓存。
rndc flushname name [view] - 从视图的 DNS 缓存中刷新给定的名称,如果适用,则从视图的名称服务器地址数据库、坏服务器缓存和 SERVFAIL 缓存中刷新给定的名称。
rndc flushtree name [view] - 从视图的 DNS 缓存、地址数据库、坏服务器缓存和 SERVFAIL 缓存中刷新给定名称及其所有子域。
托管密钥 (状态 | 刷新) [类 [视图]]
c) 上述命令与 rndc freeze 和 rndc thaw 结合使用效果似乎更好。首先使用 rndc freeze,发出上述命令,然后 rndc thaw。在 rndc thaw 之后,我重复发出 systemctl restart bind9。因为这样似乎效果更好。
7)使用以下方式检查 DNSSEC https://dnsviz.net/和https://dnssec-analyzer.verisignlabs.com/
当第一个区域是 DNSSEC 时,取消注释另一个区域并执行步骤。 编写过程比实际执行使 DNSSEC 工作的步骤要长得多,也困难得多。