快速拥有自己的DNS服务

前段时间接到一个新的模块测试任务,模块的功能很明确,验证用户所使用的域名是否为用户拥有,方便后续域名审核功能。

模块的实现具体如下:

1.发送用户id、加速域名到本程序,获取到唯一的token
2.用户将token信息添加到加速域名解析的TXT记录中
3.调用查询接口,判断某加速域名是否属于该用户

分析模块实现逻辑后,必然想到测试过程中需要频繁修改用户域名信息,假如使用真实域名测试,频繁修改域名信息,需要一定的扩散时间,期间查询域名认证结果必然会返回认证失败,测试效率低,且测试结果可信度较低。另外也没有供测试使用的真实域名。为此只能另辟蹊径,寻找更好更便捷的测试方法。有幸了解了dnsmasq来模拟DNS服务功能的方法。

dnsmasq,它能提供类似DNS缓存的功能,可以用它来实现很强大的泛解析功能,并且用户可以自行配置修改完全模拟DNS服务器行为。有了此工具,只要将被测模块使用的dns机器调整为dnsmasq所安装机器,通过调整dnsmasq配置即可方便进行测试。

dnsmasq安装使用

dnsmasq安装较为简单,网上教程较多,现简要列下必要步骤(由于个人使用mac,所以介绍以mac为准):

  • 下载安装必要的Homebrew工具

  • 使用brew命令进行dnsmasq的安装:

    brew install dnsmasq
  • 安装后有如下显示:

==> Pouring dnsmasq-2.76.sierra.bottle.tar.gz
==> Caveats
To configure dnsmasq, copy the example configuration to /usr/local/etc/dnsmasq.conf
and edit to taste.

  cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

To have launchd start dnsmasq now and restart at startup:
  sudo brew services start dnsmasq
==> Summary
  /usr/local/Cellar/dnsmasq/2.76: 7 files, 504.7K
  • 根据提示,进行cp操作并进行启动操作

  • 配置dnsmasq.conf需要重点关注的配置项如下:

    resolv-file:表示 dnsmasq 会从这个指定的文件中寻找游 dns 服务器,一般指定/etc/resolv.conf,但前提是resolv.conf文件中需要将127.0.0.1添加到文件首行
      listen-address:表示生效IP,在使用时需要特别注意将要用的ip添加到其中,支持添加多个
      address:需要添加修改dns解析信息的域名
      txt-record:添加域名txt记录的标签
  • 配置示例如下:

resolv-file=/etc/resolv.conf
strict-order
addn-hosts=/etc/hosts
cache-size=1024
listen-address=127.0.0.1,192.168.1.102

address=/www.test.com/192.168.0.2
txt-record=www.test.com,"oss-domain-verfication=8ca471338f882dd2a47be67bce2d7824"
txt-record=www.test.com,"hello baby"
txt-record=www.test.com,"nos-domain-verfication=b42dfa180af100000157a322f71215b8"
txt-record=www.test.com,"a=0;b=2;c=3"
address=/test.163.com/192.168.0.5
txt-record=test.163.com,"nos-domain-verfication=a84206d90aa500000157daa5cdaf8b75"

上面的配置添加了两个域名信息,并分别添加了对应的txt记录。

  • 配置成功后,需要进行如下操作,清除dns缓存,确保配置生效
sudo launchctl stop homebrew.mxcl.dnsmasq

sudo launchctl start homebrew.mxcl.dnsmasq

sudo killall -HUP mDNSResponder
  • 配置完成后验证结果,使用dig命令查看对应txt记录如下:
liuchengdeMacBook-Pro:workspace cheng$ dig @127.0.0.1 test.163.com +short TXT
nos-domain-verfication=a84206d90aa500000157daa5cdaf8b75

测试过程中,只需要修改txt记录刷新缓存即可方便完成测试。

总结

上面讲到的dnsmasq用法是其中一个小功能而已,dnsmasq还有很多较为强大的功能有待进一步学习。

本文来自网易实践者社区,经作者刘成授权发布。