当我们通过域名访问网络资源,比如说打开一个网页或者使用FTP服务时,系统需向DNSServer请求域名指向的IP地址。Windows系统默认地会将得到的结果缓存起来,以便下次再访问时直接使用,可以大大减少与DNSServer的交互。Ubuntu却是每次都向DNSServer请求,直接导致反应缓慢!不信?用 dig 命令验证一下即见分晓:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
klesh@ubuntu:~/Desktop$ dig yahoo.com

; <<>> DiG 9.5.0-P2 <<>> yahoo.com
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50317
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.com.            IN    A

;; ANSWER SECTION:
yahoo.com.        2917    IN    A    206.190.60.37
yahoo.com.        2917    IN    A    68.180.206.184

**;; Query time: 36 msec**
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 20 14:11:57 2008
;; MSG SIZE  rcvd: 59

其中粗体一行是查询得到结果所花费的时间,连续执行几次 dig 命令,会发现时间相当不稳定,时高时低,甚至有时要花好几千MS才能得到结果,firefox 浏览网页时感觉速度不如 windows 的症结就在这里。

幸运的是,这个问题也好解决,我们只需装个 dnsmasq 再稍微配置一下便能畅快冲浪鸟。

  1. 安装 dnsmasq 作为 DNSServer,在本机与真正的DNSServer之间作一个桥间,利用 dnsmasq 缓存功能提速。
1
sudo apt-get install dnsmasq
  1. 如果机器通过局域上网,IP地址/DNSServer信息是由DHCPServer分配,打开/etc/dhcp3/dhclient.conf 去掉下面这行的注释,以便在启用DHCP客户端时会将 dnsmasq 作为优先的 DNSServer

prepend domain-name-servers 127.0.0.1;

  1. 配置DNSServer /etc/resolv.conf  增加 nameserver 127.0.0.1  ,适用于固定IP的情况
1
2
3
4
# Generated by NetworkManager
nameserver 127.0.0.1
nameserver 61.144.56.100
nameserver 202.96.128.68

三步搞定,现在再次利用 dig 命令测试,同一域名第一次之后请求耗时稳定在1位数,再打开  firefox 浏览网页,可以感觉到明显的速度提升。