Linux dnsmasq 服務


在日常開發中,有這么一個需求:

大家在公司內網同一個網段下,一般情況上網會由網關(一般是路由器)的DHCP服務分配IP。公司內網里放了幾台服務器,分別配置成靜態IP,這些IP是DHCP配置時預留的。服務器上會放置一些文件共享,所以有個Samba服務器。也配置了一些wiki及git等服務。大家可以使用IP訪問這些服務。但難記,IP偶爾也會變,總歸不如域名方便。但要每個人都改 hosts 又很麻煩,而且變更起來就更麻煩了。

一直想在內網布置一個域名解析的服務器,但不知道怎么搞定。今天跟一位IT運維請教后,才恍然大悟。是自己一直想復雜了。

整個配置過程大概有這么幾步:

  1. 取內網的一台服務器,部署一個 dnsmasq 服務作域名解析(不使用其DHCP功能)。
  2. 把內網這些服務的 IP 到域名的映射,設置到 dnsmasq 的配置文件里。
  3. 在DHCP服務上,把默認的DNS地址改成內網的這台服務器IP地址。這樣在連網會由DHCP把IP和DNS這些設置分配給機器。

這樣就行了。

使用域名上網的過程是:

  1. 訪問一個域名,但本地 /hosts 里找不到。
  2. 找到DNS服務器,到DNS服務器上去找
  3. DNS 服務器接收到域名訪問,如果是本地配置好的,則可直接返回結果。如果本地未配置,則到 dnsmasq 配置的默認上一級 DNS 服務器上找。

dnsmasq 在 ubuntu 上的配置

/etc/dnsmasq.conf

修改幾個地方:

listen-address=127.0.0.1, 10.39.249.211

監聽這兩個IP上的收到DNS請求

cache-size=2048

設置緩存的大小。有了緩存,被緩存的域名會立即返回IP地址。這樣可以加速訪問。

address=/node0.cpv.org/192.168.1.230
address=/node1.cpv.org/192.168.1.231
address=/node2.cpv.org/192.168.1.232
address=/node3.cpv.org/192.168.1.233
address=/node4.cpv.org/192.168.1.234

設置局域網內的域名IP映射關系。

修改本機DNS服務地址

本機的 DNS 服務地址配成 127.0.0.1。/etc/network/interfaces 里加上這一句:

dns-nameservers 127.0.0.1

修改 dnsmasq 的上一級DNS服務地址

dnsmasq 默認會到 /etc/resolv.conf 里去找,但這個文件里放的也是本機的DNS服務地址。上面的修改,把本機所有dns請求從 127.0.0.1 轉到了 dnsmasq 上。

另外,dnsmasq 會讀 /var/run/dnsmasq/resolv.conf 這個文件的內容作為上一級DNS服務地址。這個文件是怎么生成的呢:resolvconf 啟動時,會調用一個 hook 腳本:/etc/resolvconf/update.d/dnsmasq,這個腳本生成 /var/run/dnsmasq/resolv.conf 文件。

我看了一下 /var/run/dnsmasq/resolv.conf 里面只有一句 nameserver 127.0.0.1。可能是 resolvconf 這邊的腳本沒有被執行。

/etc/default/dnsmasq 里面設置 IGNORE_RESOLVCONF=yes。這樣 dnsmasq 就不會去找 /var/run/dnsmasq/resolv.conf,而是直接去讀 resolv-file 指定的文件。

/etc/dnsmasq.conf 設置 resolv-file=/etc/resolv.dnsmasq

最后創建 /etc/resolv.dnsmasq 文件,並在其中指定上一級 DNS 服務器地址。

后面這個文件是配置 dnsmasq 的上一級DNS服務器地址:

nameserver 10.39.249.254
nameserver 114.114.114.114

參考鏈接

https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1090589
http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html
https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM