OpenWrt配置双AdGuard实现DNS国内外分流
从去年改造了家里的网络到现在都很稳定,但是最近自建的出墙偶尔抽风,我一直使用的Hysteria
协议,发现有版本升级,于是升级了服务端,最后发现还是不丝滑,发现是我现在用的openwrt中的passwall插件不支持端口跳跃功能, 所以在恩山论坛找了个最新的OpenWrt固件进行安装,前段时间刷到了一个利用双AdguardHome分流国内外DNS解析,说这样可以防DNS污染。
反正这次要升级OpenWrt,所以就折腾了一下,为了保持以前服务正常使用,我直接重新启动了一个OpenWrt,等觉得没问题再销毁全部切换过来,本篇记录自己踩的坑,当水篇文章了~。
前提准备
1、 下载合适的Op固件:我使用的是恩山bleach1991的 高大全/精简版 Openwrt x86 6.1内核 软路由固件
2、 转换ESXI虚拟机磁盘软件:StarWind V2V Image Converter
开始配置
关于安装OpenWrt就不在这里列图了,安装好后建议先参考我另外的一篇文章扩容磁盘,OpenWrt 扩容磁盘方案及实操
我采用的是直接docker里面安装双AdguargHome,网上很多方案都是一个使用Op插件自带的AdguargHome,直接接管国内的DNS解析,为了维护方便,我直接全部使用docker启动。
规划如下:
- 国内组:udp:15335(DNS解析)、tcp:3001(Ad管理端)
- 国外组:udp:15336(DNS解析)、tcp:3002(Ad管理端)
安装国内组
- 进入OP管理端,依次点击:系统 -> TTYD 终端,进入shell窗口,直接运行下面docke命令启动国内组AdguardHome:
docker run --name adguardhome1 \
--restart unless-stopped\
-v /opt/adguardhome1/work:/opt/adguardhome/work\
-v /opt/adguardhome1/conf:/opt/adguardhome/conf\
-p 15335:53/udp\
-p 15335:53/tcp\
-p 3001:3000/tcp\
-d adguard/adguardhome:latest
- 启动成功后访问http://{OpenWrt地址}:3001,设置帐号密码,注意安装的时候网页管理端口保持3000、DNS服务保持53,因为容器映射的是这2个端口。
安装好登录AdguardHome,依次点击顶部导航设置 -> DNS设置 :
上游DNS服务填下面的:
tls://dns.pub tls://dns.alidns.com https://doh.pub/dns-query https://dns.pub/dns-query https://dns.alidns.com/dns-query
- 勾选并行请求
Bootstrap DNS 服务器填下面的:
你本地默认的运营商DNS(比如四川电信是:61.139.2.69) 114.114.114.114
- 如果没有使用Ipv6,勾选禁用Ipv6地址的解析
- DNS缓存配置根据自己分配的空间自行设置,我这里直接保持默认配置是4194304字节
- 点击保存即可
依次点击顶部导航 过滤器设置 -> DNS黑名单:
添加一些自己网上找的,这里列几个我用的,根据自己需要的选择:
easylistchina:https://easylist-downloads.adblockplus.org/easylistchina.txt adgk手机去广告:https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt anti-ad-easylis:https://anti-ad.net/easylist.txt 1024_hosts:https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts easyprivacy:https://easylist-downloads.adblockplus.org/easyprivacy.txt ad-wars:https://raw.githubusercontent.com/jdlingyu/ad-wars/master/hosts
- 不建议添加太多,越多误杀越严重!
至此国内组安装完毕。
安装国外组
- 进入OP管理端,依次点击:系统 -> TTYD 终端,进入shell窗口,直接运行下面docke命令启动国外组AdguardHome:
docker run --name adguardhome2 \
--restart unless-stopped\
-v /opt/adguardhome2/work:/opt/adguardhome/work\
-v /opt/adguardhome2/conf:/opt/adguardhome/conf\
-p 15336:53/udp\
-p 15336:53/tcp\
-p 3002:3000/tcp\
-d adguard/adguardhome:latest
- 启动成功后访问http://{OpenWrt地址}:3002,设置帐号密码,注意安装的时候网页管理端口保持3000、DNS服务保持53,因为容器映射的是这2个端口。
安装好登录AdguardHome,依次点击顶部导航设置 -> DNS设置 :
上游DNS服务填下面的:
tls://1.1.1.1/dns-query tls://dns.google https://dns.google/dns-query tls://dns11.quad9.net https://dns11.quad9.net/dns-query
- 勾选并行请求
Bootstrap DNS 服务器填下面的,如果上游DNS都是设置的加密DNS,这个可以不填:
9.9.9.10 8.8.8.8
- 如果没有使用Ipv6,勾选禁用Ipv6地址的解析
- DNS缓存配置根据自己分配的空间自行设置,我这里直接保持默认配置是4194304字节
- 点击保存即可
依次点击顶部导航 过滤器设置 -> DNS黑名单:
至此国外组安装完毕。
配置 OpenWrt
默认openwrt会使用自带的Dnsmasq进行解析,所以我们要直接把自带的DNS转发到我们的国内组,即127.0.0.1#15335
依次点击openwrt左侧导航栏:网络 -> DHCP/DNS,设置下面说的选项:
- 基本设置:DNS转发设置为
127.0.0.1#15335
,取消仅本地服务的√ - HOSTS和解析文件:忽略解析文件打√
- 高级设置:没有使用Ipv6就把禁止解析Ipv6 DNS记录打√,DNS查询缓存设置为0
配置 Passwall
我使用的passwall,对接其他出墙插件大致差不多的,大概就是把使用DNS的地方使用 127.0.0.1#15536
依次点击passwall -> 基本设置 -> DNS :
依次点击passwall -> 规则列表 -> 直连列表 :
配置主路由(可选)
如果你的OpenWrt只是作为旁路由运行,并且要想内网所有设置都先经过AdGuardHome进行过滤,那么还需要最后一步在分发DHCP的路由器上配置DNS,
我这里主路由是RouterOS,所以我使用winbox登录到RouterOS,将DNS修改为OpenWrt的IP地址,这样就可以让内网分配IP的设备都经过AdGuardHome。
效果一览
国内组:
国外组:
说到最后
其实AdGuardHome现在已经无法屏蔽了PC端的视频广告了,我找了很多规则都无法实现,但是手机端的广告是可以屏蔽的,不要对这个抱有太大的希望,做为一个DNS缓存器确实能达到很好的效果,这样做了国内外分流解析,真能防止DNS污染了吗???
或许你还有更好的方案请评论区留言一起探讨~~
参考链接
商业转载请联系作者获得授权,非商业转载请注明本文出处及文章链接