
DNSMasq
DNSMasq 主要用來解決内網 DNS 域名緩存、DHCP、網絡啟動和路由通告功能,本文主要是将 DNSMasq 作為内網 DNS 使用。安裝環境為 Ubuntu 16.04。
1. 安裝
Ubuntu 安裝很簡單,使用自帶的 APT 安裝就可以了。
$ sudo apt update
$ sudo apt install -y dnsmasq
完成後,需要對配置做些修改:
$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
$ sudo vim /etc/dnsmasq.conf
....
resolv-file=/etc/resolv.conf
strict-order
listen-address=<host-ip>
addn-hosts=/etc/hosts.dnsmasq
需要在配置檔案中新增四行,下面解釋一下新增這個四行的含義:
- resolv-file:從檔案讀取 DNSMasq 上遊的 DNS 伺服器配置。
- strict-order:resolv-file 檔案中如果指定了多個 DNS 伺服器,嚴格安裝 DNS 伺服器的先後順序查詢域名。
- listen-address:監聽位址,配置為本機 IP 即可。
- addn-hosts:從檔案讀取本地 DNS 域名和 IP 的對應關系,格式為
。其實可以把 IP 和域名的對應關系寫在 /etc/hosts 檔案中,DNSMasq 預設從那裡讀取,但如果要支援一個域名對應多個 IP,就必須使用 addn-hosts 選項了。<IP> <Domain name>
/etc/hosts.dnsmasq 檔案内容如下:
$ cat /etc/hosts.dnsmasq
10.0.0.1 blackpiglet.com
10.0.0.2 blackpiglet.com
10.0.0.3 blackpiglet.com
修改完成後重新開機 DNSMasq
$ sudo systemctl restart dnsmasq.service
2. resolv.conf 設定
上面提到了 DNSMasq 是從 /etc/resolv.conf 檔案中讀取上遊的 DNS 伺服器的,是以可能要修改該檔案,但是 Ubuntu 系統裡該檔案很可能是自動生成的,如果是自動生成的,系統重新開機,該檔案的修改内容無法儲存。
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.0.2
nameserver 114.114.114.114
nameserver 127.0.0.1
那麼我們該怎麼讓修改一直有效呢?這個檔案是由 resolvconf.service 來負責維護的,我們可以通過修改下面這個檔案來達到我們想要的效果:
$ cat /etc/resolvconf/resolv.conf.d/head
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.0.2
nameserver 114.114.114.114