如何在 Ubuntu 14.04 上執行本機快取 DNS 解析器?

如何在 Ubuntu 14.04 上執行本機快取 DNS 解析器?

我在 VPC 中的 AWS EC2 上執行 Ubuntu 14.04 執行個體。這些使用我們的 VPC 提供的名稱伺服器。進程的每個 DNS 查找都會傳送到 VPC 名稱伺服器。我們的進程會進行多次查找,有些會失敗,導致進程阻塞。

我希望透過在每台電腦上安裝本機快取 DNS 解析器來解決此問題。該解析器將偵聽127.0.0.1:53,為本機進程提供服務。解析器將列在 中/etc/resolv.conf,也就是我將使用nameserver 127.0.0.1透過 DHCP 動態提供的 VPC 名稱伺服器。

有很多替代程序可以做到這一點:bind9nscddnsmasqdnscache/etc/resolv.conf。推薦哪個?/etc/network/interfaces/etc/dhcp/dhclient.conf

我還有一個要求:本地解析器會將查找轉送到 VPC 名稱伺服器,這是我們值得信賴的 DNS 資訊權威。然而,我列出的程序似乎並非如此。相反,他們將查找轉發到預先配置的根名稱伺服器。

理論上,我可以透過自訂dhclient-scriptresolvconf或類似的東西來完成這項工作。我會新增一個鉤子,它會取得 DHCP 提供的名稱伺服器 IP,將其註入到本機 DNS 解析器的配置中,然後重新啟動本機 DNS 解析器守護程式。但這非常棘手,我想避免這樣做。 (Ubuntu 14.04 中的預設腳本似乎有一些內建的nscd和知識dnscache,並且可能做我想要的事情,但還不清楚。)

在 Ubuntu 14.04 上執行本機快取 DNS 解析器的「幸運」方式是什麼?特別是,如何使本機解析器轉送到預設 DHCP 名稱伺服器?

答案1

最簡單的方法可能是 nscd。

使用預設配置安裝 nscd。

更新 /etc/nsswitch.conf 並將其新增cachedns主機行。(編輯:這部分不適用於大多數 Linux 發行版中使用的 glibc,但在 fbsd 上需要)

hosts: files cache dns

測試

tcpdump -v -n 'port 53'
getent hosts superuser.com

您不需要破壞 /etc/resolve.conf 甚至捕獲 dhc​​p 解析器來更新 nscd 的上游。 nsswitch 將透過快取伺服器正確路由 gethost* 調用,因為它是 glibc 的一部分。

相關內容