如何在 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 名称服务器。

有很多替代程序可以实现这一点:,,,,bind9等。但似乎有很多方法可以手动管理,例如将文件标记nscd为只读,或编辑,或编辑。推荐哪一个?dnsmasqdnscache/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 并将内容添加到 hosts 行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 的一部分。

相关内容