dnsmasq是一个适合小型网络的集成了DNS,DHCP,路由公告和网络启动的应用程序。它设计成轻量级和体量微小,适合资源有限的路由器和防火墙。它被广泛用于移动电话和热点以及虚拟网络。dnsmasq的DNS部分提供本地网络的DNS服务,同时将所有查询转发给上级DNS并缓存公共的记录。

这次部署Docker的网络环境,在测试环境中,为了能够解析主机,部署了dnsmasq来完成DNS功能。

安装和简单配置

安装dnsmasq

yum install dnsmasq

对于 CentOS 7,使用以下命令激活启动时启动:

systemctl enable dnsmasq.service

此时提示信息如下:

ln -s '/usr/lib/systemd/system/dnsmasq.service' '/etc/systemd/system/multi-user.target.wants/dnsmasq.service'

启动DNSmasq:

systemctl start dnsmasq.service

配置本机使用dnsmasq只需要修改 /etc/resolv.conf 设置

nameserver 127.0.0.1

所有dnsmasq相关的DNS解析都设置在 /etc/hosts 配置文件中,例如可以在该文件中添加

192.168.1.21 vms vms.huatai.me

则本机使用 dig vms.huatai.me 就可以查询出结果

;; ANSWER SECTION:
vms.huatai.me.        0    IN    A    192.168.1.21    

dnsmasq报错处理

虽然使用 dig vms.huatai.me 就可以查询出结果

;; ANSWER SECTION:
vms.huatai.me.        0    IN    A    192.168.1.21

但是遇到一个比较奇怪的问题,就是使用 host vms.huatai.me 命令来查询DNS结果,会出现如下报错

vms.huatai.me has address 192.168.1.21
Host vms.huatai.me not found: 5(REFUSED)
Host vms.huatai.me not found: 5(REFUSED)

并且,dnsmasq也不能查询非 /etc/hosts 中配置的DNS信息,例如转发给其他DNS查询www.google.com

以上问题是因为 dnsmasq 需要设置一个upstream server,这个配置可以在 /etc/dnsmasq.conf 中设置(参考 Dnsmasq on CentOS 6 for Filtering

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
resolv-file=/etc/resolv.dnsmasq

即配置 /etc/resolv.dnsmasq 内容如下(具体DNS服务器设置可根据需要设置,这里采用google提供的公共DNS):

nameserver 8.8.8.8

dnsmasq本地域名设置

以上设置虽然满足了查询 vms.huatai.me 这个域名,但是却会发现查询DNS的时候(命令 host vms.huatai.me ),很快返回 vms.huatai.me has address 192.168.1.21 ,但是却会卡住等待一会才返回终端提示符。这表明DNS查询也被转发到 upstream server 进行查询,直到返回结果为空。这个多余的upstream查询实际上影响了dnsmasq的性能。对于IDC内部的dnsmasq可能返回还比较快,但是对直接连接因特网的dnsmasq响应就会慢很多。

DNSmasq提供了一个 local 配置参数来指定本地域名,这样私有域名的查询只由DNSmasq答复,从 /etc/hosts 或 DHCP获得DNS解析记录(参考 Dnsmasq For Easy LAN Name Services

这里,我在 /etc/dnsmasq.conf 中添加设置:

# Add local-only domains here, queries in these domains are answered
# from /etc/hosts or DHCP only.
#local=/localnet/
local=/huatai.me/

另外有一个可选的 domain 配置用于DHCP主机具有FQDN,提供域名部分的”expand-hosts”。如果没有设置DHSP可不配置

参考