
前言
SmartDNS 和 AdGuardHome 的教程已经有一大堆了,为什么还要写?先看看我的7天统计,左边是我部署在家里的软路由OpenWrt上的,已经稳定运行2年多,右边是部署在单位部门PVE的Debian里,已经运行1年多了。
intel N3160平均处理时间更快
随便估算一下,每次能节省30ms,380000次大概节省11400秒=3.1小时(不过上网加速主要还是靠SmartDNS)。从拦截率来看广告链接真不少。
SmartDNS 和 AdGuardHome 很多人都会部署,各有各的用法。我的思路主要是SmartDNS用DNS over HTTPS和DNS over TLS作为上游,开启大缓存与专属功能“返回最快IP地址”提高网络访问速度,AdGuardHome(连接上游SmartDNS)主要是去广告,方便加黑白名单。
经过2年时间配置的不断调整,基本符合使用要求,现在把最重要的配置细节分享出来,大家直接抄作业就行了,请收藏、点赞。
因为我经常对主软路由进行系统升级,所以想着把SmartDNS 和 AdGuardHome搬到群晖Docker上去,不用每次升级后都部署一次。如果不用群晖,在其他平台也可以抄配置,一样的本文是以解决实际问题为导向的教程,所以啰嗦而简洁、直白而简单,适合小白。
一,群晖安装Docker
安装Docker很简单,过程我就不细述了
二,Docker安装SmartDNS

打开Docker在注册表搜索SmartDNS,选择ghostry/smartdns下载。

选latest版本就可以了

等待映像下载完毕,切换到映像标签,选择ghostry/smartdns启动,CPU优先高,高级设置里面的高级设置勾选“启用自动重新启动”。端口设置里面本地端口1053,类型UDP。


待容器启动后,进入smartdns的详情,在终端机里面“通过命令启动”

输入 /bin/sh
确定就进入命令行了。

输入命令对SmartDNS的配置文件进行编辑,进入后按dd将原来的配置全删了。
vi /smartdns/smartdns.conf
按热键帮助Ctrl+A进入前缀模式,按i进入编辑模式,把我的配置Ctrl+V粘贴进去。然后按Esc键退出编辑模式,再按冒号:输入wq保存退出。输入命令cat /smartdns/smartdns.conf看看配置文件是否正确保存下来了。
server-name smartdns
bind [::]:53
cache-size 60000
# enable persist cache when restart
cache-persist yes
# cache persist file
cache-file /smartdns/smartdns.cache
# prefetch domain
prefetch-domain yes
# cache serve expired
# serve-expired [yes|no]
serve-expired yes
# cache serve expired TTL
serve-expired-ttl 172800
# speed check mode
# speed-check-mode [ping|tcp:port|none|,]
# example:
#speed-check-mode ping,tcp:80
# speed-check-mode tcp:443,ping
# speed-check-mode none
rr-ttl-min 600
log-level warn
server 119.29.29.29
server-tls dot.pub
server-https https://doh.pub/dns-query

到此完成了SmartDNS的安装配置。

输入ifconfig,记下inet add地址,等下填到AdGuardHome
补充说明
一、关于ghostry-smartdns的更方便修改配置方法:
1、把ghostry-smartdns容器停止了。
2、打开File Station,在docker文件夹里面新建一个叫smartdns文件夹。
3、回到ghostry-smartdns容器的编辑页面,“储存空间”选项卡,点击“添加文件夹”
4、弹出路径选择对话框,选择我们刚刚新建的smartdns文件夹,“装载路径”输入“/smartdns”。意思就是用docker/smartdns的文件夹映射容器里面的/smartdns文件夹,旧可以方便修改配置文件了。
5、重新启动容器,就会在docker/smartdns的文件夹看到smartdns.conf配置文件,下载修改,再上传覆盖。
6、重新启动容器。 7、ghostry-smartdns容器的版本升级也一样这样设置。
二、关于adguard/adguardhome容器的版本升级
1、和上面一样也是映射文件夹。
2、打开File Station,在docker文件夹里面新建一个叫adguardhome文件夹,再在里面新建“work”、“conf”两个文件夹。
3、回到容器的编辑页面,“储存空间”选项卡,点击“添加文件夹”
4、docker/adguardhome/work装载容器里面的“/opt/adguardhome/work”
5、docker/adguardhome/conf装载容器里面的“/opt/adguardhome/conf”
6、每次adguard/adguardhome有版本更新后,下载新版本映像部署时候,重新装载4、5点的文件夹就可以重用配置了。
三,Docker安装AdGuardHome
与安装SmartDNS步骤一样,搜索AdGuardHome,安装adguard/adguardhome,因为我是x86_64平台所以要选最新的v0.107.0-b.4版本才能正常下载安装。


启动设置,CPU优先高,高级设置里面的高级设置勾选“启用自动重新启动”。端口设置里面把其他全部删除,剩下本地端口3000,类型TCP和本地端口53,类型UDP。3000是管理端口,53是DNS的服务端口。

应用启动后就可以用你的群晖ip加端口3000进入AdGuardHome的设置界面了(我的是http://192.168.1.5:3000)

管理端口3000,DNS端口53

认真对照每一项,直接抄

172.17.0.2就是刚刚取得的ghostry/smartdns容器的ip地址。

添加广告过滤,第一个是官方的过滤表,命中率也很高,保留。点击“添加阻止列表”-“从列表中选择”

只选择一个anti-AD列表就够了,不用多选了,并不是越多列表效果越好的,多了各种问题。

列表有时更新不成功,换个时间多点几次试试(第一个我就没更新成功)

4:48更新成功了
测试部署是否成功

命令行测试成功

设置客户端
1、openwrt路由的可以在LAN接口中设置,自动分发到全部客户端

2、Windows设置

最后
有些人说SmartDNS、AdGuardHome分别都可以做到你要的功能,多此一举要部署两个软件。
能做到不代表做得好。SmartDNS的广告拦截就不如AdGuardHome的管理方便,黑白名单也添加删除方便,而且AdGuardHome自带官方的列表(虽然是阉割版)。
AdGuardHome的“返回最快IP地址”功能就是参考SmartDNS的代码的,我刚开始用的时候它是没有这个功能,后来增加的。我认为还是SmartDNS的功能在不断改进,而且它的缓存更灵活。
结论就是我要同时用这两个软件。
源贴地址:https://post.smzdm.com/p/axld4el9/