OpenWrt 联动 iKuai 配置 AdGuard Home 联动 SmartDNS
前言
当我想学习AdGuard Home
资料收集的时候
我发现一个很好的文章
就是来自什么值得买的纵笔浮生大佬
1 | https://post.smzdm.com/p/axz6z7w9/ |
因为懒,所以可能会借用大佬的拓扑图
带定头盔
- 本文仅作学习自用记录
- 如若侵权,联系必删
家庭网络环境
除了网段和设备细节相关
其实我和大佬的拓扑差不多
所以我直接借用大佬的拓扑图
拟实现 DNS 转发流程
设置最核心的部分就是DNS转发端口的衔接,而我们要做的就是把DNSMASQ、AdGuard Home、SmartDNS三个插件里的DNS服务器功能分成三个层级,实现层层转发。
依次是第一级DNSMASQ,第二级AdGuard Home,第三级SmartDNS。
经过设置之后,OpenWrt 的默认DNS服务器为DNSMASQ,本地的DNS由OpenWrt的SmartDNS负责解析缓存,DNSMASQ作为最底层的DNS服务器,只担任转发功能。
客户端 DNS 请求流程
【客户端(client)】国内请求
–> 192.168.1.1:53
–> 192.168.2.1:53(DNSMASQ)
–> 192.168.2.1:5351(AdGuard Home)
–> 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(AdGuard Home)
–> 192.168.2.1:5335 (SmartDNS缓存)
–> 上游国外DNS公共服务器
–> 返回最快DNS客户端
OpenWrt 基本配置
Lan 基本设置
IPv4地址:为OpenWrt的IP地址,也是我们管理OpenWrt的地址。- 子网掩码:和
iKuai一致,保证同一个网段。 IPv4网关:指向iKuai的网关。保证OpenWrt的上网数据传输到iKuai再传输到外网。- 使用自定义的
DNS服务器:首先设置一个自定义的DNS,这里我们先设置一个能用的DNS即可,保证我们在设置过程中可以上网,后面设置好了,可以将DNS改为由OpenWrt代理。
关闭 DHCP 功能
- 关闭
DHCP服务,统一由iKuai分配。
- 因为
IPv6技术仍未成熟,内网也没必要用IPv6,果断关掉减少Bug。
Lan 高级设置
- 开启
开启开机自动运行 - 开启
强制链路 - 禁用
使用内置的IPv6管理
Turbo ACC 加速
只开启前三个即可,DNS缓存后面由SmartDNS来管理。
防火墙设置
基本设置
- 可选
SYN-flood 防御 - 可选
丢弃无效数据包 - 启用
FullCone-NAT - 接受
入站数据 - 接受
出站数据 - 接受
转发 - Lan 开启
IP 动态伪装
自定义规则
- 放行
DNS流量
1 | iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 |
- 加入回程旁路由统一转发代码
-o后参数请根据网卡实际名称修改
1 | iptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE |
需要设置情况:
-
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旁路由WANLAN共用eth0,不用设置。 -
iKuai单臂路由情况,OpenWrt作为拨号路由(有拨号就有WAN口),不用设置。
iKuai DNS 设置
- 网关:设置为
OpenWrt的IP地址。 DNS: 设置为OpenWrt的IP地址。
SmartDNS 设置
基本设置
- 服务器名称:
smartdns - 本地端口:
6053 - 禁用
自动设置Dnsmasq
高级设置
- 启用
TCP服务器 - 禁用
IPV6服务器 - 启用
双栈IP优选 - 启用
域名预加载 - 启用
域名过期服务 - 禁用
停用HTTPS地址解析 - 缓存大小:
1000000 - 域名TTL最大值:
3600
配置参考规则
SmartDNS 提供了域名缓存机制:对查询的域名,进行缓存,缓存时间符合 DNS TTL 规范。
-
为提高缓存命中率,适当增大
cache的记录数、通过cache-size来设置缓存记录数。内存大的情况下,可适当调大。可以提高 cache 效率,加快访问速度 -
适当设置最小
TTL值:通过rr-ttl-min将最低DNSTTL时间设置为一个合理值,延长缓存时间。建议是超时时间设置在10~30分钟,避免服务器域名变化时,查询到失效域名。 -
开启域名预获取功能:通过来启用域名预先获取功能,提高查询命中率。
配合上述TTL超时时间,SmartDNS将在域名TTL即将超时使,再次发送查询请求,并缓存查询结果供后续使用。频繁访问的域名将会持续缓存。此功能将在空闲时消耗更多的CPU。 -
数量方面:
SmartDNS有测速机制,在配置上游服务器时,建议配置多个上游DNS服务器,包含多个不同区域的服务器,但总数建议在10个左右。 -
隐私方面:默认情况下,
SmartDNS会将请求发送到所有配置的 DNS 服务器,若上游DNS服务器使用DNS,或记录日志,将会导致隐私泄漏。
配置上游服务器
添加国内 DNS 服务器
- DNS服务器名称: 自己设置
- 服务器组:
China - 端口:
default(默认端口) - 类型:
UDP(国内统一设置)
添加国际 DNS 服务器
- DNS服务器名称: 自己设置
- 服务器组:
Global - 端口:
default(默认端口) - 类型: 查表得
- 启用
从默认组中排除 - 服务器参数:
-exclude-default-group
查询 DNS
1 | https://dns.ip.cn/ |
国内 DNS 列表
| 名称 | 主要 DNS 服务器 | 备用 DNS 服务器 | 类型 |
|---|---|---|---|
| 本地电信 | 202.96.128.166 | 202.96.134.133 | UDP |
| 本地移动 | 211.136.192.6 | 120.196.165.24 | UDP |
| 114 DNS | 114.114.114.114 | 114.114.115.115 | UDP |
| 阿里 AliDNS | 223.5.5.5 | 223.6.6.6 | UDP |
| 百度 BaiduDNS | 180.76.76.76 | UDP | |
| DNSPod DNS+ | 119.29.29.29 | UDP | |
| 华为云 DNS | 122.112.208.1 | 139.9.23.90 | UDP |
| CNNIC SDNS | 1.2.4.8 | 210.2.4.8 | UDP |
| DNS 派 电信/移动/铁通 | 101.226.4.6 | 218.30.118.6 | UDP |
| DNS 派 联通 | 123.125.81.6 | 140.207.198.6 | UDP |
国际 DNS 列表
| 名称 | 主要 DNS 服务器 | 备用 DNS 服务器 | 类型 |
|---|---|---|---|
| Google DNS | 8.8.8.8 | 8.8.4.4 | TLS |
| CloudFlare | 1.1.1.1 | TLS | |
| IBM Quad9 | 9.9.9.9 | TLS | |
| 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 |
| 韩国电信DNS | 168.126.63.1 | 168.126.63.2 | TLS |
| V2EX DNS | 199.91.73.222 | 178.79.131.110 | TLS |
设置第二 DNS 服务器
- 本地端口:
5335 - 服务器组:
Global - 禁用
跳过测速 - 禁用
跳过address规则 - 禁用
跳过双栈优选 - 禁用
跳过cache
然后我们启用并保存&应用
自定义设置
在SmartDNS自定义中添加下面两项分组信息
1 | bind:6053 -group China |
SmartDNS 自定义备份
1 | # Add custom settings here. |
AdGuard Home OpenWrt 配置
更新核心
如果你的境界足够正常的话
我们直接更新核心版本就OK
重定向
按照luci-app-adguardhome作者的注释
使用作为 DNSMASQ 的上游服务器是比较稳定的方式
其他配置
- 开启
详细日志 - 开启
开机后网络准备好时重启 - 开启
在关机时备份工作目录文件
AdGuard Home 初始化配置
端口设置
- 网页管理界面(所有接口)端口:
3000
DNS服务器(所有接口)端口:5351
设置网页管理界面账号密码
确认 AdGuard Home 配置
AdGuard Home Web 配置
常规设置
- 开启
使用过滤器和Hosts文件以拦截指定域名
仅开启上述功能就🆗了
剩下的功能玩不动分分钟断网
日志配置
按照大家自己的喜好配置
统计配置
按照大家自己的喜好配置
DNS 设置
上文我们已经把SmartDNS配置好了
这时候我们就要将AdGuard Home的上游DNS服务器设置为SmartDNS
将AdGuard Home过滤后的 DNS 请求再转发给 SmartDNS
- 国内 DNS :
127.0.0.1:6053
- 国际 DNS :
127.0.0.1:5335
上游 DNS 服务器
- 设置上游 DNS 服务器
1 | 127.0.0.1:6053 |
- 设置运行模式为
并行请求
- 设置
Bootstrap DNS 服务器为127.0.0.1:6053
DNS 服务配置
速度限制设置为0
DNS 缓存配置
默认空着就🆗
让SmartDNS来管理
AdGuard Home 过滤器配置
DNS黑名单设置
过滤器 --> DNS 黑名单
添加官方列表
添加黑名单 --> 从列表中选择
添加第三方黑名单
AdGuard 默认的内置规则里很多选择,规则一定不要搞太多,一两个综合性的规则列表就已足够覆盖大部分情况,如果同时使用,这些规则可能会冲突,出现很多莫名其妙的问题,使用几个自己用的顺手的就可以了。有的规则带有两个或者两个以上的源头,可以留着以后失效之后使用。
添加黑名单 --> 添加一个自定义列表
第三方黑名单推荐
1 | # 【推荐】目前中文区命中率最高的广告过滤列表,实现了精确的广告屏蔽和隐私保护,屏蔽广告域名、电视广告、APP 内置广告,同时屏蔽了一些日志收集、大数据统计等涉及个人隐私信息的站点,能够保护个人隐私不被偷偷上传 |
DNS 白名单
有误杀可尝试使用白名单
添加到 AdGuard Home 的允许清单
添加白名单
过滤器 --> DNS 白名单 --> 添加白名单
白名单推荐
1 | https://adrules.top/allow-domains-list.txt |
自定义规则
使用Adguard 过滤语法规则
轻轻松松Ban掉
1 | # 拦截 example.org 域名及其所有子域名 |
AdGuard Home 重定向
OpenWrt 回到基本设置
就会看到AdGuard Home 运行中已重定向
并且重定向变成了5351重定向
DNSMASQ 设置
基本设置
网络 --> DHCP/DNS --> DNS转发
发现已经自动设置成127.0.0.1#5351
如果没有就直接设置为127.0.0.1#5351
这步操作主要是解除 DNSMASQ 的 DNS 功能
只保留 DNSMASQ 的转发功能
让 DNSMASQ 作为 AdGuard Home 的下级服务生效
HOSTS 和解析文件
这里忽略掉解析文件,不用DNSMASQ的解析。
选项解释
1 | /etc/hosts: 记录本地配置的域名和 IP 的映射的文件,是域名解析(如 ping,http 访问)时域名的第一解析方式。DNSMASQ可以选择加载 /etc/hosts到本地缓存,也可以选择不加载。 |
高级选项
DNS服务器端口:53DNS查询缓存的大小:0
设置完成
DNSMASQ --> AdGuard Home --> SmartDNS
DNSMASQ监听本地【53端口】- 将请求转发到
AdGuard Home监听的【5351端口】 - 然后
AdGuard Home再转发到SmartDNS查询最快的DNS - 然后提交给
DNSMASQ - 然后发送到
iKuai主路由 - 回程数据首先发送到
ikuai - 然后经过
SmartDNS交给AdGuard Home进行处理 - 返回到
DNSMASQ - 然后发送回设备
知识储备
DNS
域名系统(Domain Name System,缩写:DNS)】是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,是 Internet 上解决网上机器命名的一种系统,能够使人更方便地访问互联网。就像拜访朋友要先知道别人家怎么走一样,Internet 上当一台主机要访问另外一台主机时,必须首先获知其地址。
域名解析
域名解析就像我们初次拜访朋友一样,首先要知道人家的门牌号,然后按照地址去找。在 Internet 上只知道某台机器的域名还是不够的,还要有办法去找到那台机器。寻找这台机器的任务由网上一种被称为域名服务器的设备来完成的,而完成这一任务的过程就称为域名解析。
可以用 IP 地址标识,并且可以通过 IP 地址被访问,但即使是将 32 位的二进制 IP 地址写成 4 个 0-255 的十位数形式,也依然太长、太难记。因此,人们发明了域名 (Domain Name),域名可将一个 IP 地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的 IP 地址,也可以输入其域名,对访问而言,两者是等价的。
DNS 端口
53 端口是为 Domain Name Server (DNS域名服务器)服务器所开放的端口,主要用于域名解析,DNS 服务在 NT 系统中使用的最为广泛。通过 DNS 服务器可以实现域名与 IP 地址之间的转换,只要记住域名就可以快速访问网站。
DNSMASQ DNS
OpenWrt 默认使用的是 DNSMASQ 来管理 DNS 默认监管的 53 端口。我们这些上网的设备发出的 DNS 请求都是先到这里,然后再通过 DNS 转发(在常规设置中可以更改)送到网关,最后到运营商等 DNS 服务器进行查询。
DNSMASQ 是一个轻量级的 DNS 和 DHCP 服务器,大约 200KB 左右,并且完整的包含了 DNS 服务器和 DHCP 服务器功能,非常适合 flash 空间有限的嵌入式系统。DNSMASQ 作为 OpenWrt 默认的 DNS 服务器和转发器,接收 Client 的 DNS 查询请求,并回复 DNS 查询结果。查询的结果可以来自本地缓存和公共 DNS 服务器,如果本地缓存没有记录,DNSMASQ 会将请求转发到公共的 DNS 服务器,并将公共的 DNS 解析的结果回复到请求的设备。
SmartDNS
SMARTDNS 在设计上并不是替换 DNSMASQ 的,SMARTDNS 主要功能集中在 DNS 解析增强上,增强部分有:
- 多上游服务器并发请求,对结果进行测速后,返回最佳结果;
address,ipset域名匹配采用高效算法,查询匹配更加快速高效,路由器设备依然高效。- 域名匹配支持忽略特定域名,可单独匹配
IPv4,IPV6,支持多样化定制。 - 针对广告屏蔽功能做增强,返回
SOA,屏蔽广告效果更佳; IPV4,IPV6双栈IP优选机制,在双网情况下,选择最快的网络通讯。- 支持最新的
TLS,HTTPS协议,提供安全的DNS查询能力。 ECS支持,是查询结果更佳准确。- 域名
TTL可指定,使访问更快速。 - 高速缓存机制,使访问更快速。
- 第二
DNS支持自定义更多行为。
