dnssec

源码

dnssec 能够对所提供的数据进行即时 DNSSEC 签名。

说明

使用 dnssec,任何尚未(或无法)进行 DNSSEC 的回复都会被即时签名。已实现带有 NSEC 黑谎言的经过验证的拒绝存在。推荐使用 ECDSA 作为算法,因为这会导致签名更小(与 RSA 相比)。不支持 NSEC3。

此插件每个服务器块只能使用一次。

语法

dnssec [ZONES... ] {
    key file KEY...
    cache_capacity CAPACITY
}

签名行为取决于指定的密钥。如果指定了多个密钥,其中至少有一个密钥设置了 SEP 位,且至少有一个密钥未设置 SEP 位,则签名将在分隔的 ZSK/KSK 模式下进行。DNSKEY 记录将使用已设置 SEP 位的所有密钥签名。所有其他记录将使用尚未设置 SEP 位的所有密钥签名。

在任何其他情况下,每个指定的密钥都将被视为 CSK(通用签名密钥),放弃 ZSK/KSK 分割。所有签名操作都在线完成。已实现带有 NSEC 黑谎言的经过验证的拒绝存在。推荐使用 ECDSA 作为算法,因为这会导致签名更小(与 RSA 相比)。不支持 NSEC3。

由于 dnssec 插件无法看到它签名的 RRSets 的原始 TTL,因此它将始终使用 3600 秒作为值。

如果在同一区域内指定了多个 dnssec 插件,则将使用最后指定的插件。

  • ZONES 应签名的区域。如果为空,则使用配置块中的区域。

  • key file 指示应从磁盘读取 KEY 文件。当指定多个密钥时,RRsets 将使用所有密钥签名。可以使用 dnssec-keygen 生成密钥:dnssec-keygen -a ECDSAP256SHA256 <zonename>。为区域 A 创建的密钥可以安全地用于区域 B。可以采用以下格式之一指定密钥文件的名称

    • 已生成密钥的基名 Kexample.org+013+45330
    • 已生成的公钥 Kexample.org+013+45330.key
    • 已生成的私钥 Kexample.org+013+45330.private
  • cache_capacity 指示缓存的容量。dnssec 插件使用缓存来存储 RRSIG。容量的默认值为 10000。

指标

如果已启用监视(通过 prometheus 插件),则会导出以下指标

  • coredns_dnssec_cache_entries{server, type} - 缓存中的总元素,类型为“签名”。
  • coredns_dnssec_cache_hits_total{server} - 缓存命中的计数器。
  • coredns_dnssec_cache_misses_total{server} - 缓存未命中的计数器。

标签 server 指示处理该请求的服务器,有关详细信息,请参见 指标 插件。

示例

使用密钥 “Kexample.org.+013+45330.key”为 example.org 签署回复。

example.org {
    dnssec {
        key file Kexample.org.+013+45330
    }
    whoami
}

使用密钥“Kcluster.local+013+45129.key”对 kubernetes 区域的响应进行签名。

cluster.local {
    kubernetes
    dnssec {
      key file Kcluster.local+013+45129
    }
}
此文件的官方来源