BIND 自 9.11.0 才會開始支援 EDNS Client Subnet

對 BIND (或 DNS) 稍有管理經驗的人,應該都知道 ACL 這個功能,他可以讓我們針對不同的 Resolver IP 回應不同的答案 (IP Address),所以諸如公司內網來查詢回內網IP,外網回 Internet IP 的設定,或特定來源 IP 回應特定的 IP ,甚至於 9.10 才開始加入的 geoip 功能,都是很好的 ACL 應用。

以往的使用者大多是會把 DNS Server 指到所屬的 ISP 提供的 DNS Server (大多數是不明不白的就用了 ISP 的 DNS Server),但是隨著越來越多的使用者用了 8.8.8.8 這個 Google DNS 當作第一選擇之後,之前我們使用 BIND + geoip 來做分流機制就不見得那麼準確了,加上 Google 又跑了 BGP,所以通常透過 Google DNS 來 query 的 IP 查出來都是屬於 – Mountain View, California, United States, North America,而非這些 IP 實際或相近的地理位置,導致於這個機制的運作效率越來越不好。

所幸 EDNS Client Subnet (ECS) 這個機制將要再 BIND 9.11.0 被支援了,雖然具體發佈的時間還不清楚,但至少讓人看到這問題被解決的曙光。有趣的是,從對岸網友那看來的消息是,這個 patch 早在 2014 年 8 月就已經 submit 進去了,所以有興趣玩的人也應該早就自己 patch 上去了。不過沒那個時間或自己沒能力 patch 的人還是等官方發佈比較妥當,免得到時候遇到非得更新不可的安全性問題時,還要自己生出 patch。

從 2014 年看到的 commit 說明裡,可以知道這個 ECS 支援會同時在 geoip 裡生效,也就是當你要使用 geoip 時,遇到有 ECS 的查詢時就會優先拿 ECS 來判斷而非來查詢的 DNS Server IP。所以,讓我們期待 9.11.0 的正式發佈吧。

  • 2016/06/27 更新,前幾天上去看,發現 BIND 的 9.11.0 已經出了 alpha 3 了,下載之後自己編譯了一下,看起來也可以正常的支援 EDNS + GeoIP,改天再來找個對外的 DNS 給弄上去,因為據說 Google 的 public DNS 早已經支援 EDNS 了,屆時 GeoDNS 的運作有效性相信又可以再回來了