查詢路由

哪個外掛程式將處理查詢?

測驗時間,在以下 Corefile 中

. {
  proxy . 8.8.8.8:53
  file db.example.com
}

www.google.com 的查詢將由 *proxy* 或 *file* 外掛程式處理?答案如下。

這個 Corefile 實際上說了什麼?它指定了根 (.) 和其下 *所有* 內容(即所有網域名稱)的查詢,我們應該進入這個段落。

接下來,*所有* 查詢都應該轉發到 8.8.8.8:53。

然後,因為 *file* 外掛程式沒有指定應從 db.example.com 檔案中回答哪些區域,所以適用頂層的區域,即根 (.)。

因此,我們處於這樣一種情況:兩個外掛程式都會被呼叫處理相同的名稱(對於呼叫其他鏈接外掛程式的外掛程式來說,這完全有效)。

但是,在查詢得到回答且外掛程式執行完成後,*proxy* 不會呼叫 *file*,反之亦然。

為了了解這裡發生了什麼,我們必須查看外掛程式的順序

...
dnssec:dnssec
file:file
etcd:etcd
proxy:proxy
...

我們看到 *file* 排在第一位,而 *proxy* 則稍後出現。這表示在上面的範例中,*所有* 查詢都會路由到 *file* 外掛程式。它會很樂意使用 SERVFAIL 回答這些查詢,因為它可能無法在主要包含 *.example.com 名稱的檔案中找到 www.google.com

為了修正這個問題,我們應該將段落分開,或為 *file* 外掛程式指定 origin。

. {
  proxy . 8.8.8.8:53
  file db.example.com example.com
}

為了預先回應功能請求:是的,如果 CoreDNS 可以偵測並警告這個問題,那就太好了(它現在沒有這樣做)。

Miek Gieben
發佈日期:,並標記為 Corefile文件查詢路由,使用了 271 個字詞。