(轉載)利用 Dnsmasq 搭建自己的 DNS 服務器

利用 Dnsmasq 搭建自己的 DNS 服務器

Oct 1st, 2012 | Comments

 

前言

最近新買了 iPad mini, 在不斷折騰的過程中發現一點讓我非常非常的無語… 還是與網絡有關, 那就是通常情況下, iPad mini 中的 App Store 連接速度那是相當相當相當的慢的, 慢到我打開 App Store 軟件的首頁需要登上 20~30s 纔會有可能訪問成功, 那麼下載一個應用的情況可想而知了. 因爲在編寫 wyatt_hosts 的時候, 也爲了解決在 iMac 上進行 Mac OS 更新慢的問題, 所以關於 iPad mini 基本上也就同樣的解決方法了.

在自己想到折騰一個 dnsmasq 之前, 也在網絡上搜索過其他的解決方案, 比如 V2EX DNS 可是對我來說, 在 iPad mini 上我也需要其他的比如 Google Drive 等也能夠快速的訪問, 而這些問題的解決辦法都在那個 hosts 文件中, 要是我能夠將 iPad mini 給越獄就最好了…

初認

由於 iPad mini 沒有越獄, 所以我現在能想到的辦法就只有自己搭建一臺 dns 服務器了, 在網絡上搜索 linux dns, mac os dns 很多情況下是使用 bind 9 的軟件, 當我閱讀完一些配置指南以後(例如), 說實話, 我嚇倒了 T.T 超級複雜…… 然後, 我在某一篇文章中看到另外一段話”使用 dnsmasq 做 dns 緩存”吸引過去了, 這才讓我去搜索了一下 dnsmasq, 哈哈, It is designed to provide DNS and, optionally, DHCP, to a small network. 這太棒了, 和我的目的一樣, bind 9 雖然是非常流行並且久經沙場的 dns 服務器, 同時這也意味着我需要爲那用不着的 20% 功能去折騰一個龐然大物嗎? 所以最後選擇了更加輕便的 dnsmasq.

安裝

在 *nix 下安裝軟件非常的方便, 因爲我是 Mac OS 所以先 brew search dnsm 搜索看看有沒有現成的, 果然找到, 接下來 brew install dnsmasq, 經過一系列腳本的安裝, 得到一段話:

To configure dnsmasq, copy the example configuration to /usr/local/etc/dnsmasq.conf and edit to taste.

cp /usr/local/Cellar/dnsmasq/2.61/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

To load dnsmasq automatically on startup, install and load the provided launchd item as follows:

sudo cp /usr/local/Cellar/dnsmasq/2.61/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

在 Mac OS 配置自啓動除非看了這文檔, 否則我還真會糊塗…

配置

看到一個 dnsmasq.conf 的文件了吧, 還是需要一點點配置的, 但非常非常的少.

  • 配置 dnsmasq 的上游 dns 服務器;(這是一個 dns 緩存, 那麼其還是需要有上游服務器進行一次域名解析的)
  • 配置系統的 dns 服務器, 將 dnsmasq 設置在首位尋找
  • 設置 dnsmasq 需要監聽的 IP 地址, 讓其他服務器能夠找到他

對應上面的三個事情, 只有 4 條配置即可, 不要打開 dnsmasq.conf 看到一大片內容就嚇到了.

  1. 首先配置 resolv-file=/etc/resolv.dnsmasq.conf 這個參數表示 dnsmasq 會從這個指定的文件中尋找上游 dns 服務器
  2. 將 127.0.0.1 添加到 /etc/resolv.conf 文件的第一行中, 讓系統首先尋找本地的 dnsmasq 服務器取消註釋的 strict-order 表示嚴格安裝 resolv-file 文件中的順序從上到下進行 DNS 解析, 直到第一個成功解析成功爲止
  3. 確保註釋掉 no-hosts, 默認情況下這是註釋掉的, dnsmasq 會首先尋找本地的 hosts 文件再去尋找緩存下來的域名, 最後去上游 dns 服務器尋找.
  4. 設置 listen-address=127.0.0.1, 表示這個 dnsmasq 本機自己使用有效.
  5. 這裏有一個坑 listen-addres , 我爬了好長時間才爬出來..

