我在 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 名稱伺服器。
有很多替代程序可以做到這一點:bind9
,nscd
,dnsmasq
,dnscache
等/etc/resolv.conf
。推薦哪個?/etc/network/interfaces
/etc/dhcp/dhclient.conf
我還有一個要求:本地解析器會將查找轉送到 VPC 名稱伺服器,這是我們值得信賴的 DNS 資訊權威。然而,我列出的程序似乎並非如此。相反,他們將查找轉發到預先配置的根名稱伺服器。
理論上,我可以透過自訂dhclient-script
、resolvconf
或類似的東西來完成這項工作。我會新增一個鉤子,它會取得 DHCP 提供的名稱伺服器 IP,將其註入到本機 DNS 解析器的配置中,然後重新啟動本機 DNS 解析器守護程式。但這非常棘手,我想避免這樣做。 (Ubuntu 14.04 中的預設腳本似乎有一些內建的nscd
和知識dnscache
,並且可能做我想要的事情,但還不清楚。)
在 Ubuntu 14.04 上執行本機快取 DNS 解析器的「幸運」方式是什麼?特別是,如何使本機解析器轉送到預設 DHCP 名稱伺服器?
答案1
最簡單的方法可能是 nscd。
使用預設配置安裝 nscd。
更新 /etc/nsswitch.conf 並將其新增cache
至dns
主機行。(編輯:這部分不適用於大多數 Linux 發行版中使用的 glibc,但在 fbsd 上需要)
hosts: files cache dns
測試
tcpdump -v -n 'port 53'
getent hosts superuser.com
您不需要破壞 /etc/resolve.conf 甚至捕獲 dhcp 解析器來更新 nscd 的上游。 nsswitch 將透過快取伺服器正確路由 gethost* 調用,因為它是 glibc 的一部分。