2010年12月9日星期四

Centos Linux 活用 dnsmasq 緩存加速本機及局網 DNS resolver 解拆 IP 地址速度

在慢不經意的網海世界流連閒遊, 經常都會發現瀏覽速度(或電郵伺服器)傳送會突然瞬間頓頓的, 當然網站伺服器及其網絡頻寬相關都排除後, 剩下唯一可能是路由器(或 DNS 伺服器)的問題, 尤其是現代的網頁內容極其「瘋」富, 一個網頁有十多個不同地址的 Flash 及廣告已是平常不過, 試難想像當眾多電腦(辦工室或教育機構)在繁忙時段要 DNS resolver 解拆 IP 地址時路由器(或 DNS 伺服器)所受到的壓力, 而且現今的大爺 ISP 電訊服務商還會玩 DNS 攔截過「淚」的把戲, 當然那 15ms~100ms 的回傳時間不筭怎麼樣, 但能夠為本機及相鄰局網電腦 DNS resolver 解拆地址提升速度(5ms內)也是不錯的。

Linux 應用軟體 dnsmasq 輕量而且可以提供簡易設定的 DNS 轉發(forwarder)及 DHCP 伺服器, 配置成為一個 DNS 緩存加速轉發機供應其他相鄰(及本機)電腦使用, Windows 及 Linux/Unix 或 MacOS 都可以同時得益, 亦減輕大量網絡交通時向上扒 DNS 的時間。

實機使用 CentOS 5.5 Linux, dnsmasq-2.45-1.1.el5_3.i386

設定 dnsmasq 配置緩存加速轉發(cache forwarder):
1. 安裝 dnsmasq, 以 root 系統管理員權限執行在線安裝指令
# yum install dnsmasq
其實 CentOS 一般安裝時已經預裝了 dnsmasq
2. 設定 dnsmasq
以 root 系統管理員權限編輯 /etc/dnsmasq.conf
新增一行, 使用本機 local loopback 監聽地址
listen-address=127.0.0.1

3. 新增一行, 停用無關的 DHCP 供應介面 eth0 裝置
no-dhcp-interface=eth0

4. 如果 DNS 轉發需要提供給其他相鄰局網電腦使用的話, 新增一行
interface=eth0

5. cache-size 的預設值只是 150, 修改增加 DNS 緩存數量 1000(最大上限是 10000), 新增一行
cache-size=1000

6. 設定使用本機 DNS 回傳解拆為先
以 root 系統管理員權限編輯 /etc/dhclient-eth0.conf
新增一行
prepend domain-name-servers 127.0.0.1;

7. 設定 DNS resolver 的服務地址(dnsmasq local loopback)
以 root 系統管理員權限編輯 /etc/resolv.conf
新增一行在首行(如圖)
127.0.0.1

8. 如果需要使用 google dns 的話, 可以加入 8.8.8.8 及 8.8.4.4
9. 如果使用其他局網電腦提供的 dnsmasq, 可以在首行加入其 ip 地址(如圖), 如果其電腦不存在(關機的話), 則會自動選用 127.0.0.1(dnsmasq local loopback)援存加速

由於 DNS 的 domain 地址保留時限是根據 domain 傳回的 TTL(Time To Live), 並不會永遠存留在 cache 中, 所有 cache 都會自動 expire 餘時過期的。

測試, 執行指令 dig google.com

回傳第一次時是正常向上扒 dns 解拆的時間(7Xms), 第二次則是緩存加速後的時間(1ms), 速度差別很大(雖然只是小小的數十個 ms, 如果眾多電腦在繁忙時段大量的話, 節省下的時間是十分可觀的)

備註:
如果 dnsmasq 架設是提供給局網其他相鄰電腦使用的話, 防火牆要開啟 port 53。