在這些配置中, listen-address 的參數坑了我好長時間, 最後才能明白如何配置. 例如, 我還需要讓局域網內其他的服務器也能夠首先訪問這個 dnsmasq 來進行域名解析如何配置? listen-address=192.168.1.100 (dnsmasq 所在服務器局域網內 ip), 好吧, 這樣你本機配置的 127.0.0.1 就沒效果了… 如果設置爲 listen-address=127.0.0.1 那局域網內其他服務器就無法訪問到這個 dnsmasq 了, 其實應該這樣設置 listen-address=192.168.1.100,127.0.0.1 這樣你就能雙方都滿足了, 不過需要注意的一點是, 如果 dnsmasq 所在服務器在局域網的 ip 地址變更了與配置文件中的不一樣, 那麼理所當然的再使用配置文件中的那個 ip, 局域網內其他服務器也就找不到這臺 dnsmasq ,也就無法利用本地的 dns 緩存了.

彙總

最後來彙總一下, 能夠快速的部署起來.

resolv.conf
1
2
# 讓操作系統去 127.0.0.1 找 dnsmasq
nameserver 127.0.0.1
resolv.dnsmasq.conf
1
2
3
4
# 讓 v2ex(這些) dns 的地址成爲 dnsmasq 的上游 DNS
nameserver 199.91.73.222
nameserver 8.8.8.8
nameserver 8.8.4.4
dnsmasq.conf
1
2
3
resolv-file=/etc/resolv.dnsmasq.conf
strict-order
listen-address=192.168.1.100,127.0.0.1

上面設置好以後, 讓我們把 dnsmasq 啓動起來吧:

  1. 手動啓動: sudo dnsmasq just it.
  2. Mac OS 開機自啓動, 這也是我現在設置的方式. 首先運行 brew info dnsmasq 查看軟件信息, 看到有一句話

    To load dnsmasq: sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

照做就好了, 注意 使用不同版本的 Homebrew 會略有不同, 在版本 0.9.4 的時候, 簡化了, 不需要自己去 copy 一個 Mac OS 下的 plist 文件了(具體答案可在 /usr/local/Library/Formula/dnsmasq.rb 中找到).

關閉

如果想關閉, 就按照 *nix 的常規用 ps ax | grep dns 找到 pid 然後 kill -9 [pid]就行, 因爲 -9 是 SIGKILL 信號. 同時如果想讓 dnsmasq 清理掉所有緩存的 dns 記錄, 發送一個 SIGHUP(1) 信號給 pid 就好 kill -1 [pid] 這些可通過 man dnsmasq 來看到.

測試

最後就是來測試測試是否起作用了. 這個最簡單啦, 直接使用 dig 命令吧, 執行大於 2 次, 查看其中返回的 “Query time: x msec” 的結果就好, 如果第二次以後 x=0, 那麼就配置成功了.

例子: dig google.com 查看詳細的結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
wyatt ~$ dig google.com
; <<>> DiG 9.7.3-P3 <<>> google.com.hk
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28003
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com.          IN  A
;; ANSWER SECTION:
google.com.       0   IN  A   74.125.235.131
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 22 22:49:42 2012
;; MSG SIZE  rcvd: 47

dig baidu.com +short 僅僅查看解析的 ip

1
2
3
220.181.111.85
220.181.111.86
123.125.114.144

將電腦開啓 dnsmasq, 然後將 iPad mini 連接進入局域網, 將 DNS 服務處第一個設置成 dnsmasq 服務器所在的 ip, 第二個設置成 V2EX 的, 第三個設置爲 8.8.8.8 (用英文,隔開). 這回, 從 App Store 下載應用的時候, 總算能夠看到明顯的進度條滾動了 T.T

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章