替代方案

原始碼 首頁

由 CoreDNS 維護

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

alternate - 允許根據 RCODE 將查詢重新導向至另一組上游伺服器

描述

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,例如 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 標誌,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
}