描述
每個進入 CoreDNS fanout 外掛程式的 DNS 查詢,都會被平行複製到每個列出的 IP (即 DNS 伺服器)。任何被查詢的 DNS 伺服器回傳的第一個非負回應,將會作為應用程式 DNS 請求的回應轉發。
語法
-
tls
CERT KEY CA 定義 TLS 連線的屬性。可以提供 0 到 3 個參數,其含義如下所述tls
- 不使用客戶端驗證,並使用系統 CA 來驗證伺服器憑證。tls
CA - 不使用客戶端驗證,並使用檔案 CA 來驗證伺服器憑證。tls
CERT KEY - 使用指定的憑證/金鑰對進行客戶端驗證。伺服器憑證會使用系統 CA 進行驗證。tls
CERT KEY CA - 使用指定的憑證/金鑰對進行客戶端驗證。伺服器憑證會使用指定的 CA 檔案進行驗證。
-
tls_servername
NAME 允許您在 TLS 配置中設定伺服器名稱;例如,9.9.9.9 需要將此設定為dns.quad9.net
。在此情況下,仍然允許使用多個上游伺服器,但它們必須使用相同的tls_servername
。例如,將 9.9.9.9 (QuadDNS) 與 1.1.1.1 (Cloudflare) 混合使用將無法運作。 -
worker-count
是每個請求的平行查詢數量。預設值等於 IP 清單的數量。僅在減少每個請求的平行查詢時使用。 -
policy
- 指定 DNS 伺服器選擇機制的策略。預設值為sequential
。sequential
- 根據 DNS 伺服器的順序依序選擇。weighted-random
- 根據weighted-random-server-count
和weighted-random-load-factor
參數隨機選擇 DNS 伺服器。
-
weighted-random-server-count
是要請求的 DNS 伺服器數量。預設值等於指定的 IP 數量。僅在weighted-random
策略下使用。 -
weighted-random-load-factor
- 選擇伺服器的機率。這會依照 IP 位址清單的順序指定,並取 1 到 100 之間的值。預設情況下,所有伺服器的機率均為 100。僅在weighted-random
策略下使用。 -
network
是一種特定的網路協定。可以是tcp
、udp
或tcp-tls
。 -
except
是一個以空格分隔的網域清單,用於排除代理。 -
except-file
是包含以換行符號分隔的網域清單的檔案路徑,用於排除代理。 -
attempt-count
是在將上游伺服器視為關閉之前,需要連線到上游伺服器的嘗試次數。如果為 0,則永遠不會將上游伺服器標記為關閉,且請求將在timeout
後結束。預設值為3
。 -
timeout
是請求的逾時時間。在此時間段之後,將停止嘗試從上游伺服器接收回應。預設值為30s
。 -
race
會優先處理第一個結果,無論它是否定結果還是標準 DNS 結果。
指標
如果已啟用監控 (透過 prometheus 外掛程式),則會匯出以下指標
coredns_fanout_request_duration_seconds{to}
- 每次上游互動的持續時間。coredns_fanout_request_count_total{to}
- 每次上游的查詢計數。coredns_fanout_response_rcode_count_total{to, rcode}
- 每次上游的 RCODE 計數。
其中 to
是上游伺服器之一 (來自組態的 TO),rcode
是從上游傳回的 RCODE。
範例
將 example.org.
內的所有請求代理到在不同埠上執行的名稱伺服器。從代理傳回的第一個肯定回應將作為結果提供。
example.org {
fanout . 127.0.0.1:9005 127.0.0.1:9006 127.0.0.1:9007 127.0.0.1:9008
}
透過 TCP 在三個解析器之間傳送平行請求,其中一個解析器具有 IPv6 位址。從代理傳回的第一個回應將作為結果提供。
. {
fanout . 10.0.0.10:53 10.0.0.11:1053 [2003::1]:53 {
network TCP
}
}
代理所有內容,但排除對 example.org
的請求
. {
fanout . 10.0.0.10:1234 {
except example.org
}
}
代理所有內容,但使用主機 resolv.conf
的名稱伺服器排除 example.org
. {
fanout . /etc/resolv.conf {
except example.org
}
}
使用 DNS-over-TLS 協定將所有請求代理到 9.9.9.9。請注意,如果想要運作的設定,tls-server
是強制性的,因為 9.9.9.9 無法在 TLS 協商中使用。
. {
fanout . tls://9.9.9.9 {
tls-server dns.quad9.net
}
}
透過 UDP 在五個解析器之間傳送平行請求,使用兩個工作程式,並且不嘗試重新連線。從代理傳回的第一個肯定回應將作為結果提供。
. {
fanout . 10.0.0.10:53 10.0.0.11:53 10.0.0.12:53 10.0.0.13:1053 10.0.0.14:1053 {
worker-count 2
}
}
已設定多個上游伺服器,但其中一個伺服器已關閉,查詢 non-existent
網域。如果啟用 race
,我們會快速收到 NXDOMAIN
結果,否則會在幾秒鐘後收到 "connection timed out"
結果。
. {
fanout . 10.0.0.10:53 10.0.0.11:53 10.0.0.12:53 10.0.0.13:1053 10.0.0.14:1053 {
race
}
}
在兩個隨機選擇的解析器之間傳送平行請求。請注意,127.0.0.1:9007
會被更頻繁地選擇,因為它具有最高的 weighted-random-load-factor
。
example.org {
fanout . 127.0.0.1:9005 127.0.0.1:9006 127.0.0.1:9007 {
policy weighted-random
weighted-random-server-count 2
weighted-random-load-factor 50 70 100
}
}
依序 (預設模式) 在三個解析器之間傳送平行請求。
example.org {
fanout . 127.0.0.1:9005 127.0.0.1:9006 127.0.0.1:9007 {
policy sequential
}
}
另請參閱
請參閱 fanout。