写在前面
1. iKuai +OpenWRT 做旁路由网络拓扑
前面几篇文章写完了,基本上折腾完了,以ESXi 8.0虚拟机为基础,安装作为iKuai 主路由,负责拨号及 DHCP,OpenWRT 做旁路由。
今天搞定SmartDNS+AdGuardHome设置分流与去广告。SmartDNS作为DNS管理提供DNS缓存,实现国内国外DNS分流,彻底解决 DNS 污染问题、实现秒开网页。同时搭配AdGuardHome实现整个局域网去广告。
2.【AdGuardHome】有什么用?
作为著名广告拦截与反跟踪软件,可以将广告与追踪相关的域名屏蔽,同时不再需要安装任何客户端,包括 Windows、Mac、Android、iOS,下面我们说的是 OpenWrt 安装 AdGuard Home 设置全局广告拦截,教程开始之前,我先介绍一下 AdGuard Home 的工作原理。
AdGuard Home 的工作原理是在 DNS 的域名解析过程中拦截网页上的广告,目前支持 DNS over TLS 和 DNS over HTTPS,本教程讲解讲解如何配置 OpenWRT 的 AdGuardHome 实现DNS防污染加快网站解析速度 和 广告拦截。
3.什么是DNS?
开搞之前先搞清楚几个概念,便于折腾:
【客户端(client)】:指在本地的电脑或者软件,而服务器(server)就是在网上为客户端提供服务的电脑。client是发出请求 (request)的一方,而服务器(server)响应它的请求并为其提供服务。
【域名系统(Domain Name S ystem,缩写:DNS)】是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,是 Internet 上解决网上机器命名的一种系统,能够使人更方便地访问互联网。就像拜访朋友要先知道别人家怎么走一样,Internet 上当一台 主机要访问另外一台主机时,必须首先获知其地址。
4.域名解析:
域名解析就像我们初次拜访一个人一样,我们要知道人家的门牌号,然后按照地址去找。在 Internet 上只知道某台机器的域名还是不够的,还要有办法去找到那台机器。寻找这台机器的任务由网上一种被称为域名服务器的设备来完成的,而完成这一任务的过程就称为域名解析。
可以用 IP 地址标识,并且可以通过 IP 地址被访问,但即使是将 32 位的二进制 IP 地址写成 4 个 0~255 的十位数形式,也依然太长、太难记。因此,人们发明了域名 (Domain Name),域名可将一个 IP 地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的 IP 地址,也可以输入其域名,对访问而言,两者是等价的。例如:微软公司的 Web 服务器的 IP 地址是 207.46.230.229,其对应的域名是 www.microsoft.com,不管用户在浏览器中输入的是 207.46.230.229 还是 www.microsoft.com,都可以访问其 Web 网站。
5.【53端口】
53端口是为(Domain Name Server(DNS域名服务器)服务器所开放的端口,主要用于域名解析,DNS 服务在 NT 系统中使用的最为广泛。通过 DNS 服务器可以实现域名与 IP 地址之间的转换,只要记住域名就可以快速访问网站。
6.DNSMASQ DNS服务器
OpenWrt默认使用的是DNSMASQ来管理DNS默认监管的 53 端口。我们这些上网的设备发出的 DNS 请求都是先到这里,然后再通过 DNS 转发(在常规设置中可以更改)送到网关,最后到运营商等 DNS 服务器进行查询。
DNSMASQ 是一个轻量级的DNS和DHCP 服务器,大约 200 多 KB,并且完整的包含了 DNS 服务器和 DHCP 服务器功能,非常适合 flash 空间有限的嵌入式系统。DNSMASQ作为OpenWrt默认的DNS 服务器和转发器,接收Client的 DNS 查询请求,并回复 DNS 查询结果。查询的结果可以来自本地缓存和公共 DNS 服务器,如果本地缓存没有记录,DNSMASQ 会将请求转发到公共的 DNS 服务器,并将公共的 DNS 解析的结果回复到请求的设备。
那SmartDNS 和 DNSMASQ 有什么区别?我们为何又这么折腾呢?
SMARTDNS 在设计上并不是替换 DNSMASQ 的,SMARTDNS 主要功能集中在 DNS 解析增强上,增强部分有:
多上游服务器并发请求,对结果进行测速后,返回最佳结果;
address,ipset 域名匹配采用高效算法,查询匹配更加快速高效,路由器设备依然高效。
域名匹配支持忽略特定域名,可单独匹配 IPv4, IPV6,支持多样化定制。
针对广告屏蔽功能做增强,返回 SOA,屏蔽广告效果更佳;
IPV4,IPV6 双栈 IP 优选机制,在双网情况下,选择最快的网络通讯。
支持最新的 TLS, HTTPS 协议,提供安全的 DNS 查询能力。
ECS 支持,是查询结果更佳准确。
域名 TTL 可指定,使访问更快速。
高速缓存机制,使访问更快速。
第二 DNS 支持自定义更多行为。
7.拟实现的DNS转发流程
设置最核心的部分就是DNS转发端口的衔接,而我们要做的就是把DNSMASQ、Adguardhome、SmartDNS三个插件里的DNS服务器功能分成三个层级,实现层层转发。依次是第一级DNSMASQ,第二级Adguardhome,第三级SmartDNS。
客户端 DNS 请求流程简单来说就是:
【客户端(client)】国内请求】→
→192.168.1.1:53→192.168.2.1:53(DNSMASQ)→192.168.2.1:5351(Adguardhome)→192.168.2.1:6053 (SmartDNS缓存)→上游国内DNS公共服务器→返回最快DNS给客户端
【客户端(client)】国外请求→
→192.168.1.1:53→192.168.2.1:53(DNSMASQ)→192.168.2.1:5351(Adguardhome)→192.168.2.1:5335 (SmartDNS缓存)→上游国外DNS公共服务器→返回最快DNS客户端
经过设置之后,openWrt的默认DNS服务器为DNSMASQ,本地的DNS由openWrt的SmartDNS负责解析缓存,DNSMASQ作为最底层的DNS服务器,只担任转发功能。
一、OpenWrt基本设置
1.配置OpenWrt的lan口设置
IPv4地址:为OpenWrt的网关,也是我们管理OpenWrt的地址,这里设置为192.168.50.2。
子网掩码:和ikuai一致保证同一个网段。
IPv4网关:指向ikuai的网关。保证OpenWrt的上网数据传输到ikuai再传输到外网。
使用自定义的DNS服务器:首先设置一个自定义的DNS,这里我们先设置一个能用的DNS即可,保证我们在设置过程中可以上网,后面设置好了,可以将DNS改为由OpenWrt代理,即输入OpenWrt的网关改成192.168.50.2。
2.关闭DHCP服务,统一由ikuai分配
楼主的电信网络没有IPv6服务,全部使用的是IPv4的服务,禁用掉IPv6服务。
3.lan高级设置
lan口高级设置里不勾选IPv6,勾选【开启开机自动运行】和【强制链路】:
4.Turbo ACC 加速
开启【Turbo ACC 加速】,如果前面已经开启了,检查网络内的【Turbo ACC 加速】设置是否正确:
只开启前三个即可,DNS缓存后面由SmartDNS来管理。如果开启了会产生冲突,冲突了就会不生效,关闭 Turbo ACC 网络加速设置的 DNS 加速。
5.防火墙设置
①基本设置
打开openwrt的防火墙, SYN-flood 防御、丢弃无效数据包起不起用都可。下面启用 FullCone-NAT、入站数据、出站数据、转发都设置为接受。
下面lan口开启:IP 动态伪装。
②防火墙自定义规则
一般 openwrt 防火墙默认有以下两条规则,若没有,加上
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53 [ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 [ -n "$(command -v ip6tables)" ] && ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
③加入回程旁路由统一转发代码
自定义规则里再加入下面一条规则,如果现在使用的网卡是eth1或者eth2,这里同样修改为eth1或者eth2。
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
如果不加会导致我们广告屏蔽等功能失效,原理大概如下:
家里的上网设备对外发送一个上网请求数据包,向外发一个包,先发到旁路由openwrt(192.168.50.2),如果不加这条规则,旁路由并没有修改这个包的源地址(192.168.50.XX),这个包由旁路由openwrt转发给ikuai主路由(192.168.50.1)再到外网。外网回应的数据包,到了ikuai主路由(192.168.50.1),主路由一查 NAT表,发现是设备(192.168.50.XX)的,就直接发给设备了,这个数据(包含广告),没有经过openwrt(192.168.50.2)处理。我们加上这条命令后,回程返回的数据包会先回到openwrt进行处理,再返给设备。
需要设置情况:
ikuai主路由开 DHCP(未指向openwrt旁路由网关),openwrt旁路由关 DHCP,旁路由只有 LAN 口工作,其他设备需设置静态网关为旁路由,需要设置。
ikuai主路由开 DHCP(未指向openwrt旁路由网关),openwrt旁路由开 DHCP(强制模式开),旁路由只有 LAN 口工作,其他设备通过强制 DHCP 获取旁路由网关,需要设置。
ikuai主路由开 DHCP(指向openwrt旁路由网关),openwrt旁路由关 DHCP,旁路由只有 LAN 口工作,需要设置。
ikuai主路由关 DHCP,openwrt旁路由开 DHCP,openwrt旁路由只有 LAN 口工作,需要设置。
不需要设置的情况:
openwrt旁路由 WAN LAN 共用 eth0,不用设置。
ikuai单臂路由情况,openwrt作为拨号路由(有拨号就有 WAN 口),不用设置。
二、ikuai的DNS设置
回到ikuai进行简单设置,这一步将ikuai的DNS设置为openwrt代理:
网关:设置为openwrt的网关:192.168.50.2
这样上网设备发出的数据,到达ikuai,ikuai会发送到openwrt进行一番处理,然后在发送到外网。回程的数据,ikuai也会发送到openwrt进行一番处理,然后转发到各个设备。
DNS:设置为openwrt代理:192.168.50.2
三、安装SmartDNS
安装:在 istore 中输入SmartDNS ,查找软件包安装即可,一般openwrt都带有这个服务,这个就不多说了。
在服务中打开SmartDNS:
四、SmartDNS设置
1.SmartDNS基础设置
基本设置→SmartDNS勾选启用→服务器组名称:china→端口默认【6053】→开启TCP服务器→勾选双栈IP优选→勾选域名预加载→勾选缓存过期服务→重定向默认「无」→缓存大小设为:1000000→域名TTL最大值设为:3600→勾选启动→保存&应用。
【双栈IP优选】:应注意自己的设备是否完全支持 IPv6,尤其是网络运营商是否支持
【重定向】:一定不要选择,后面我们用Adguard Home进行重定向。还有就是一些版本的SmartDNS,没有重定向功能,改成了自动设置 DNSMASQ,如果是这个版本注意不要点自动设置 DNSMASQ 。因为我自己是用的IPV4公网,这里IPV6的两项设置不勾选,如果用IPV6勾选此两项。
【停用HTTPS地址解析】:如果下面上游路由器添加HTTPS协议的话,停用HTTPS地址解析这一项不要勾选。
【缓存大小】:可根据需求填入,这里填入的数字是指缓存的条数,楼主写了个十万「100000」,自己可以多写几条。
【域名TTL】:是指缓存的时间,也就是DNS在本地保留生效的时间,留空则根据上游服务器告知的时间缓存,但是如果低于最小值,则按照最小值在缓存之内防止短时间多次查询,如果时间过长则按照最大值缓存防止失效。域名TTL可根据自己需求需求填入,最小值填入「300」、域名 TTL 最大值填入「3600」。域名TTL最大值如果我们这里填入3600,意思是缓存一个小时。同样如果填入864000,意思就是系统会帮我们缓存十天。
2.SmartDNS配置上游服务器
配置参考规则
smartdns 提供了域名缓存机制:对查询的域名,进行缓存,缓存时间符合 DNS TTL 规范。
①为提高缓存命中率,适当增大 cache 的记录数、通过 cache-size来设置缓存记录数。内存大的情况下,可适当调大。可以提高 cache 效率,加快访问速度
②适当设置最小 TTL 值:通过 rr-ttl-min`将最低 DNS TTL 时间设置为一个合理值,延长缓存时间。建议是超时时间设置在 10~30 分钟,避免服务器域名变化时,查询到失效域名。
③开启域名预获取功能:通过来启用域名预先获取功能,提高查询命中率。 配合上述 ttl 超时时间,smartdns 将在域名 ttl 即将超时使,再次发送查询请求,并缓存查询结果供后续使用。频繁访问的域名将会持续缓存。此功能将在空闲时消耗更多的 CPU。
④数量方面:SmartDNS 有测速机制,在配置上游服务器时,建议配置多个上游 DNS 服务器,包含多个不同区域的服务器,但总数建议在 10 个左右。
⑤隐私方面:默认情况下,SmartDNS 会将请求发送到所有配置的 DNS 服务器,若上游 DNS 服务器使用 DNS,或记录日志,将会导致隐私泄漏。所以在配置的时候要考虑:
配置使用可信的 DNS 服务器。
优先使用 TLS 查询。
设置上游 DNS 服务器组。
⑥IOS 系统解析缓慢问题怎么解决? IOS14 开始,苹果支持了 DNS HTTPS (TYPE65) 记录的解析,此功能用于快速 DNS 查询和解决 HTTPS 链接相关的问题,但当前还是草案,另外会导致广告屏蔽等功能失效,建议通过如下配置关闭 TYPE65 记录查询。
force-qtype-SOA 65
按照以上规则我们开始进行配置
这里将DNS分别进行分组,当浏览国内网页时使用国内DNS,在访问国外网站时自动使用国外DNS。点新增开始下一步:
①添加国内DNS服务器
按照以下设置分别将下面的国内DNS插入进去,注意这里我们使用了国内国外分流,国内国外不宜添加过多,添加之前可以在网上测试下DNS的速度,国内国外各添加十条就够了。DNS测试网站
DNS服务器名称:自己随便定义
服务器组:china(自己随便定义,这个是国内组的意思)
端口:default(默认端口)
类型:udp(国内统一填写)
②添加添加运营商的DNS(隶属于国内组)
首先添加电信运营商给的DNS。这样在查询的时候会优先查询。打开ikuai wan口拨号页面,查看供应商给的DNS,可以看到电信供应商给了两个DNS:
将两个DNS复制出来,在SmartDNS分别添加上去。
116.228.111.118
180.168.255.18
添加完成,将上面的DNS删掉,尽量保证电信供应商的排在第1、2位置。
关于DNS,可以到dns.ip.cn查询:
③添加国内DNS服务器:
阿里公共DNS:223.5.5.5,223.6.6.6 类型选择:UDP
阿里加密DNS:aliDNS_ip/DNS-query 类型选择:https
阿里加密DNS:DNS.aliDNS.com/DNS-query 类型选择:https
腾讯公共DNS+:119.29.29.29 类型选择:UDP
腾讯加密DNS:doh.pub/DNS-query 类型选择:https
腾讯加密DNS:sm2.doh.pub/DNS-query 类型选择:https
百度公共DNS:180.76.76.76 类型选择:UDP
华为云公共DNS :122.112.208.1,139.9.23.90 类型选择:UDP
114公共DNS:114.114.114.114,114.114.115.115 类型选择:UDP
OpenerDNS:42.120.21.30 类型选择:UDP
DNS派 电信 / 移动 / 铁通:101.226.4.6,218.30.118.6 类型选择:UDP
DNS派 联通:123.125.81.6,140.207.198.6 类型选择:UDP
添加完成:
④添加国外DNS服务器
下面进行添加国外DNS,国外DNS协议要添加UDP、TCP和TLS三种协议。
服务器组选择:guowai
添加一项额外的服务器参数(从默认服务器组排除),填入:
-exclude-default-group
下面搜集了这些常见的国外DNS:
Google DNS:8.8.8.8,8.8.4.4 类型选择:tls(UDP\TCP也可以加入)
Google加密DNS:dns.google/dns-query 类型选择:https
Google加密DNS:dns.google 类型选择:tls
CloudFlare:1.1.1.1类型选择:tls(UDP\TCP也可以加入)
IBM Quad9:9.9.9.9类型选择:tls(UDP\TCP也可以加入)
IBM Quad9:doh.opendns.com/dns-query 类型选择:https
Norton ConnectSafe:199.85.126.10 199.85.127.10 类型选择:UDP
威瑞信:64.6.64.6 64.6.65.6 类型选择:UDP
Comodo**安全DNS:** 8.26.56.2 68.20.247.20 类型选择:UDP
DNS Watch**:** 84.200.69.80 84.200.70.40 类型选择:UDP
OpenDNS:208.67.222.222,208.67.220.220类型选择:tls(UDP\TCP也可以加入)
韩国电信DNS:168.126.63.1,168.126.63.2类型选择:tls(UDP\TCP也可以加入)
V2EX DNS:199.91.73.222,178.79.131.110类型选择:tls(UDP\TCP也可以加入)
有的版本的SmartDNS是有从默认服务器组排除这个选项的,如果有这个选项,国外的DNS服务器在添加的时候,勾选就可以了。这样就可以把国内组进行分开,访问国内网站的时候使用国内DNS,使用国外网站的时候,选择国外的DNS服务器。
添加完成:
⑤设置第二DNS服务器
启用第二 DNS 服务器,端口默认「5335」,因为很多插件的DNS服务中用的就是5335端口,这里设置后好了之后,直接选用即可。
服务器组我们选择上面的国外分组,其他的对照设置。
启用→开启「TCP 服务器」→本地端口设为5335→服务器组:guowa→勾选跳过测速→勾选跳过address规则→勾选跳过双栈优选→勾选跳过cache→启用——保存&应用
下面四项勾选,第二DNS服务器设置完毕。
⑥SmartDNS 自定义设置
在SmartDNS 自定义中添加下面两项分组信息,其他的删掉即可,只保留主体部分:
bind:6053 -group china
bind:5335 -group guowai
SmartDNS 自定义备份
# Add custom settings here.# set log level# log-level [level], level=fatal, error, warn, notice, info, debug# log-level error# log-size k,m,g# log-size 128k# log-file /var/log/smartDNS.log# log-num 2# List of hosts that supply bogus NX domain results # bogus-nxdomain [ip/subnet]bind:6053 -group chinabind:5335 -group guowai
五、配置AdGuard Home
1.AdGuard Home WEB端设置
在服务里打开AdGuard Home,可以看到基本设置、日志、手动设置三个选项。前两个是wed端可视设置,手动设置就是通过命令进行设置。
首先看第一项基础设置
①更新核心
首先更新核心版本,现在可以看到红色的状态是未运行和未重定向,如果特殊上网正常的话是可以更新的,点击检查更新,更新核心:
②手动更新核心
如果因为网络问题无法更新,那只能手动更新了。打开AdGuardHome,找到点击右下角,作者编译好的最新的版本。
打开列表,找到自己对应的版本,一般X86 64位平台选择换个版本即可。
下载打开压缩包,第一个AdGuardHome就是核心文件,我们只用到这一个就可以了。
我们打开winSCP,电脑上没有的可以去下载安装下:
安装完成后,新建连接。输入主机名,openwrt的IP地址,端口号不用该,输入用户名和密码,连接。
点击【打开目录】,路径输入/usr/bin/AdGuardHome/,确定打开。
将刚才下载的复制粘贴进来:
右击属性,分配权限,权限和下面一样就可以了。
这时可以看到核心已经有了。
2.重定向方式:
更新完核心之后可以看到,重定向选项,重定向方式有【作为 DNSMASQ 的上游服务器】、【重定向 53 端口到 Adguardhome】、【使用 53 端口替换DNSMASQ 】3种选择,这里先选择无,就是先不重定向,等到后面设置好了,我们再开启。
先来捋一下,AdGuard Home的上级DNS服务器是SmartDNS,这点是肯定的,我们主要是要理清DNSMASQ和Adguardhome之间的关系。而DNSMASQ和Adguardhome的上下级关系关系就是通过重定向来实现的。
关于三种重定向方式的区别。从下面luci-app-adguardhome的作者注释来看,【作为 DNSMASQ 的上游服务器】是最稳定的方式,就采用这个就好了,效果其实都一样,不要折腾,越折腾莫名其妙的问题越多。
作为 dnsmasq 的上游服务器 (在 AGH 中统计到的 ip 都为 127.0.0.1,代价就是没法统计局域网客户端,都显示 127.0.0.1 了,无法统计客户端及对应调整设置,基本上无影响,但是酸酸乳plus 正常)
重定向 53 端口到 AdGuardHome(ipv6 需要开启 ipv6 nat redirect 否则如果客户端使用 ipv6 过滤无效,不以 dnsmasq 为上游酸酸乳plus 失效)
使用 53 端口替换 dnsmasq (需要设置 AGH 的 dnsip 为 0.0.0.0, AGH 和 dnsmasq 的端口将被交换,不以 dnsmasq 为上游酸酸乳plus 失效)
然后勾选【详细日志】、【开机后网络准备好时重启】、【在关机时备份工作目录文件】所有的选项,保存启动AdGuard Home。
3.AdGuard Home web端配置
这时可以看到,AdGuard Home已经运行,但是还有一个红色的未重定向,这是正常的。
后打开下面框选的位置,打开AdGuard Home的web配置页面。
也可以直接输入旁路由地址:端口号,楼主旁路由地址是192.168.50.2,可以直接输入192.168.50.2:3000进行配置。会出来个网页。点击开始配置进入下一步:
①端口设置
网页管理界面——监听接口——所有接口,端口号设置为默认的3000。也可以设置成其他的,这个只要不和现用的其他端口冲突即可。
DNS 服务器——监听接口——所有接口,端口号设置为5351。(这个可以随便设置一个,同样也是不冲突就行)
②网页管理界面登录密码
配置AdGuard Home的网页管理界面登录密码,输入常用的账户密码即可。
点击进入下一步,检查有没有问题,可以把这些内容保存下来,省的以后忘记或者后面设置忘记了。
为保证 AdGuard Home 可以开始正常工作,您需要在设备上对其进行配置。AdGuard Home DNS 服务器正在监听以下地址:
127.0.0.1:5351
172.17.0.1:5351
192.168.50.2:5351
[::1]:5351
[fe80::62be:b4ff:fe09:c9f%br-lan]:5351
③设置AdGuard Home的上游DNS服务器
首先【常规设置】
常规设置里【使用过滤器和Hosts文件以拦截指定域名】勾选开启,其他选择关闭。不要问为什么,问就是稳定优先,已经够用,开了会出bug,网页崩溃、显示不全、打不开等种种问题。
日志和统计大家根据自己的喜好设置就可以了,这个没多大影响。
再打开【DNS设置】页面,设置AdGuard Home的上游DNS服务器:
前面我们已经在在SmartDNS设置了国内DNS端口为端口默认【6053】
SmartDNS第二DNS服务器(国外DNS)的端口为【5335】
这时候我们就要将AdGuard Home的上游DNS服务器设置为SmartDNS,将AdGuard Home过滤后的 DNS 请求再转发给 SmartDNS。
上游DNS服务器设置为:
127.0.0.1:6053
127.0.0.1:5335
至于为何是127.0.0.1 ?
127.0.0.1是一个特殊用途的 IPv4 地址,称为 localhost 或 环回地址 。所有计算机都使用此地址作为自己的地址,但它不会像真实 IP 地址那样让计算机与其他设备通信。
。 的任何数据包都不应该离开计算机(主机),发送它 —— 而不是被发送到本地网络或互联网,它只是被自己 “环回”,并且发送数据包的计算机成为接收者。localhost 只是默认情况下引用 127.0.0.1 的简写,就是当做本地主机的总127.0.0.1来用。
下面DNS的查询方式有负载均衡、并行请求、最快的IP地址三种,楼主还是建议选择并行请求,上面我们设置过了DNS全部放到了smartdns里面缓存,Adguardhome会向smartdns缓存库里并行查询,smartdnsDNS本身具有返回最快dns的功能,也会向Adguardhome返回最快的DNS。
列一下三种方式的区别(恩山大佬的分享):
负载均衡:一次查询一台服务器。 AdGuard Home 将使用加权随机算法来选择服务器,以便更频繁地使用最快的服务器。具体使用感受是,去视频 app 广告迅速,微博国际版登陆 5 秒广告可以去除,图片加载速度较快。存在的问题是,仪表盘平均处理时间较长,80-120ms 之间。
并行请求:通过同时查询所有上游服务器,使用并行请求以加速解析。最老的模式,在添加本地 DNS 地址的情况下,去视频 app 广告迅速,微博国际版登陆 5 秒广告可以去除,仪表盘平均处理时间较短,可以保持在 5-8ms 之间。存在问题是,图片加载速度受影响,偶尔会加载慢,存在些许不稳定因素。
最快的 IP 地址:查询所有 DNS 服务器并返回所有响应中速度最快的 IP 地址。因必须等待全部 DNS 服务器均有所回应,因而会降低 DNS 查询的速度,但同时此举将会改善总体的连接。本模式据说是 Smart DNS 的功能一样。对比上述模式没有区别,和并行模式并无态度啊去吧。存在问题是,仪表盘处理时间超长,1000ms 以上……
接下来到 Adguardhome 的网页控制面板中,将 Bootstrap DNS 服务器设为 127.0.0.1:6053。
④DNS 服务配置
速度限制:0
⑤DNS 缓存配置
这里都空着即可,采用上游DNS服务器,也就是让SmartDNS来管理这些,如果设置会产生冲突。
3.DNS黑名单设置
将阻止匹配 DNS 拦截清单的域名,这里添加的清单就是一种在线的TXT 文件,而且是有专人维护的。可能是公司或者是大神来维护。而TXT文件里面就是一条一条网站信息。
添加黑名单,这里可以从列表中添加,也可以添加自定义名单,列表中是Adguardhome收集和维护的一些名单,可以直接使用。自定义名单是从网上找一些大神为爱发电分享的名单。
其中列表名单里这一条推荐使用,其他的可以去找一些网络大神分享的名单,搜索Adguardhome规则。
4.黑名单推荐
AdGuard 默认的内置规则里很多选择,规则一定不要搞太多,一两个综合性的规则列表就已足够覆盖大部分情况,如果同时使用,这些规则可能会冲突,出现很多莫名其妙的问题,使用几个自己用的顺手的就可以了。有的规则带有两个或者两个以上的源头,可以留着以后失效之后使用。【】后面就是规则地址,使用前请自行在列表地址前面加上https://前缀。
1、ad-pc.txt:合并自乘风视频广告过滤规则、Easylist、EasylistChina、EasyPrivacy、CJX'sAnnoyance,以及补充的一些规则;
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad-pc.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad-pc.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad-pc.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-pc.txt
2、ad-mo.txt:合并自Easylist、EasylistChina、EasyPrivacy、CJX'sAnnoyance;
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad-mo.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad-mo.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad-mo.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-mo.txt
3、ad.txt:【推荐】合并自乘风视频广告过滤规则、EasylistChina、EasylistLite、CJX'sAnnoyance,以及补充的一些规则;
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad.txt
4、ad2.txt:合并自乘风视频广告过滤规则、EasylistChina、EasylistLite、CJX'sAnnoyance;
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad2.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad2.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad2.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad2.txt
5、ad3.txt:合并自乘风视频广告过滤规则、EasylistChina、EasylistLite、CJX'sAnnoyance、EasyPrivacy;
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad3.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad3.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad3.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad3.txt
6、ad-edentw.txt:合并自Adblock Warning Removal List、ABP filters、anti-adblock-killer-filters。
国内源1:https://halflife.coding.net/p/list/d/list/git/raw/master/ad-edentw.txt
国内源2:https://gitee.com/halflife/list/raw/master/ad-edentw.txt
国外源1:https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad-edentw.txt
国外源2:https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt
7、1024网站及澳门皇家赌场及恶意广告主机列表:
https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts
8、乘风广告过滤规则(2021年5月份已停更)
https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt
9、乘风视频规则(周更),可过滤爱优腾三大视频网站的片头秒跳广告。
https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt
10、EasyList China+EasyList
https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt
11、Easylist China+EasyList Lite【ChinaList+EasyList修正】,适合较少访问外国网站。
http://sub.adtchrome.com/adt-chinalist-easylist.txt
12、【Easylist China】
https://easylist-downloads.adblockplus.org/easylistchina.txt
13、anti-AD项目规则
https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/adblock-for-dnsmasq.conf
5.白名单推荐
有误杀可尝试使用白名单,添加到 Adguardhome 的允许清单(不保证一定能解决问题),下面的地址请自己加上https://前缀。
cats-team.github.io/AdRules/allow-domains-list.txt
gitlab.com/cats-team/adrules/-/raw/main/allow-domains-list.txt
adrules.top/allow-domains-list.txt
6.自定义规则
也可以添加你的规则列表,在允许清单里加上这个网址,这个网站就可以使用了,相当于给这个网站开了一个特权。
ADGUARD 过滤语法规则,一行一回车,常用的就是第一二条。手动添加和接触拦截。直接复制,然后将里面的网址替换掉就可以了。
||example.org^ – 拦截 example.org 域名及其所有子域名
@@||example.org^ – 放行 example.org 及其所有子域名
比如我们要放行值得买网站及其子域名,只要添加一行代码就可以了,用于访问个别网站时候有BUG时快速添加。
@@||post.smzdm.com^
7.Adguardhome重定向【作为 DNSMASQ 上游服务器】
回到基本设置,会看到Adguardhome运行中、已重定向。
【作为 DNSMASQ 上游服务器】,可以看到前面的重定向变成了5351重定向,这个也就是AdGuard Home的DNS监听端口,如果你设置成8336、8338或者其他,这里显示的就是你设置的端口值。选择【作为 DNSMASQ 的上游服务器】,这样设置之后Adguardhome变成了DNSMASQ的上级DNS服务器。
六、DNSMASQ设置
最后一步设置DNSMASQ。打开网络——DHCP/DNS,可以看到DNSMASQ服务,主要是解除DNSMASQ的DNS功能,只保留转发功能,让DNSMASQ作为AdGuard Home的下级服务生效。
我们到DNSMASQ看下目前的状态,在【网络】→【DHCP/DNS】→DNS转发,可以看到,DNS转发内已经自动设置成了127.0.0.1#5351。如果转发路径不对,就强制改成127.0.0.1#5351。
2.HOSTS 和解析文件
这里忽略掉解析文件,不用DNSMASQ的解析。
【/etc/hosts】是记录本地配置的域名和 IP 的映射的文件,是域名解析(如 ping,http 访问)时域名的第一解析方式。DNSMASQ可以选择加载 /etc/hosts到本地缓存,也可以选择不加载。
如果选择加载:当客户端(client)设备的 DNS 请求的域名正好在 /etc/hosts 中的情况下,DNSMASQ 直接回复 /etc/hosts 域名对应的 IP 地址。
如果选择不加载:DNSMASQ 则会将请求转发到公共的 DNS 服务器去解析,而不是使用 /etc/hosts 中的记录,通过 --no-hosts 选项可以选择是否加载 /etc/hosts 内容作为 DNSMASQ 的 DNS 的本地缓存。
【/etc/resolv.conf】该文件主要记录 DNS 的 Name Server,对于没在 /etc/hosts 记录的域名,系统向 Name Server 发起 DNS 请求,从而解析域名。
3.高级设置
前半部分保持默认即可:
同样在在【网络】→【DHCP/DNS】高级设置里面DNSMASQ还是在监听53端口。DNS 查询缓存的大小设置为0。不使用DNSMASQ的DNS缓存。点击保存生效。
到这里整个设置完成了,从DNSMASQ→AdGuard home→SmartDNS设置好了。DNSMASQ监听本地【53端口】,将请求转发到AdGuard Home监听的【5351端口】,然后AdGuard Home再转发到SmartDNS查询最快的DNS,然后提交给DNSMASQ,然后发送到ikuai主路由。回程数据首先发送到ikuai,然后经过SmartDNS交给AdGuard home进行处理,返回到DNSMASQ,然后发送回设备。
查询流程:
进入配置网页,仪表盘里你会发现已经开始DNS查询和广告拦截了。这里我们看到客户端拦截列表里看到的全部都是127.0.0.1 的数据。我们前面在重定向模式中选择了【作为 DNSMASQ 上游服务器】, DNS 请求第一步经过 DNSMASQ,然后才到Adguardhome,所以Adguardhome接受到的都是53 端口的DNS请求,这时候Adguardhome自是无法区分是哪个客户端发过来的请求,所以才出现了后台拦截的全都是 127.0.0.1 的数据。这里小伙伴不需要纠结,影响不大,稳定第一。
AdGuard Home手动设置
如果懒得设置也可以使用别人的代码,不过容易出问题,最好的方法就是自己花个十几分钟设置一下。本次设置的代码如下:
bind_host: 0.0.0.0 bind_port: 3000 users: - name: root password: $2y$10$dwn0hTYoECQMZETBErGlzOId2VANOVsPHsuH13TM/8KnysM5Dh/ve auth_attempts: 5 block_auth_min: 15 http_proxy: "" language: zh-cn theme: auto debug_pprof: false web_session_ttl: 720 dns: bind_hosts: - 0.0.0.0 port: 1745 anonymize_client_ip: false protection_enabled: true blocking_mode: default blocking_ipv4: "" blocking_ipv6: "" blocked_response_ttl: 60 protection_disabled_until: null parental_block_host: family-block.dns.adguard.com safebrowsing_block_host: standard-block.dns.adguard.com ratelimit: 0 ratelimit_whitelist: [] refuse_any: false upstream_dns: - 127.0.0.1:6053 upstream_dns_file: "" bootstrap_dns: - 119.29.29.29 - 223.5.5.5 - 114.114.114.114:53 - 1.1.1.1:53 - 1.0.0.1:53 - 208.67.220.220:53 - 208.67.222.222:53 - 9.9.9.10 - 149.112.112.10 - 2620:fe::10 - 61.128.192.68 - 221.5.203.98 - 218.201.4.3 all_servers: true fastest_addr: false fastest_timeout: 1s allowed_clients: [] disallowed_clients: [] blocked_hosts: - version.bind - id.server - hostname.bind trusted_proxies: - 127.0.0.0/8 - ::1/128 cache_size: 0 cache_ttl_min: 0 cache_ttl_max: 0 cache_optimistic: false bogus_nxdomain: [] aaaa_disabled: false enable_dnssec: false edns_client_subnet: custom_ip: "" enabled: false use_custom: false max_goroutines: 300 handle_ddr: true ipset: [] ipset_file: "" bootstrap_prefer_ipv6: false filtering_enabled: true filters_update_interval: 24 parental_enabled: false safebrowsing_enabled: false safebrowsing_cache_size: 1048576 safesearch_cache_size: 1048576 parental_cache_size: 1048576 cache_time: 30 safe_search: enabled: false bing: true duckduckgo: true google: true pixabay: true yandex: true youtube: true rewrites: - domain: va.zhenge.net answer: 192.168.1.253 blocked_services: [] upstream_timeout: 10s private_networks: [] use_private_ptr_resolvers: true local_ptr_upstreams: [] use_dns64: false dns64_prefixes: [] serve_http3: false use_http3_upstreams: false tls: enabled: false server_name: "" force_https: false port_https: 443 port_dns_over_tls: 853 port_dns_over_quic: 784 port_dnscrypt: 0 dnscrypt_config_file: "" allow_unencrypted_doh: false certificate_chain: "" private_key: "" certificate_path: "" private_key_path: "" strict_sni_check: false querylog: ignored: [] interval: 6h size_memory: 1000 enabled: true file_enabled: true statistics: ignored: [] interval: 720h enabled: true filters: - enabled: true url: https://cdn.jsdelivr.net/gh/o0HalfLife0o/list@master/ad-pc.txt name: 合并乘风 id: 1628750870 - enabled: true url: https://cdn.jsdelivr.net/gh/privacy-protection-tools/anti-AD@master/anti-ad-easylist.txt name: 'CHN: anti-AD' id: 1628750871 - enabled: true url: http://sdwz.icu/TQtFq name: Youtube 去广告 id: 1687101921 - enabled: true url: https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt name: adgk 手机去广告规则 id: 1687101922 - enabled: true url: https://raw.githubusercontent.com/Goooler/1024_hosts/master/hosts name: 澳门皇家赌场及恶意广告主机列表 id: 1687101923 whitelist_filters: - enabled: true url: https://gp.adrules.top/allow-domains-list.txt name: 白名单推荐 id: 1687101925 user_rules: [] dhcp: enabled: false interface_name: "" local_domain_name: lan dhcpv4: gateway_ip: "" subnet_mask: "" range_start: "" range_end: "" lease_duration: 86400 icmp_timeout_msec: 1000 options: [] dhcpv6: range_start: "" lease_duration: 86400 ra_slaac_only: false ra_allow_slaac: false clients: runtime_sources: whois: true arp: true rdns: true dhcp: true hosts: true persistent: [] log_file: "" log_max_backups: 0 log_max_size: 100 log_max_age: 3 log_compress: false log_localtime: false verbose: false os: group: "" user: "" rlimit_nofile: 0 schema_version: 20
5.如何修改Adguardhome密码
如果直接使用上面的代码可能导致主页登录不上去,可以看到代码里面是有一段加密的密码的,这里就需要我们去改一下密码,然后保存生效。
在Adguardhome的基础设置页面,翻到最下面,可以看到有一个功能框,选择改变网页登录密码,点添加。
可以看到网页上出现了一个改变网页登录密码的框,这里输入密码点载入计算模块,点计算即可生成新密码。
将生成的新密码复制到自定义设置里去粘贴一下就可以用新密码登录了。
七、验证已经生效?
采用命令测试最快IP,如果返回多个说明没有设置成功。
nslookup www.taobao.com 127.0.0.1:6053返回的是国内最快的IP
nslookup www.taobao.com 127.0.0.1:5335返回的是国外最快的IP
nslookup www.baidu.com 127.0.0.1:6053返回的是国内最快的IP
nslookup www.baidu.com 127.0.0.1:5335返回的是国外最快的IP