说明
触及 CoreDNS fanout 插件的每个传入 DNS 查询都将并行复制到每个已列出的 IP(即 DNS 服务器)。从任何查询的 DNS 服务器收到的第一个非负面响应将作为应用程序 DNS 请求的响应转发。
语法
-
tls
CERT KEY CA 定义 TLS 连接的 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
是必须的,因为无法在 TLS 协商中使用 9.9.9.9。
. {
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
}
}
配置了多个上游服务器,但其中一个服务器已关闭,查询一个 不存在
的域名。如果启用 race
,我们将很快得到 NXDOMAIN
结果,否则我们将在几秒钟内得到 "连接超时"
结果。
. {
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。