使用 dnsmasq 保证本地 DNS 服务的稳定性

更新日期: 2015-12-12 阅读次数: 15430 分类: DNS

问题

机房内网的递归 DNS 解析服务器超负荷运行,不稳定,时常出现解析失败的问题。

优化 /etc/resolv.conf 的配置

options timeout:1
nameserver 114.114.114.114
nameserver 8.8.8.8

options timeout:1 这里增加的超时配置,覆盖了默认值 - 5秒,但是仍然达不到生产环境的需求。 毕竟一秒的延迟会极大的伤害用户体验。

所以尝试使用 dnsmasq。

dnsmasq

dnsmasq 能对多个 nameserver 发起查询请求,然后把最快的返回结果缓存到本地。

centos 下安装, 可以参考我的 dnsmasq 自动化安装脚本

默认安装的是 2.48 版本。

参考 Caching Nameserver using dnsmasq

如何检验 dnsmasq 的各项配置已生效

基本解析功能

dig sunzhongwei.com @127.0.0.1

缓存测试

time dig sunzhongwei.com @127.0.0.1

在部分递归出现问题的情况下,仍然能够解析未缓存的域名

思路:

  • /etc/resolv.conf 只保留 127.0.0.1 这一条配置
  • 使用 iptables,tc 之类的工具屏蔽前面部分递归 DNS 服务器的请求
  • 如果仍能够返回说明正常

如何使用 Docker centos container 测试自动化部署脚本

Docker 镜像文件到底有多大?

$ sudo docker pull centos:6
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              6                   510cf09a7986        3 weeks ago         202.6 MB

可见一个 centos 6 的镜像才 200M。

一个有趣的现象

sudo docker run -t -i centos:6 /bin/bash

登录镜像之后,安装的所有程序,在 exit 之后,再进去就会消失,很便于初始化测试环境啊,哈哈哈。

如何将本地文件复制到 docker container 中

sudo docker run -t -i -v /path/to/hostdir:/mnt $container /bin/bash
cp /mnt/sourcefile /path/to/destfile

在 docker 的 centos 6 镜像下,启动 dnsmasq 会报错

/etc/init.d/dnsmasq start

dnsmasq: setting capabilities failed: Operation not permitted

而在实体机上就不会有这个问题。可以看到,dnsmasq 默认是使用 nobody 用户起的服务

# ps axuw | grep dnsmasq
nobody   19846  0.0  0.0  11180   676 ?        S    16:56   0:00 /usr/sbin/dnsmasq
zhongwei 19937  0.0  0.0 103196   772 pts/1    S+   16:56   0:00 grep dnsmasq

参考 dnsmasq: setting capabilities failed: Operation not permitted 只要把配置文件 /etc/dnsmasq.conf 中的 user 改成 root 即可正常启动。 但是在生产环境中,这种做法就很危险。

参考

领取阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊, 查看更多联系方式。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。同时也欢迎关注我的微信公众号“大象工具”: 大象工具微信公众号

相关文章

谈笑风生

PowerShell

专业!

爱评论不评论

近期节日

2020年11月26日 感恩节
2020年12月01日 世界艾滋病日
2020年12月03日 国际残疾人日
2020年12月07日 大雪
2020年12月09日 "一二九"运动纪念日
2020年12月09日 世界足球日
2020年12月10日 世界人权日
2020年12月12日 西安事变纪念日
2020年12月13日 南京大屠杀
2020年12月20日 澳门回归日
2020年12月21日 国际篮球日
2020年12月21日 冬至
查看更多节日