描述
alternate 外掛程式能夠根據初始解析器提供的錯誤結果,有選擇性地將查詢轉發到另一個上游伺服器。它允許指定一組替代的上游伺服器,當外掛程式鏈返回特定的錯誤訊息時,將使用這些上游伺服器。alternate 外掛程式利用 forward 外掛程式 (https://coredns.dev.org.tw/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
標誌,alternate 會轉發帶有 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
}