DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
安装
在rhel7.4
上的安装yum install -y dnsmasq
, 完成dnsmasq的安装同时也推荐安装bind-utils
,这个包提供很多dns测试相关工具yum install -y bind-utils
, 如dig
、nslookup
配置启动
创建两个dnsmasq节点,一个做base dns
,一个做upper dns
base dns
的dnsmasq.conf
配置:1
2
3
4
5
6
7listen-address=172.17.0.2,127.0.0.1
# 配置上游DNS服务器
server=/dockxen.mydns/172.17.0.3
# 配置别名
cname=web.dockxen.dns,rhel82
在使用CNAME时,<target>
必须本机可访问对象,所以此处我将rhel82
放到/etc/hosts
中
base dns
的/etc/hosts
配置:1
2
3
4127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
172.17.0.2 dnsbase
192.168.1.82 rhel82
upper dns
配置:1
2
3
4
5
6address=/myweb.dockxen.mydns/192.168.1.82
listen-address=172.17.0.3,127.0.0.1
# The fields are <name>,<target>,<port>,<priority>,<weight>
srv-host=_ldap._tcp.dockxen.mydns,myweb.dockxen.mydns,8000,0,100
完成base dns
和upper dns
的配置后使用dnsmasq -d
debug模式启动,可以看到部分调试信息
测试验证
测试验证需要安装bind-utils
,测试中会用到其中的dig
和nslookup
,开始测试前修改/etc/resolv.conf
中的nameserver 172.17.0.2
验证A
1 | [root@dnclient /]# dig myweb.dockxen.mydns |
验证CNAME
1 | [root@dnclient /]# dig web.dockxen.dns |
验证SRV
1 | [root@dnclient /]# dig +noall +answer SRV _ldap._tcp.dockxen.mydns |
应用
etcd的服务发现
etcd各个节点之间的通讯使用域名方式访问,由于etcd节点ip地址可以以dhcp方式获取,每次etcd节点重启都有可能导致访问地址发生变化。若使用/etc/hosts
文件进行“域名-ip”映射涉及到/etc/hosts
文件同步分发问题,所以使用dnsmasq来完成“域名-ip”的映射。
关于etcd的服务发现配置请见参考&鸣谢