前几天就连大名鼎鼎的114也挂了,看到业内QQ群里好多哥们一些只配置了一个可用DNS的业务纷纷躺枪。
这里简单回顾下DNS的工作原理。DNS(Domain Name System)系统顾名思义是用于将域名转换为IP的系统。当用户主机上的应用程序需要使用域名进行联网时发起一个DNS请求:
-
主机操作系统会检查自己的hosts缓存文件和本地DNS解析器缓存里有没有这个域名对应的IP。
-
如果上一步查询失败,则会根据适配器网卡中的DNS配置,去访问DNS服务器进行请求,若该域名属于该DNS管辖的区域,则直接返回结果,否则查询该DNS服务器自身的缓存。这个过程也叫作递归查询。
-
若上一步查询失败,则该DNS服务器会和上级DNS服务器之间展开迭代查询,直至查到最终结果后,由该DNS服务器将结果返回给用户。
虽然自建的软DNS并不适合大规模使用,但对于机房项目里小范围主机集群内使用,还是扛得住的。那么构建一个可以自动连接到多个上游DNS的内部DNS就很有必要。
另一方面,之前一个主机数量最多的项目里已经虚拟机+物理机50多台,主机名的解析是个潜在的问题。研发部门的同学之前已经提过,因为我们没有做内部的主机名解析导致出现问题了,当时暂时写入/etc/hosts文件临时解决了。但作为维护人员,从长远看这是个需要考虑的问题,所有主机的hosts文件都手动写死?那么这个项目里新增主机的时候会很痛苦,需要每台机器上都添加一条解析记录。通过自动化工具批量修改或许能缓解一下,但总是差点意思。
本文使用Dnsmasq提供的DNS缓存功能来实现内网DNS。(当然他还支持DHCP、路由广播、网络启动,这里暂时用不到)。当接收到一个DNS请求时,在默认配置下就像普通主机一样,Dnsmasq首先会查找/etc/hosts这个文件,然后查找/etc/resolv.conf中定义的外部DNS。那么,在DNS服务器的/etc/hosts文件中加入本地内网服务器的解析列表共享出去,就可以解决内网服务器之间主机名解析的问题。同时,Dnsmasq可以支持配置上游DNS为多个,从而规避部分机器仅设置了单个DNS导致的偶然突发情况。这种服务中转的工作思路很眼熟,没错,和NTP中转是一个套路~
安装
安装过程很简单,一条在线安装命令就可以搞定:
yum install dnsmasq
配置
Dnsmasq的默认配置文件是/etc/dnsmasq.conf,初始状态下其实算是空配置。
编辑配置文件,修改添加下属内容:
# 不使用默认的解析文件 # 默认的解析文件/etc/resolv.conf只允许填写3个DNS, # 这是安装系统之前resolv.h里写死的 resolv-file=/etc/resolv.dnsmasq.conf # 设置内网主机的解析列表 # 我们尽可能不使用默认文件,从而不影响Dnsmasq机器自身的工作 addn-hosts=/etc/dnsmasq.host # 指定监听地址,防止监听不必要的IP,比如外网IP # 同时需要指定本地监听,避免造成本机功能异常 listen-address=192.168.137.142,127.0.0.1
编辑完配置文件后,运行语法检查命令确保语法正确:
dnsmasq -test
注意,无回显即表示语法无误。此时记得手动关闭测试进程,以免待会儿正式开启服务时出现端口占用:
ps -ef | grep dnsmasq kill -9 XXX
为Dnsmasq添加上游DNS服务器,这里我们选择一些常见比较稳定的DNS服务器:
vim /etc/resolv.dnsmasq.conf # 通用DNS nameserver 114.114.114.114 # 百度DNS nameserver 180.76.76.76 # 阿里DNS nameserver 223.5.5.5 # 腾讯DNS nameserver 119.29.29.29 # 谷歌DNS nameserver 8.8.8.8
为Dnsmasq添加本地内网主机解析列表,将本地项目的几十台机器的主机名和IP对应关系写入:
vim /etc/dnsmasq.host 10.0.1.101 vm_test1.localdomain 10.0.1.102 vm_test2.localdomain 10.0.1.103 vm_test3.localdomain
测试验证
运行启动服务:
systemctl enable dnsmasq systemctl start dnsmasq
可以看到53端口已处于监听:
在测试机上测试域名解析,可以正常解析:
查看转发日志,发现由于我们没有配置严格的从上往下查询顺序,所以Dnsmasq在遇到不确定的域名(这里故意输错了一个不存在的域名www.qq,com)时会对上游DNS进行群发,符合我们的要求,可以避免单个DNS服务提供商的突发故障:
评论列表,共 0 条评论
暂无评论