设置 DNS 缓存的最佳方法?

29 performance dns proxy cache

为了加快 DNS 查找速度,我想安装一个 DNS 缓存或代理。

我可以看到至少三个我认为可以完成这项工作的程序:bind9、pdnsd 或 dnsmasq。

我想确保如果我安装其中一个,从性能或安全的角度来看,我不会让它配置不当。那么,人们会推荐什么,安装后是否应该立即进行任何配置更改?

小智 16

  1. 安装bind9
  2. 将 resolv.conf 指向 127.0.0.1

为此,请按照以下步骤操作:

安装 Bind9

  1. 打开“Ubuntu 软件中心”(应用程序->Ubuntu 软件中心)
  2. 搜索 bind9
  3. 选中以显示“技术项目”
  4. 标记 bind9 并安装它

更新 /etc/resolv.conf

  1. 打开网络管理器(系统->首选项->网络管理器)
  2. 找到您的连接并进行编辑(有线或无线)
  3. 切换“IPV4 配置”选项卡
  4. 在“DNS 服务器”字段上写 127.0.0.1

完成!

去测试

打开 gnome-terminal(应用程序 > 附件 > 终端)并输入

dig ubuntu.com 
Run Code Online (Sandbox Code Playgroud)

(如果没有,请按照 bind9 的说明安装 dnsutils 包)

检查最后的答案,例如:

我在 ubuntu.com 上的第一个查询

;; Query time: **209 msec**
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 22 12:20:12 2011
;; MSG SIZE  rcvd: 196
Run Code Online (Sandbox Code Playgroud)

我的第二个查询:

;; Query time: **0 msec**
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 22 12:18:23 2011
;; MSG SIZE  rcvd: 156
Run Code Online (Sandbox Code Playgroud)

服务器 127.0.0.1 意味着您正在本地解析。看一下查询时间(被**包围),第二个是缓存的。


dbl*_*ang 9

我会推荐 dnsmasq,

在这里看到一个不错的教程;http://embraceubuntu.com/2006/08/02/local-dns-cache-for-faster-browsing/

您可能想在这里阅读比较;

http://en.wikipedia.org/wiki/Comparison_of_DNS_server_software


小智 6

“为了加快 DNS 查找速度,我想安装一个 DNS 缓存或代理。”

好的。但也有更简单的方法。对于 OpenDNS/Google 缓存中已存在的名称,使用 OpenDNS 和/或 Google 名称服务器将比您自己的本地缓存更快。使用 208.67.222.222、208.67.220.220 和/或 8.8.8.8 作为名称服务几乎在所有时间都会更快。您可以测试它time nslookup www.google.com 208.67.222.222以测试其中一个 OpenDNS 名称服务器、time nslookup www.google.com 8.8.8.8Google 或time nslookup www.google.com 127.0.0.1本地缓存的速度。当我说更快时,我的意思是技术上更快,而不是快到一个人很容易注意到差异的程度。

“我可以看到至少三个我认为可以完成这项工作的程序:bind9、pdnsd 或 dnsmasq。”

你对 djbdns 的 dnscache 部分开放吗?下面的说明。虽然,它不会在没有补丁的情况下保存缓存......

sudo apt-get remove bind9 dnsmasq-base
sudo apt-get install djbdns dnscache-run
sudo killall -9 dnsmasq
sudo update-rc.d -f bind9 remove
Run Code Online (Sandbox Code Playgroud)

然后我们需要告诉系统使用我们的缓存。

sudo gedit /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

编辑文件,使其看起来像这个例子。此文件定义要使用的名称服务器、默认域和搜索后缀。搜索后缀使得仅使用完全限定域名的主机名部分运行查询成为可能。例如,当 example.com 是“search”参数的值时,'nslookup www' 会自动变为 'nslookup www.example.com'。

nameserver 127.0.0.1      # Use the local resolver first.
nameserver 208.67.222.222 # OpenDNS
nameserver 8.8.8.8        # Google
domain example.com
search example.com
Run Code Online (Sandbox Code Playgroud)

这有点花哨,但我们需要获得最新的根名称服务器。

sudo dnsip $(dnsqr ns . | sed -e '/answer/!d;s/\(.*\)NS \(.*\)/\2/') | sudo tee /etc/dnscache/root/servers/@
Run Code Online (Sandbox Code Playgroud)

我认为当我们使用 DHCP 时 resolv.conf 文件会被覆盖。我选择给自己一个静态 IP 地址并删除压缩它的软件,编辑接口文件以设置静态 IP 地址。但是,如果您愿意,可以尝试使用网络管理器。

sudo apt-get purge network-manager network-manager-gnome
sudo gedit /etc/network/interfaces
Run Code Online (Sandbox Code Playgroud)

我的接口文件如下所示,但请根据您的配置修改您的文件。

# Loopback
#
auto lo
iface lo inet loopback

# First network card (attached to NAT router, attached to cable internet)
#
auto eth0
iface eth0 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

现在让我们重新开始。

sudo reboot
Run Code Online (Sandbox Code Playgroud)

现在您正在使用本地解析器和最新的根服务器。但是您会注意到,如果您尝试使用 OpenDNS 和 Google 实际上响应速度更快(对于它们缓存中的名称,这是所有最受欢迎的域)。没有额外的配置可以使软件变得比它已经更安全。

  • 尽管@user8290 有一定道理,但我不会说使用 GoogleDNS 比使用本地 DNS 更快*。是的,谷歌缓存了结果,但是来吧 - 如果你的国际速度很糟糕,即使谷歌拥有世界上所有的 DNS 结果也没关系。本地网络通常有 100mbps+,因此向本地网络 dns 服务器询问答案至少比询问 8.8.8.8/8.8.4.4 快 10 倍(取决于您的国际速度)。当然,这是因为您将结果缓存在您的 DNS 服务器上。 (6认同)