Mac OS配置Dnsmasq+Dnscrypt来解决DNS污染问题

天朝的网络是越来越糟糕了,前阵子访问amazon s3域名居然返回了127.0.0.1,与其时不时被域名污染,不如自己打一个dns服务器。

解决方案就是用Dnsmasq+DnscryptDnsmasq负责监听本地53端口,将国内域名解析转发到国内的dns服务器,国外域名解析请求转发到Dnscrypt监听的端口,Dnscrypt就收到的DNS解析请求转发到国外的DNS服务器。

安装

1
2
brew install dnsmasq
brew install dnscrypt-proxy

配置

Dnsmasq

编辑配置文件

1
2
3
4
5
vim /usr/local/etc/dnsmasq.conf

no-resolv
conf-dir=/usr/local/etc/dnsmasq.d
server=127.0.0.1#5300

dnsmasq会将DNS解析请求转发到dnscrypt监听的5300端口

域名文件

执行下面脚本将域名DNS信息保存到dnsmasq文件夹

1
2
3
4
5
#!/bin/sh

/usr/bin/curl -o /usr/local/etc/dnsmasq.d/accelerated-domains.china.conf https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf

/usr/bin/curl -o /usr/local/etc/dnsmasq.d/dnsmasq_gfwlist https://cokebar.github.io/gfwlist2dnsmasq/dnsmasq_gfwlist.conf

这里用的是电信的DNS服务器,如果你是联通的网络,你可以执行下面的脚本将配置文件中的DNS服务器换成联通的

1
sed -i -e 's/114.114.114.114/221.6.4.66/g' /usr/local/etc/dnsmasq.d/accelerated-domains.china.conf 

Dnscrypt

Dnscrypt配置 vim /usr/local/etc/dnscrypt-proxy.toml

1
2
3
listen_addresses = ['127.0.0.1:5300', '[::1]:5300']
fallback_resolver = '221.6.4.66:53'
server_names = ['google', 'cloudflare', 'cloudflare-ipv6']

这里本来想配5353端口的,但发现这个端口被chrome占用了。

启动服务

1
2
sudo brew services restart dnsmasq
sudo brew services restart dnscrypt-proxy

重启后将本机DNS指向127.0.0.1即可。

更新日志

2020-05-14: 修改了文章错误