最近感觉国内DNS污染有点严重,国外DNS在国内用又容易水土不服,既然如此,可以选择国外网站走海外DNS,大陆网站走大陆DNS的方案。
而且我们还可以在此基础上,用AdguardHome搭建私有DNS,顺带屏蔽广告。
既然如此,就需要两台VPS,一台大陆机,一台海外机,分别解析大陆网站和海外网站。
我这里用的是我两台腾讯云机器,一台在大陆,一台在香港。
以下步骤需要在大陆机和海外机两台机都进行,即在两台机各搭建一个AdguardHome
这里我使用的是官方的一键脚本,如果使用docker的话管理起来会更加方便,这里就自行选择了。
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh
在执行完成后,访问服务器的3000端口,就可以看见管理界面了。
完成配置向导后来到主界面
国内服务器可以使用腾讯云的DNS
https://sm2.doh.pub/dns-query
国外服务器可以用cf或者谷歌的DNS
https://dns.cloudflare.com/dns-query https://dns.google/dns-query
Bootstrap DNS 服务器可以选择114.114.114.114或者223.5.5.5 海外机的话用谷歌的8.8.8.8和cf的1.1.1.1也行
记得将[使用客户端的子网地址(EDNS)]打开,可以提升解析质量
在[过滤器]-[封锁清单]中配置广告屏蔽规则。
我在这里分享下我使用的
1.EasyList China
https://easylist-downloads.adblockplus.org/easylistchina.txt
2.CJX’s Annoyance List
https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt
3.EasyPrivacy
https://easylist-downloads.adblockplus.org/easyprivacy.txt
4.I don’t care about cookies
https://www.i-dont-care-about-cookies.eu/abp/
5.EasyList
https://easylist-downloads.adblockplus.org/easylist.txt
Adguard推荐的广告拦截器也有很多不错的,请根据个人喜好进行调整。
广告规则在精不在多,太多的话可能导致正常的使用都出现问题。
也可根据国内和国外两台机进行调整,国内机侧重中国网站广告屏蔽,海外机侧重海外网站屏蔽。
在[设置]-[加密]中启用加密
之后在DNS服务器中输入解析到这个服务器的域名
端口都可以不理会,不过如果你的443端口被Nginx啥的占用的话,也可以改成其他端口,例如我改成了1599端口
之后填入该域名的证书即可,这里我用的是免费letsencrypt证书,当然也可以去腾讯云,阿里云等申请免费亚洲诚信证书
至此,DNS的搭建正式完成了,接下来使用即可
在adguardhome的[设置向导]中显示了你的DNS地址
这里我使用的是HTTPS开头的doh地址,原因很简单,HTTPS流量好伪装。
上文讲了,我要国内网站用国内DNS,海外网站用海外DNS,即国内外分流。
这里我选择的是本地分流,使用的工具是v2ray,v2ray内核原版就支持DNS分流。不过像我这样的懒人,手写配置文件是不可能的,直接可以用带gui界面的软件解决。
安卓端我使用的是anxray,一款好用的基于xray内核的代理工具
安卓端设置参考(鬼晓得为啥图是黑白的,反正能看就行)
【远程DNS】为解析海外网站的DNS
【直连DNS】为解析国内网站的DNS
通过【域名重写】将DOH的域名提前解析好,以免开启代理后因为无法解析DOH域名而导致DNS服务无法使用
Windows端我使用的是qv2ray
海外DNS直接添加即可
国内DNS勾选详细设置 在【域名】中填入geosite:cn 在【期待IP】中填入geoip:cn
Winwos端设置参考
DNS流量伪装
这文写完没多久我就发现我的DOT端口被墙了,后来查证发现gfw好像对DNS的审查也变严格了。
既然如此的话,将DNS流量伪装成HTTPS正常访问应该就没有问题了
在宝塔创建Nginx网站后,在网站配置文件中填入下列内容
location /path { proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_buffering off; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://127.0.0.1:doh监听的端口/dns-query; } location /{ rewrite ^/(.*) https://伪装站的域名/$1 redirect; }
path可以改成自己喜欢的,当访问https://域名/path时会分流至doh,而当访问https://域名/时则会跳转到伪装站,隐蔽性大大提升。
本人写了一篇本文的重写版【自建无污染DNS,解决DNS污染网站无法访问】,建议阅读重写后的版本。