如何修复我的 DNSSEC?我的 DNSSEC 一直无法正常工作,而且问题可能更加严重

如何修复我的 DNSSEC?我的 DNSSEC 一直无法正常工作,而且问题可能更加严重

我尝试使用 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

**当前图像

DNSVIZ

DNSSECANALYZER

旧图像 德斯维兹 dnssec 分析器.verisignlab

旧图像 https://dnssec-analyzer.verisignlabs.com/allenintech.com

dnsviz.net/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 工作的步骤要长得多,也困难得多。

相关内容