开搞之前先搞清楚几个概念,便于折腾:
【客户端(client)】:指在本地的电脑或者软件,而服务器(server)就是在网上为客户端提供服务的电脑。client是发出请求(request)的一方,而服务器(server)响应它的请求并为其提供服务。
img
【域名系统(DomainNameSystem,缩写:DNS)】是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,是Internet上解决网上机器命名的一种系统,能够使人更方便地访问互联网。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址。
域名解析就像我们初次拜访朋友一样,首先要知道人家的门牌号,然后按照地址去找。在Internet上只知道某台机器的域名还是不够的,还要有办法去找到那台机器。寻找这台机器的任务由网上一种被称为域名服务器的设备来完成的,而完成这一任务的过程就称为域名解析。
可以用IP地址标识,并且可以通过IP地址被访问,但即使是将32位的二进制IP地址写成4个0~255的十位数形式,也依然太长、太难记。因此,人们发明了域名(DomainName),域名可将一个IP地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名,对访问而言,两者是等价的。例如:微软公司的Web服务器的IP地址是207.46.230.229,其对应的域名是www.microsoft.com,不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。
53端口是为(DomainNameServer(DNS域名服务器)服务器所开放的端口,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。通过DNS服务器可以实现域名与IP地址之间的转换,只要记住域名就可以快速访问网站。
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,支持多样化定制。
IPV4,IPV6双栈IP优选机制,在双网情况下,选择最快的网络通讯。
支持最新的TLS,HTTPS协议,提供安全的DNS查询能力。
ECS支持,是查询结果更佳准确。
域名TTL可指定,使访问更快速。
高速缓存机制,使访问更快速。
第二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服务器,只担任转发功能。
IPv4地址:为OpenWrt的网关,也是我们管理OpenWrt的地址,这里设置为192.168.50.2。
子网掩码:和ikuai一致保证同一个网段。
IPv4网关:指向ikuai的网关。保证OpenWrt的上网数据传输到ikuai再传输到外网。
使用自定义的DNS服务器:首先设置一个自定义的DNS,这里我们先设置一个能用的DNS即可,保证我们在设置过程中可以上网,后面设置好了,可以将DNS改为由OpenWrt代理,即输入OpenWrt的网关改成192.168.50.2。
楼主的电信网络没有IPv6服务,全部使用的是IPv4的服务,禁用掉IPv6服务。
lan口高级设置里不勾选IPv6,勾选【开启开机自动运行】和【强制链路】:
开启【TurboACC加速】,如果前面已经开启了,检查网络内的【TurboACC加速】设置是否正确:
只开启前三个即可,DNS缓存后面由SmartDNS来管理。如果开启了会产生冲突,冲突了就会不生效,关闭TurboACC网络加速设置的DNS加速。
打开openwrt的防火墙,SYN-flood防御、丢弃无效数据包起不起用都可。下面启用FullCone-NAT、入站数据、出站数据、转发都设置为接受。
下面lan口开启:IP动态伪装。
一般openwrt防火墙默认有以几条规则,若没有,加上
iptables-tnat-APREROUTING-pudp—dport53-jREDIRECT—to-ports53
iptables-tnat-APREROUTING-ptcp—dport53-jREDIRECT—to-ports53
[-n“$(command-vip6tables)”]&&ip6tables-tnat-APREROUTING-pudp—dport53-jREDIRECT—to-ports53
[-n“$(command-vip6tables)”]&&ip6tables-tnat-APREROUTING-ptcp—dport53-jREDIRECT—to-ports53
自定义规则里再加入下面一条规则,如果现在使用的网卡是eth1或者eth2,这里同样修改为eth1或者eth2。
iptables-tnat-IPOSTROUTING-oeth0-jMASQUERADE
需要设置情况:
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进行简单设置,这一步将ikuai的DNS设置为openwrt代理:
网关:设置为openwrt的网关:192.168.50.2
这样上网设备发出的数据,到达ikuai,ikuai会发送到openwrt进行一番处理,然后在发送到外网。回程的数据,ikuai也会发送到openwrt进行一番处理,然后转发到各个设备。
DNS:设置为openwrt代理:192.168.50.2
安装:在istore中输入SmartDNS,查找软件包安装即可,一般openwrt都带有这个服务,这个就不多说了。
在服务中打开SmartDNS:
基本设置→SmartDNS勾选启用→服务器组名称:china→端口默认【6053】→开启TCP服务器→勾选双栈IP优选→勾选域名预加载→勾选缓存过期服务→重定向默认「无」→缓存大小设为:1000000→域名TTL最大值设为:3600→勾选启动→保存&应用。
【双栈IP优选】:应注意自己的设备是否完全支持IPv6,尤其是网络运营商是否支持
【重定向】:一定不要选择,后面我们用AdguardHome进行重定向。还有就是一些版本的SmartDNS,没有重定向功能,改成了自动设置DNSMASQ,如果是这个版本注意不要点自动设置DNSMASQ。因为我自己是用的IPV4公网,这里IPV6的两项设置不勾选,如果用IPV6勾选此两项。
【停用HTTPS地址解析】:如果下面上游路由器添加HTTPS协议的话,停用HTTPS地址解析这一项不要勾选。
【缓存大小】:可根据需求填入,这里填入的数字是指缓存的条数,楼主写了个十万「100000」,自己可以多写几条。
配置参考规则
①为提高缓存命中率,适当增大cache的记录数、通过cache-size来设置缓存记录数。内存大的情况下,可适当调大。可以提高cache效率,加快访问速度
④数量方面:SmartDNS有测速机制,在配置上游服务器时,建议配置多个上游DNS服务器,包含多个不同区域的服务器,但总数建议在10个左右。
⑤隐私方面:默认情况下,SmartDNS会将请求发送到所有配置的DNS服务器,若上游DNS服务器使用DNS,或记录日志,将会导致隐私泄漏。所以在配置的时候要考虑:
配置使用可信的DNS服务器。
优先使用TLS查询。
设置上游DNS服务器组。
force-qtype-SOA65
按照以上规则我们开始进行配置
这里将DNS分别进行分组,当浏览国内网页时使用国内DNS,在访问国外网站时自动使用国外DNS。点新增开始下一步:
按照以下设置分别将下面的国内DNS插入进去,注意这里我们使用了国内国外分流,国内国外不宜添加过多,添加之前可以在网上测试下DNS的速度,国内国外各添加十条就够了。DNS测试网站
DNS服务器名称:自己随便定义
服务器组:china(自己随便定义,这个是国内组的意思)
端口:default(默认端口)
类型:udp(国内统一填写)
首先添加电信运营商给的DNS。这样在查询的时候会优先查询。打开ikuaiwan口拨号页面,查看供应商给的DNS,可以看到电信供应商给了两个DNS:
将两个DNS复制出来,在SmartDNS分别添加上去。
116.228.111.118
180.168.255.18
添加完成,将上面的DNS删掉,尽量保证电信供应商的排在第1、2位置。
关于DNS,可以到dns.ip.cn查询:
阿里公共DNS:223.5.5.5,223.6.6.6类型选择:UDP
腾讯公共DNS+:119.29.29.29类型选择:UDP
百度公共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协议要添加UDP、TCP和TLS三种协议。
服务器组选择:guowai
添加一项额外的服务器参数(从默认服务器组排除),填入:
-exclude-default-group
下面搜集了这些常见的国外DNS:
GoogleDNS:8.8.8.8,8.8.4.4类型选择:tls(UDPTCP也可以加入)
Google加密DNS:dns.google类型选择:tls
CloudFlare:1.1.1.1类型选择:tls(UDPTCP也可以加入)
IBMQuad9:9.9.9.9类型选择:tls(UDPTCP也可以加入)
NortonConnectSafe:199.85.126.10199.85.127.10类型选择:UDP
威瑞信:64.6.64.664.6.65.6类型选择:UDP
Comodo**安全DNS:**8.26.56.268.20.247.20类型选择:UDP
DNSWatch**:**84.200.69.8084.200.70.40类型选择:UDP
OpenDNS:208.67.222.222,208.67.220.220类型选择:tls(UDPTCP也可以加入)
韩国电信DNS:168.126.63.1,168.126.63.2类型选择:tls(UDPTCP也可以加入)
V2EXDNS:199.91.73.222,178.79.131.110类型选择:tls(UDPTCP也可以加入)
有的版本的SmartDNS是有从默认服务器组排除这个选项的,如果有这个选项,国外的DNS服务器在添加的时候,勾选就可以了。这样就可以把国内组进行分开,访问国内网站的时候使用国内DNS,使用国外网站的时候,选择国外的DNS服务器。
启用第二DNS服务器,端口默认「5335」,因为很多插件的DNS服务中用的就是5335端口,这里设置后好了之后,直接选用即可。
服务器组我们选择上面的国外分组,其他的对照设置。
启用→开启「TCP服务器」→本地端口设为5335→服务器组:guowa→勾选跳过测速→勾选跳过address规则→勾选跳过双栈优选→勾选跳过cache→启用——保存&应用
下面四项勾选,第二DNS服务器设置完毕。
在SmartDNS自定义中添加下面两项分组信息,其他的删掉即可,只保留主体部分:
bind:6053-groupchina
bind:5335-groupguowai
SmartDNS自定义备份
#Addcustomsettingshere.
#setloglevel#log-level[level],level=fatal,error,warn,notice,info,debug#log-levelerror
#log-sizek,m,g#log-size128k
#log-file/var/log/smartDNS.log#log-num2
#ListofhoststhatsupplybogusNXdomainresults#bogus-nxdomain[ip/subnet]
在服务里打开AdGuardHome,可以看到基本设置、日志、手动设置三个选项。前两个是wed端可视设置,手动设置就是通过命令进行设置。
首先看第一项基础设置
首先更新核心版本,现在可以看到红色的状态是未运行和未重定向,如果特殊上网正常的话是可以更新的,点击检查更新,更新核心:
如果因为网络问题无法更新,那只能手动更新了。打开AdGuardHome,找到点击右下角,作者编译好的最新的版本。
打开列表,找到自己对应的版本,一般X8664位平台选择换个版本即可。
下载打开压缩包,第一个AdGuardHome就是核心文件,我们只用到这一个就可以了。
我们打开winSCP,电脑上没有的可以去下载安装下:
安装完成后,新建连接。输入主机名,openwrt的IP地址,端口号不用该,输入用户名和密码,连接。
点击【打开目录】,路径输入/usr/bin/AdGuardHome/,确定打开。
将刚才下载的复制粘贴进来:
右击属性,分配权限,权限和下面一样就可以了。
这时可以看到核心已经有了。
更新完核心之后可以看到,重定向选项,重定向方式有【作为DNSMASQ的上游服务器】、【重定向53端口到Adguardhome】、【使用53端口替换DNSMASQ】3种选择,这里先选择无,就是先不重定向,等到后面设置好了,我们再开启。
先来捋一下,AdGuardHome的上级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需要开启ipv6natredirect否则如果客户端使用ipv6过滤无效,不以dnsmasq为上游酸酸乳plus失效)
使用53端口替换dnsmasq(需要设置AGH的dnsip为0.0.0.0,AGH和dnsmasq的端口将被交换,不以dnsmasq为上游酸酸乳plus失效)
然后勾选【详细日志】、【开机后网络准备好时重启】、【在关机时备份工作目录文件】所有的选项,保存启动AdGuardHome。
这时可以看到,AdGuardHome已经运行,但是还有一个红色的未重定向,这是正常的。
后打开下面框选的位置,打开AdGuardHome的web配置页面。
也可以直接输入旁路由地址:端口号,楼主旁路由地址是192.168.50.2,可以直接输入192.168.50.2:3000进行配置。会出来个网页。点击开始配置进入下一步:
网页管理界面——监听接口——所有接口,端口号设置为默认的3000。也可以设置成其他的,这个只要不和现用的其他端口冲突即可。
DNS服务器——监听接口——所有接口,端口号设置为5351。(这个可以随便设置一个,同样也是不冲突就行)
点击进入下一步,检查有没有问题,可以把这些内容保存下来,省的以后忘记或者后面设置忘记了。
为保证AdGuardHome可以开始正常工作,您需要在设备上对其进行配置。AdGuardHomeDNS服务器正在监听以下地址:
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
首先【常规设置】
常规设置里【使用过滤器和Hosts文件以拦截指定域名】勾选开启,其他选择关闭。不要问为什么,问就是稳定优先,已经够用,开了会出bug,网页崩溃、显示不全、打不开等种种问题。
日志和统计大家根据自己的喜好设置就可以了,这个没多大影响。
再打开【DNS设置】页面,设置AdGuardHome的上游DNS服务器:
前面我们已经在在SmartDNS设置了国内DNS端口为端口默认【6053】
SmartDNS第二DNS服务器(国外DNS)的端口为【5335】
这时候我们就要将AdGuardHome的上游DNS服务器设置为SmartDNS,将AdGuardHome过滤后的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。
接下来到Adguardhome的网页控制面板中,将BootstrapDNS服务器设为127.0.0.1:6053。
速度限制:0
这里都空着即可,采用上游DNS服务器,也就是让SmartDNS来管理这些,如果设置会产生冲突。
将阻止匹配DNS拦截清单的域名,这里添加的清单就是一种在线的TXT文件,而且是有专人维护的。可能是公司或者是大神来维护。而TXT文件里面就是一条一条网站信息。
3.【EasylistChina针对国内的补充规则】easylist-downloads.adblockplus.org/easylistchina.txt
5.【HalfLife合并规则,合并自EasylistChina、EasylistLite、CJX’sAnnoyance】raw.githubusercontent.com/o0HalfLife0o/list/master/ad-pc.txt
9.【ad-mo.txt合并自Easylist、EasylistChina、EasyPrivacy、CJX’sAnnoyance】raw.githubusercontent.com/o0HalfLife0o/list/master/ad-mo.txt
17.【ad-edentw.txt合并自AdblockWarningRemovalList、ABPfilters、anti-adblock-killer-filters】raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt
20.【Anti-ADCDN加速】anti-ad.net/easylist.txt
27.【EasyPrivacy去跟踪从网络上完全删除所有形式的跟踪,包括Web错误、跟踪脚本和信息收集,从而保护您的个人数据】easylist-downloads.adblockplus.org/easyprivacy.txt
28.【Adbyby】raw.githubusercontent.com/adbyby/xwhyc-rules/master/lazy.txt
30.【Adbybyvideo】raw.githubusercontent.com/adbyby/xwhyc-rules/master/video.txt
33.【其他大神推荐,3个随便选一个即可】
链接:cats-team.github.io/AdRules/DNS.txt
链接:gitlab.com/cats-team/adrules/-/raw/main/DNS.txt
链接:adrules.top/DNS.txt
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域名及其所有子域名
比如我们要放行值得买网站及其子域名,只要添加一行代码就可以了,用于访问个别网站时候有BUG时快速添加。
回到基本设置,会看到Adguardhome运行中、已重定向。
【作为DNSMASQ上游服务器】,可以看到前面的重定向变成了5351重定向,这个也就是AdGuardHome的DNS监听端口,如果你设置成8336、8338或者其他,这里显示的就是你设置的端口值。选择【作为DNSMASQ的上游服务器】,这样设置之后Adguardhome变成了DNSMASQ的上级DNS服务器。
最后一步设置DNSMASQ。打开网络——DHCP/DNS,可以看到DNSMASQ服务,主要是解除DNSMASQ的DNS功能,只保留转发功能,让DNSMASQ作为AdGuardHome的下级服务生效。
我们到DNSMASQ看下目前的状态,在【网络】→【DHCP/DNS】→DNS转发,可以看到,DNS转发内已经自动设置成了127.0.0.1#5351。如果转发路径不对,就强制改成127.0.0.1#5351。
这里忽略掉解析文件,不用DNSMASQ的解析。
如果选择加载:当客户端(client)设备的DNS请求的域名正好在/etc/hosts中的情况下,DNSMASQ直接回复/etc/hosts域名对应的IP地址。
如果选择不加载:DNSMASQ则会将请求转发到公共的DNS服务器去解析,而不是使用/etc/hosts中的记录,通过—no-hosts选项可以选择是否加载/etc/hosts内容作为DNSMASQ的DNS的本地缓存。
【/etc/resolv.conf】该文件主要记录DNS的NameServer,对于没在/etc/hosts记录的域名,系统向NameServer发起DNS请求,从而解析域名。
前半部分保持默认即可:
同样在在【网络】→【DHCP/DNS】高级设置里面DNSMASQ还是在监听53端口。DNS查询缓存的大小设置为0。不使用DNSMASQ的DNS缓存。点击保存生效。
到这里整个设置完成了,从DNSMASQ→AdGuardhome→SmartDNS设置好了。DNSMASQ监听本地【53端口】,将请求转发到AdGuardHome监听的【5351端口】,然后AdGuardHome再转发到SmartDNS查询最快的DNS,然后提交给DNSMASQ,然后发送到ikuai主路由。回程数据首先发送到ikuai,然后经过SmartDNS交给AdGuardhome进行处理,返回到DNSMASQ,然后发送回设备。
查询流程:
如果懒得设置也可以使用别人的代码,不过容易出问题,最好的方法就是自己花个十几分钟设置一下。本次设置的代码如下:
采用命令测试最快IP,如果返回多个说明没有设置成功。
nslookupwww.taobao.com127.0.0.1:6053返回的是国内最快的IP
nslookupwww.taobao.com127.0.0.1:5335返回的是国外最快的IP
nslookupwww.baidu.com127.0.0.1:6053返回的是国内最快的IP
nslookupwww.baidu.com127.0.0.1:5335返回的是国外最快的IP