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> <Domain name>
。其實可以把 IP 和域名的對應關係寫在 /etc/hosts 文件中,DNSMasq 默認從那裏讀取,但如果要支持一個域名對應多個 IP,就必須使用 addn-hosts 選項了。
/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