我刚刚在主 DNS 服务器上配置了 DNSSEC,并在从每个服务器到其他服务器进行 dig 测试时发现,虽然每个服务器都有 RRSIG 条目,但它们却是不同的。
这是预期的行为吗?我发现每个服务器的签名时间都不同,这是导致这种情况的原因吗?这还是个问题吗?
主结果:
example.com. 600 IN RRSIG NS 5 2 600 (
20181225201200 20181125193702 47985 example.com.
PNY/8BLZrBZ6Ax27MsblQg/QGPyIrS/uK/xAJY9DXw+s
nexXcvRXbEG+3E4yotVtay/ACN4+qMto4Ny87yyM7XFI
t0cBHnRx6n1DqU0jX0ARNWWDjaNRW/PlYrTKeqyXesVj
Cew44FJDXSd+65PxFlvQRDw6ZIdSbDYdXF1OYMw= )
从属结果:
example.com. 600 IN RRSIG NS 5 2 600 (
20181225193928 20181125191401 47985 example.com.
b034jrblNOi/Rmm7o34pRMLwH2Qa4dPuJ7ssTGWam/7z
b8JTaCtgKwrglzBXzcGaUfcxfCTNeBV0o6HXDvQ7kmx4
pZVt8Igvsw/ansIJOsvG+k+nS+ZHTACsgFaOgOegTnNb
+SMspj5n54s/mdMhAMreMKYXBPyVEfN0PFVv574= )
答案1
这是预料之中的:如果记录中发生任何变化,例如开始/结束日期,那么签名本身也会在计算时发生变化。在区域的不同名称服务器上可能会或可能不会看到不同的 RRSIG 报告,但这在很大程度上取决于设置,这里没有详细描述。
但确实发生了,请看下文。
相同的密钥(密钥标签34505
),但 5 个权威名称服务器中的每一个都提供了不同的 RRSIG(如果将 2 秒的休眠与签名起始时间戳进行比较,您会发现它们是在查询时在线计算的):
$ for ns in `dig NS cloudflare.com. +short` ; do echo -n $ns " " ; dig @$ns cloudflare.com. A +dnssec +short|grep ' 34505 '; sleep 2s; done
ns4.cloudflare.com. A 13 2 600 20190412164722 20190410144722 34505 cloudflare.com. i7WphUbWNj+0sfA0Mp3gLueKvgDvTDF+p4HuD/x+Weu1Cuglp7Cmx/v/ b0icIaYNsUKzm6OCgDnGQNH27SD8lg==
ns5.cloudflare.com. A 13 2 600 20190412164724 20190410144724 34505 cloudflare.com. L9/aRuVFtDunNqowLBgYZzahiWhTw7Y82LeEdseBL0ZgJlQSZj8YjB36 Dj89ozZ4KK6zRxPbFmM5VRwwV/rI3Q==
ns7.cloudflare.com. A 13 2 600 20190412164726 20190410144726 34505 cloudflare.com. khYsYMwEwH/2obxbibonU0gYveHknrtU+pZ6CFr7sLhV2Xv7/DaTKwM7 ABI2mxApVKlEhEz3rQG6XKg/6MPKFg==
ns6.cloudflare.com. A 13 2 600 20190412164728 20190410144728 34505 cloudflare.com. gJZXNyYpTe7WqjJwaA08M/2ysFkoHze5GEV/XpoWU/y6pOLmt4DhzL4I e/PuEvWQ6agBvtdqzGzSb10p6DQx1A==
ns3.cloudflare.com. A 13 2 600 20190412164730 20190410144730 34505 cloudflare.com. N0DwRjQKkagAoWn4WuFekvKhPL/juxzGrrn/lOEOpX7Sqmmt+ibaZJf/ YTsSFPtuCgI2hdMBvr/+b9B6rjv4Bg==
记录RRSIG
的签名是根据您看到的所有内容(当然除了签名本身)计算得出的,因此包括所有者(即左侧的域名)以及记录类型(NS
此处)、算法(5
即“椭圆曲线 [ECC]”)、标签数量(2
因为example.com
有 2 个标签)、原始 TTL(600
)、签名到期(20181225193928
)和签名开始(20181125191401
)、密钥标签(47985
)和签名者的姓名( )。加上正在签名的记录中的数据(即资源记录集example.com
的全部内容)example.com. NS
看RFC 4034定义 RRSIG 记录。
第 3.1 节显示:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type Covered | Algorithm | Labels |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Original TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Expiration |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Inception |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Tag | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Signer's Name /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Signature /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.1.8 规定:
Signature 字段包含涵盖
RRSIG RDATA(不包括 Signature 字段)和
由 RRSIG 所有者名称、RRSIG 类和 RRSIG Type
Covered 字段指定的 RRset 的加密签名。此字段的格式取决于
所使用的算法,这些格式在单独的配套文档中进行了描述。
答案2
如果这是一个简单的 BIND 主/从设置(我对这个问题的看法是,很可能是这种情况),执行 DNSSEC 的典型方式是签署主区域,然后仅传输(AXFR
/ IXFR
)已经签名的区域(区域传输将包括所有记录,也包括签名)从那里。
如果问题涉及的是这种类型的设置,那么RRSIG
在对主区域进行更改(例如新记录或刷新签名)之后,在其他名称服务器传输更新的区域之前,您只能在短时间内看到不同名称服务器上的不同记录。
如果不同的RRSIG
记录仍然存在,则服务器之间的区域传输设置方式可能存在问题(缺少通知?),这当然不仅会延迟记录的同步,RRSIG
还会延迟对区域的所有更改。(您可能希望比较SOA.SERIAL
值,例如dig +nssearch example.com
.)
正如 Patrick Mevzek 已经详细描述的那样,区域签名也存在根本不同的方法,例如直接在回答查询的名称服务器上动态生成签名,在这种情况下,来自不同服务器的不同签名可能是常态,而不仅仅是发生在上述过渡的“不同步”条件下。