备用

源代码 首页

由 CoreDNS 维护

启用方式
alternate:github.com/coredns/alternate

alternate - 根据 RCODE 允许将查询重定向至备用上游

描述

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,其中的示例包括 SERVFAILNXDOMAINREFUSED。至少需要一个 rcode,但可以指定多个 rcode,用逗号分隔。
  • DNS_RESOLVERS 接受 dns 解析器列表。

范例

备用本地 DNS 服务器

以下内容指定将所有请求转发至 8.8.8.8。如果响应为 NXDOMAINalternate 会将请求转发到 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
}