原文:https://rxclc.top/index.php/archives/5/

 

文章太长不想看,觉得设置很麻烦?
可以看看mosdns,只需简单几步便可同时搞定国内外分流解析加速和广告过滤
本文参考自 Flippy 的双 ADG 教程,但是 F 大好像没有博客,贴一个Flippy的TG群
开始之前大家可以去这个网站,测试一下不使用广告屏蔽插件的得分.(别忘了关闭浏览器广告屏蔽插件,或者路由上的广告屏蔽插件.)
然后再测试开启之后的得分,或者测试 SSRP 和 Passwall 自带广告屏蔽的得分.
至于对比结果,嘿嘿嘿,其实没几分的差距.
其实真要去广告还是得看浏览器插件,博主自己使用效果最好的应该是 uBlock Origin.
但毕竟只能在浏览器上使用,所以软路由上的广告屏蔽还是有其存在意义的,比如部分APP的启动广告!

 

注意事项

 

 

  • 保证有足够的空间拉取镜像
  • 路由器需要开启大陆白名单代理拉取镜像,走代理拉取镜像速度更快
  • 镜像拉取成功之后关闭 SSRP/Passwall, 防止创建第二个容器时出现端口被占用的情况
  • 如果在使用F大的固件中出现网络崩溃的情况,可以尝试去这里下载另一位网友使用 F 大内核和官方 OpenWrt 打包的固件
  • 如果使用 DOT 请确认 853 端口是否代理,SSRP 代理的常用端口中不包括 853 现在有了
  • WAN/LAN 的自定义DNS留空

上面推荐的固件只支持 Amlogic S9xxx 系列的 ARM 盒子!
默认 IP: 192.168.1.1
默认账号: root
默认密码: password
安装命令: openwrt-install
更新命令: openwrt-update

拉取镜像

docker pull adguard/adguardhome:latest

这条命令会拉取最新的稳定版镜像.
之后需要为 AdGuardHome 的数据配置持久化创建文件夹,可以去系统挂载点查看,选一个最大的挂载点创建文件夹即可.

F大的固件请不要自己修改挂载点,Docker 默认在/mnt/mmcblk2p4/

不要在 /tmp 目录下创建,这个是临时目录重启后会删除!
因为是双 AdGuardHome, 所以需要两个工作目录和配置文件夹.
mkdir /mnt/mmcblk2p4/AdGuardHome F大固件已经默认有这个文件夹了 

mkdir /mnt/mmcblk2p4/AdGuardHome/workdir1
mkdir /mnt/mmcblk2p4/AdGuardHome/workdir2
mkdir /mnt/mmcblk2p4/AdGuardHome/confdir1
mkdir /mnt/mmcblk2p4/AdGuardHome/confdir2

容器创建

国内AdGuardHome

 

以下为第一个容器的创建命令,创建成功后前往浏览器输入路由器的 ip:3000 进行配置.

 

docker run --name adguardhome1 \
    -v /mnt/mmcblk2p4/AdGuardHome/workdir1:/opt/adguardhome/work \
    -v /mnt/mmcblk2p4/AdGuardHome/confdir1:/opt/adguardhome/conf \
    --net=host \
    --restart=always \
    -d adguard/adguardhome:latest

 

初始化配置很简单,只要注意网页管理界面端口填写 3001,DNS 服务器端口填写 5334,防止冲突即可.
AdGuardHome 的默认网页管理入口是 3000,如果不修改,创建第二个容器会出现问题.

AdGuardHome初始化设置.png 

国外AdGuardHome

 

以下是第二个容器的创建命令,网页管理界面入口和第一个相同.
进入初始化配置时网页管理页面端口改成 3002 即可.

 

docker run --name adguardhome2 \
    -v /mnt/mmcblk2p4/AdGuardHome/workdir2:/opt/adguardhome/work \
    -v /mnt/mmcblk2p4/AdGuardHome/confdir2:/opt/adguardhome/conf \
    --net=host \
    --restart=always \
    -d adguard/adguardhome:latest

 

初始化配置 DNS 服务器端口需要注意: 

  • 如果使用 SSRP/HelloWorld,那么 DNS 服务器端口填写 5335
  • 如果使用 Passwall,那么 DNS 服务器端口填写 7913

配置与使用

当两个容器都创建成功,并且可以正常进入,就可以开始配置.
上游 DNS 服务器一般填写运营商DNS和公共DNS即可,如果怕运营商劫持或者DNS污染,可以使用公共的DoH/DoT.(现在大部分地区的主流运营商都很少搞这些花里胡哨的,当然如果国外网站不算的话)
如果上游 DNS 填写了 DoT/DoH 那就必须填写 Bootstrap DNS 服务器.

tls://dns.alidns.com
tls://dot.pub

