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 外掛程式,則將使用最後一個指定的外掛程式。

  • 區域 應簽署的區域。如果為空,則使用配置區塊中的區域。

  • key file 表示應從磁碟讀取 金鑰 檔案。當指定多個金鑰時,RRset 將使用所有金鑰進行簽署。可以使用 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} - 快取中的總元素,類型為「signature」。
  • coredns_dnssec_cache_hits_total{server} - 快取命中的計數器。
  • coredns_dnssec_cache_misses_total{server} - 快取未命中的計數器。

標籤 server 指示處理請求的伺服器,請參閱 metrics 外掛程式以了解詳細資訊。

範例

使用金鑰 “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
    }
}