从去年改造了家里的网络到现在都很稳定,但是最近自建的出墙偶尔抽风,我一直使用的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管理端)

安装国内组

  1. 进入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
  1. 启动成功后访问http://{OpenWrt地址}:3001,设置帐号密码,注意安装的时候网页管理端口保持3000、DNS服务保持53,因为容器映射的是这2个端口
  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字节
    • 点击保存即可
  3. 依次点击顶部导航 过滤器设置 -> 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
    • 不建议添加太多,越多误杀越严重!
    • OpenWrt配置双AdGuard实现DNS国内外分流

至此国内组安装完毕。

安装国外组

  1. 进入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
  1. 启动成功后访问http://{OpenWrt地址}:3002,设置帐号密码,注意安装的时候网页管理端口保持3000、DNS服务保持53,因为容器映射的是这2个端口
  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字节
    • 点击保存即可
  3. 依次点击顶部导航 过滤器设置 -> DNS黑名单:

    • 国外一般DNS不会污染,所以不需要添加其他的,就开启自带的AdGuard DNS filter即可。
    • OpenWrt配置双AdGuard实现DNS国内外分流

至此国外组安装完毕。

配置 OpenWrt

默认openwrt会使用自带的Dnsmasq进行解析,所以我们要直接把自带的DNS转发到我们的国内组,即127.0.0.1#15335

依次点击openwrt左侧导航栏:网络 -> DHCP/DNS,设置下面说的选项:

  1. 基本设置:DNS转发设置为 127.0.0.1#15335 ,取消仅本地服务的√
  2. HOSTS和解析文件:忽略解析文件打√
  3. 高级设置:没有使用Ipv6就把禁止解析Ipv6 DNS记录打√,DNS查询缓存设置为0

配置 Passwall

我使用的passwall,对接其他出墙插件大致差不多的,大概就是把使用DNS的地方使用 127.0.0.1#15536

依次点击passwall -> 基本设置 -> DNS :

  • 过滤模式:通过UDP请求DNS
  • 远程DNS:127.0.0.1#15336

    OpenWrt配置双AdGuard实现DNS国内外分流

依次点击passwall -> 规则列表 -> 直连列表 :

  • 将国内组使用到的上游DNS的域名IP都加入到直连里面,以免又跑到国外DNS去解析了。

    OpenWrt配置双AdGuard实现DNS国内外分流

配置主路由(可选)

如果你的OpenWrt只是作为旁路由运行,并且要想内网所有设置都先经过AdGuardHome进行过滤,那么还需要最后一步在分发DHCP的路由器上配置DNS,

我这里主路由是RouterOS,所以我使用winbox登录到RouterOS,将DNS修改为OpenWrt的IP地址,这样就可以让内网分配IP的设备都经过AdGuardHome。

效果一览

国内组:

OpenWrt配置双AdGuard实现DNS国内外分流

国外组:

OpenWrt配置双AdGuard实现DNS国内外分流

说到最后

其实AdGuardHome现在已经无法屏蔽了PC端的视频广告了,我找了很多规则都无法实现,但是手机端的广告是可以屏蔽的,不要对这个抱有太大的希望,做为一个DNS缓存器确实能达到很好的效果,这样做了国内外分流解析,真能防止DNS污染了吗???

或许你还有更好的方案请评论区留言一起探讨~~

参考链接

优雅的开启双AdGardHome的NDS+广告过滤功能

OpenWrt 扩容磁盘方案及实操

N1 X86 openwrt双AdGuardHome 配置对接SSRP PassWall以及DNS分流教程

Docker安装双AdGuardHome在OpenWrt分流解析DNS

文章目录