toby

mac os下使用dnsmasq搭建本地缓存服务器

最近访问国内网站非常的慢..让我一度以为我家里网络出了问题,清了浏览器dns缓存,禁用各种插件,清了系统dns缓存,未果...想了一下,把google dns卸下来,立马就解决了问题.看来问题出在dns解析这一块.但是不用google dns或者openDNS的话又很难忍受国内运营商dns劫持的问题,而且不用google dns我平时访问国外网站又有点慢的,有问题找G娘.

发现了可以用搭建本地dns缓存服务器的方式解决cdn解析错误的问题(国外dns解析返回的ip国内的国内网站的dns无法判断你是电信用户还是联通用户,就胡乱分配你一个服务器),所以如果是双线的话,就会有'访问慢'的问题,其实dns查询差别不大,就几十ms的事情,基本感觉不出来,慢就慢在线路分配这一块.那么思路就是制定一个分配表,国外的走国外dns,国内的老老实实走国内dns解析.dnsmasq就是用来解决这个问题的.

安装很简单,直接用brew install dnsmasq搞定,期间会自动去获取dnsmasq的pkg-config依赖,下载安装完之后,把/usr/local/opt/dnsmasq/dnsmasq.conf.example拷贝一份到/usr/local/etc/dnsmasq.conf,然后配置dnsmasq.conf添加规则,拷贝/usr/local/opt/dnsmasq/*.plist/Library/LaunchDaemons加入系统任务清单,launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist载入系统自启动任务,修改本地dns为127.0.0.1,搭建完成.重点是国内dns白名单的部署,这里https://github.com/felixonmars/dnsmasq-china-list有一份现成的了,安装过程参考readme,这里有几个点解释一下:

    # /usr/local/etc/dnsmasq.conf
    no-resolv 
    no-poll
    # 第一行跟第二行是让 dnsmasq 不要通过 /etc/resolv.conf 确定上游服务器,也不要检测 /etc/resolv.conf 的变化(因为我们就是要拿本机当服务器嘛)
    server=8.8.8.8
    server=8.8.4.4
    # 这里指定默认查询的上游服务器,比如google dns或者openDNS
    conf-dir=/etc/dnsmasq.d
    # 白名单列表,如果白名单太多的话,可以在dnsmasq.d这个文件夹里面新建列表保存

测试: dig www.taobao.com @8.8.8.8 +short以及dig www.taobao.com @127.0.0.1 +short对比返回的ip地址

清除mac os x 10.9下dns缓存: sudo killall -HUP mDNSResponder

参考来源:
https://wzyboy.im/post/874.html
http://shixf.com/mac-os-x-dnsmasq/
https://github.com/felixonmars/dnsmasq-china-list