Dnsmasq部署DNS服务
http://www.thekelleys.org.uk/dnsmasq/doc.html
轻量级集合DNS,HTTP,TFTP软件。
用途 : 给本地局域网服务器提供:hosts主机记录,自定义域名,以及公网域名DNS转发解析。 集中配置内网服务器的hosts记录,替代内网bind服务功能。
yum -y install dnsmasq
修改配置文件
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak #重新填写配置文件 /etc/dnsmasq.conf ##侦听端口 port=53 ##服务启动用户及用户组 user=nobody group=nobody ##业务侦听地址 - interface 选项和 listen-address 选项可以同时使用 listen-address=10.10.10.10,127.0.0.1 ##不加载本地的 /etc/hosts 文件 no-hosts ##添加读取额外的 hosts 文件路径,可以多次指定。如果指定为目录,则读取目录中的所有文件。 addn-hosts=/data/dnsmasq/dnsmasq.hosts ##读取目录中的所有文件,文件更新将自动读取 hostsdir=/data/dnsmasq/dnsmasq.d ##记录dns查询日志,如果指定 log-queries=extra 那么在每行开始处都有额外的日志信息。 log-queries ##设置日志记录器 log-facility=/data/dnsmasq/log/dnsmasq.log ##异步log,缓解阻塞,提高性能。默认为5,最大100。 log-async=50 ##指定 EDNS.0 UDP 包的最大尺寸,默认为 RFC5625 推荐的 edns-packet-max=4096 edns-packet-max=4096 ##指定接口 interface=ens33 ##指定不提供 DHCP 或 TFTP 服务的接口,仅提供 DNS 服务。 no-dhcp-interface=ens33 ##指定 resolv-file 文件路径(上游DNS服务器),默认/etc/resolv.dnsmasq resolv-file=/data/dnsmasq/resolv.dnsmasq ##严格按照resolv.conf中的顺序进行查找 strict-order ##重启后清空缓存 clear-on-reload ##完整的域名才向上游服务器查找,如果仅仅是主机名仅查找hosts文件 domain-needed ##缓存条数,默认为150条,cache-size=0 禁用缓存。 cache-size=1000 ##不缓存未知域名缓存,默认情况下dnsmasq缓存未知域名并直接返回为客户端。 no-negcache ##指定DNS同属查询转发数量 dns-forward-max=1000
创建相关配置文件及文件夹
mkdir -p /data/dnsmasq/{dnsmasq.d,log}
touch /data/dnsmasq/{dnsmasq.hosts,resolv.dnsmasq}
填写DNS转发服务器(提供非自定义域名查询)
新增配置 /data/dnsmasq/resolv.dnsmasq
nameserver 223.5.5.5 nameserver 1.2.4.8
填写hosts主机记录(提供域名hosts记录集中查询) 新增配置 /data/dnsmasq/dnsmasq.hosts
10.10.10.10 test10 10.10.10.11 test11 10.10.10.12 test12
修改addn-hosts指定hosts记录文件,需重启dnsmasq,可以通过hostsdir指定域名配置文件添加解析。
填写自定义域名(提供内网自定义域名查询)
新增配置文件 /data/dnsmasq/dnsmasq.d/k8s.test (为方便区分不同的二级域名,建议按二级域名创建配置文件)
10.10.10.11 etcd.k8s.test
启动服务并设置开机启动
systemctl start dnsmasq.service systemctl enable dnsmasq.service
所有服务器设置DNS指向10.10.10.10 修改配置项 /etc/sysconfig/network-scripts/ifcfg-eth0
PEERDNS=no #拒绝接受DHCP分发的DNS配置 DNS1=10.10.10.10 #自定义配置DNS服务器地址
重启网络配置
systemctl restart network.service
其他DNS用法 添加指定泛域名通过指定DNS服务器解析(防域名被劫持,或者转发指定域名解析) 增加配置 /etc/dnsmasp.conf
server=/sohu.com/10.1.1.1
添加指定泛域名解析成指定IP (可用来屏蔽特定的域名) 增加配置 /etc/dnsmasp.conf
address=/baidu.com/2.2.2.2
添加A记录 增加配置 /etc/dnsmasp.conf
host-record=test13.test,10.10.10.13
添加别名记录(需要先添加源地址解析记录,在添加别名记录)
增加配置 /data/dnsmasq/dnsmasq.d/test.test
10.10.10.20 20.test.test
增加配置 /etc/dnsmasp.conf
cname=10.test.test,20.test.test
Dnsmasq性能优化
Bind不配合数据库的情况下,经常需要重新载入并读取配置文件,这是造成性能低下的原因。根据这点教训,我们可以考虑不读取/etc/hosts文件。而是另外指定一个在共享内存里的文件,比如/dev/shm/dnsrecord.txt ,这样就不费劲了,又由于内存的非持久性,重启就消失,可以定期同步硬盘上的某个内容到内存文件中。
具体实现步骤
配置dnsmasq
vim /etc/dnsmasq.conf
no-hosts addn-hosts=/dev/shm/dnsrecord.txt
解决同步问题
开机启动
echo "cat /etc/hosts > /dev/shm/dnsrecord.txt" >>/etc/rc.local # 定时同步内容 $ crontab -e */10 * * * * cat /etc/hosts > /dev/shm/dnsrecord.txt
Dnsmasq选择最快的上游DNS服务器 经常会有这样的情景,Dnsmasq服务器配了一堆上游服务器,转发本地的dns请求,缺省是Dnsmasq事实上是只挑了一个上游dns服务器来查询并转发结果,这样如果选错服务器的话会导致DNS响应变慢。
解决方法
vi /etc/dnsmasq.conf all-servers server=8.8.8.8 server=219.141.136.10
all-servers表示对以下设置的所有server发起查询,选择回应最快的一条作为查询结果返回。 上面我们设置了两个dns server,8.8.8.8(谷歌dns)和219.141.136.10(移动的dns),会同时查询这两个服务器,询问dns地址谁返回快就采用谁的结果。
dnsmasq-china-list项目
dnsmasq-china-list项目维护了一张国内常用但是通过国外DNS会解析错误的网站域名的列表,保证List中的国内域名全部走国内DNS服务器解析。
项目地址: https://github.com/felixonmars/dnsmasq-china-list
dnsmasq-china-list使用
取消dnsmasq.conf里conf-dir=/etc/dnsmasq.d这一行的注释
获取项目文件
git clone https://github.com/felixonmars/dnsmasq-china-list.git
将accelerated-domains.china.conf, bogus-nxdomain.china.conf,google.china.conf(可选)放到/etc/dnsmasq.d/目录下(如目录不存在则建立一个)。
将dnsmasq-update-china-list放到/usr/bin/,这是一个批量修改DNS服务器的工具(可选)。