AdGuardHome 配置完成后再对 OpenWrt 进行配置 

  • 网络 ➡ DHCP/DNS ➡ 常规设置 ➡ DNS转发填写 127.0.0.1#5334
  • 网络 ➡ DHCP/DNS ➡ HOSTS和解析文件 ➡ 勾选忽略解析文件
  • 网络 ➡ DHCP/DNS ➡ 高级设置 ➡ DNS查询缓存的大小填写 0(使用 AdGuradHome 的缓存,这一步可有可无)
    下面是一些针对 AdGuardHome 的额外修改建议,可以改善日常使用体验,当然不改也不会影响正常使用.

    以下步骤皆在AdGuardHome内进行
  • 设置 ➡ 常规设置 ➡ 日志配置 ➡ 24小时 / 7天
  • 设置 ➡ DNS设置 ➡ 上游 DNS 服务器 ➡ 并行请求
  • 设置 ➡ DNS设置 ➡ 速度限制建议 100 (如无特殊需求建议勾选禁用IPv6)
  • 设置 ➡ DNS设置 ➡ DNS缓存配置 ➡ 最小TTL值 1800 / 最大TTL值 3600

默认储存90天的日志,会占用过多的空间.
不限制 DNS 查询,有时候会出现崩溃,可以稍微改大点,每个客户端限制每秒查 100 次.
但是这里是作为DNS上游, 所以这里的限制每个客户端DNS查询次数是指OpenWrt的查询(局域网内终端指向OpenWrt的设备也包括在内)
默认的缓存大小是 4MB,不建议修改,4MB 已经能够存储N多记录了.
TTL 值是秒,如果设置的太久,有些网站更换 IP 后依旧会连接原来的 IP 地址,出现无法访问的情况。
(其实设置为一天也行, 最大TTL值填86400)

 

搭配SSRP

这里和之前SmartDNS的搭配类似.

  • 前往访问控制中,将下方 IP 和域名分别加入直连和代理列表
  • DNS 解析方式选择使用本机端口为5335的 DNS 服务
  • 最后保存 & 应用即可

 

其实不填写下面这些也没什么大问题,就可能、偶尔会有一些网站解析存在问题. 概率很小就是了, 因为到SSRP那的时候它会自己判断的

 

填写你在国内上游 DNS 服务器添加的常规 DNS, 比如 223.5.5.5
以及在 Bootstrap DNS 服务器中填写的服务器
如果你是完全按照本教程来可以填写以下 IP
223.5.5.5
119.29.29.29
运营商 DNS

smartdns搭配ssrp.png

 

搭配Passwall

这里的操作也差不多

  • 把对应域名和 IP 加入 passwall 的直连/代理名单管理 (passwall 自带的列表已经包含很多 IP 和域名,只需要添加一部分)
  • 在 DNS 中过滤模式选择自定义DNS(UDP)自定义DNS 填写 127.0.0.1#7913
  • 最后还是那一步 保存 & 应用

 

其实不填写下面这些也没什么大问题,就可能、偶尔会有一些网站解析存在问题. 概率很小就是了,因为到SSRP那的时候它会自己判断的

 

dns.alidns.com
dot.pub

 

广告屏蔽规则推荐

广告屏蔽规则推荐使用 neodevhost
它整合了 AdGuard、Anti-ad 等规则,具体可看该项目的 Github仓库

一些疑惑

为什么推荐使用并行请求

负载均衡和并行请求,大家看 AdGuardHome 管理页面上面的说明应该很好理解。
而最快的 IP 地址模式是之前有人在 AdGuardHome 的 github 上提的一个 issues,参考的是 smartdns,对所有 DNS 服务器进行查询,返回 IP 后测速,选择最快的 IP,但是实际使用体验并没有想象中那么舒服。
(不过现在AdGuardHome社区已经开始做这个了,BETA测试版已经有这个功能了)
原因可能在于 DNS 查询后仅仅是返回一个最快 IP,并没有后续处理,在 DNS 记录的 TTL 值过期后下一次需要重新查询。
但 smartdns 不同,smartdns 有域名预先获取功能和过期缓存服务功能,一般只选择一个开启即可.
官方文档对这两项功能有详细的说明,如下图:
20210429160202.png

AdGuardHome 容器更换端口

在容器创建之前我们设置了 ADG 的配置和工作持久化目录.
如果在初始化配置 ADH 之后,想更换使用端口,可以在对应容器的配置目录下对 AdGuardHome.yaml 进行修改.
(confdir1 是国内 ADH 容器,confdir2 是国外 ADH 容器)
bind_port: 3002 是网页管理界面端口.
port: 7913 是 DNS 监听端口.
20210429160304.png
修改后请务必重启 AdGuardHome 容器.

# 容器ID只需要输入前几位数能够区分其他容器就可以
docker restart 容器名/容器ID

查看当前运行的容器,并列出容器相关信息.

docker ps