设置DNS缓存的最佳方法?


28

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

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

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


对于一个工作站,对不对?还是我们在说局域网/ ISP?

是的,这是为了加快单个工作站的速度,而不是为了局域网。

Answers:


15
  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(应用程序>附件> Terminal)并输入

dig ubuntu.com 

(如果没有,请按照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

我的第二个查询:

;; 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

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


谢谢,伊戈尔。我尝试了这种方法,它对于名称查找非常有效,但是它似乎无法缓存反向IP地址查找。我将如何使用bind9做到这一点?

这对我的设置没有任何作用。查询时间仍为
〜100ms

你们两个:如果它似乎不起作用,请检查哪个服务器挖掘表明它从中得到了答案。如果未显示127.0.0.1,则说明您没有正确设置。注意:对于不同版本的Ubuntu,设置resolv.conf的说明可能有所不同。
thomasrutter 2012年

因此,您正在GUI框中运行缓存名称服务器吗?是的,当然有可能。阅读本书的大多数ppl都可能安装了服务器-GUI是可选的。一个简单的sudo apt install bind9sudo nano /etc/resolv.conf应该作为替代添加到您的答案中。
bshea

我做了一切,但安装程序无法正常工作。我resolv.conf终于做到了127.0.0.1。这会失败吗?dig ubunut.com说“连接超时;无法访问任何服务器”
Satya Prakash

9

我会推荐dnsmasq,

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

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

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


我使用dnsmasq进行DNS缓存。还提供了来自/ etc / hosts和DHCP的本地映射(可以选择使用/ etc / ethers。)
BillThor 2011年

我尝试了dnsmasq,它与bind9一样可以缓存名称查找,但是它似乎也没有缓存IP地址查找。是否可以使用dnsmasq?

1
当心网络管理器每次启动时都会覆盖您的resolv.conf。
daithib8 2011年

6

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

好。但是,还有一种更简单的方法。对于OpenDNS / Google缓存中已经存在的名称,使用OpenDNS和/或Google域名服务器将比您自己的本地缓存更快。几乎在所有情况下,使用208.67.222.222、208.67.220.220和/或8.8.8.8作为命名服务都会​​更快。您可以在Google或您的本地缓存time nslookup www.google.com 208.67.222.222的OpenDNS名称服务器之一上进行测试,以测试速度。当我说得更快时,我指的是技术上更快,而并不是那么快,以至于人们很容易注意到差异。time nslookup www.google.com 8.8.8.8time 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

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

sudo gedit /etc/resolv.conf

编辑文件,使其看起来像此示例。该文件定义了要使用的名称服务器,默认域和搜索后缀。搜索后缀使仅使用完全限定域名的主机名部分运行查询成为可能。例如,当example.com是“搜索”参数的值时,“ 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

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

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

我认为使用DHCP时resolv.conf文件将被覆盖。我选择给自己一个静态IP地址,然后删除挤压该软件的软件,然后编辑interfaces文件以设置静态IP地址。但是,如果您愿意的话,可以尝试使用Network Manager。

sudo apt-get purge network-manager network-manager-gnome
sudo gedit /etc/network/interfaces

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

# 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

现在,让我们重新启动。

sudo reboot

现在,您正在使用本地解析器和最新的根服务器。但是您会注意到,如果您尝试使用OpenDNS和Google来回答实际上更快(针对其缓存中的名称,这是所有最受欢迎的域)。没有其他配置可以使软件变得更加安全。


谢谢克里斯托弗。您能解释一下为什么Google DNS比我的本地缓存快吗?我相信它的速度很快,但是一直到他们的服务器要比我的本地缓存快得多?
埃里克·约翰逊

因为很有可能已经有了答案,而不必再次查找。

@Christopher:但是,一旦您的本地缓存拥有了,就可以立即进行查找。如果您使用Google DNS,则每次查询都必须等待80毫秒。
Zan Lynx

@Zan Lynx是的..所以让您的本地缓存询问Google。呜呜!

6
尽管@ user8290有一点要说,但我不会说使用GoogleDNS 比本地DNS 更快。是的,google已经缓存了结果,但是请继续-如果您的国际速度很糟糕,即使Google拥有世界上所有的DNS结果也没关系。本地网络通常具有100mbps +,因此向本地网络dns服务器询问答案至少比询问8.8.8.8/8.8.4.4(取决于您的国际速度)快10倍。当然,这可以说是将结果缓存在DNS服务器上。
tftd

3

我正在使用“ dnscache ”(软件包“ dnscache-run”),这非常简单。无需配置任何内容。
它捕获DNS请求(端口53)并缓存响应,下一次Linux要求该域时,dnscache立即返回IP。
尽管可以更改两个参数来改进此程序:

echo 16000000 > /etc/sv/dnscache/env/CACHESIZE
echo 16777216 > /etc/sv/dnscache/env/DATALIMIT

0

无论使用哪种工具,请确保未在防火墙上启用端口53传入。您可能只想允许具有缓存出站访问权限的主机。

DNSMasq易于设置,并且有据可查。如果将其安装在防火墙上,请指定要绑定到的接口(Internet接口除外)。

绑定更难以配置,对于小型网络的缓存而言,绑定可能会过大。我相信默认配置仅是缓存。您可能要添加一个ACL,以限制可以使用您的服务器的地址。


0

dnscache-run软件包与使用桥接网络和dnsmasq的其他软件包(如libvirt)的冲突最少。

sudo apt-get install dnscache-run

该软件包将删除resolvconf(/etc/resolv.conf),您将需要使用/ etc / network / interfaces或网络管理器来查看您的配置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.