描述
alternate 插件能够将查询优先转发至其他上游服务器,具体取决于初始解析器提供的错误结果。它允许指定一组备用上游,如果插件链返回特定的错误消息,则将使用这些备用上游。alternate 插件利用forward 插件 (https://coredns.golang.ac.cn/plugins/forward) 来查询指定的上游。
alternate 插件仅支持 DNS 协议和无附加forward 参数的随机策略,因此以下指令将会失败
. {
forward . 8.8.8.8
alternate NXDOMAIN . tls://192.168.1.1:853 {
policy sequential
}
}
顾名思义,alternate 的目的是在(例如)所需的在上游不可用时提供备用。
语法
{
alternate [original] RCODE_1[,RCODE_2,RCODE_3...] . DNS_RESOLVERS
}
- original 是可选标志。如果设置了它,则 alternate 使用原始请求,而不是由其他插件更改后的请求
- RCODE 是错误响应代码的字符串表示形式。有效的 rcode 字符串的完整列表在 https://github.com/miekg/dns/blob/master/msg.go 中定义为
RcodeToString
,其中的示例包括SERVFAIL
、NXDOMAIN
和REFUSED
。至少需要一个 rcode,但可以指定多个 rcode,用逗号分隔。 - DNS_RESOLVERS 接受 dns 解析器列表。
范例
备用本地 DNS 服务器
以下内容指定将所有请求转发至 8.8.8.8。如果响应为 NXDOMAIN
,alternate 会将请求转发到 192.168.1.1:53,并相应地回复客户端。
. {
forward . 8.8.8.8
alternate NXDOMAIN . 192.168.1.1:53
log
}
备用使用原始请求
以下内容指定如果 8.8.8.8 响应为 NXDOMAIN
,则 original
查询将转发至 192.168.1.1:53。original
表示请求未经后续插件进行任何更改。如果没有 original
标志,备用将转发带 EDNS0 选项的请求(由 rewrite 设置)。
. {
forward . 8.8.8.8
rewrite edns0 local set 0xffee 0x61626364
alternate original NXDOMAIN . 192.168.1.1:53
log
}
多个备用
可以指定多个备用,只要它们提供唯一的错误响应即可。
. {
forward . 8.8.8.8
alternate NXDOMAIN . 192.168.1.1:53
alternate original SERVFAIL,REFUSED . 192.168.100.1:53
log
}