这套方案也快用一年了,还算稳定于是分享出来
0x00.前言
DNS
套娃(bushi
0x01.Cloudflare Gateway
最上游使用的是Cloudflare for Teams
中的Gateway
,在Locations
加一个位置就可以获得独一无二的DNS
服务器地址,目前包含如下四种
IPv4
IPv6
DNS over HTTPS
DNS over TLS

当然使用他家的1.1.1.1
或者谷歌的8.8.8.8
也是没有问题的,Gateway
的优点之一在于所有查询都是有记录的

Teams
的Free
版本订阅可追溯至最近24h
,对于家用足够了,方便进行后期二次审计

同时也有自带的分析页面,可以看到最近一季度的解析量是55M

分类占比一半多(50.3%
)的是Technology

0x02.SmartDNS
SmartDNS
是一个运行在本地的DNS
服务器,SmartDNS
接受本地客户端的DNS
查询请求,从多个上游DNS
服务器获取DNS
查询结果,并将访问速度最快的结果返回给客户端,提高网络访问速度。
同时支持指定特定域名IP
地址,并高性匹配,达到过滤广告的效果。与dnsmasq
的all-servers
不同,smartdns
返回的是访问速度最快的解析结果 架构
那么是直接将Cloudflare Gateway
的DNS
服务器填入网关?然而并不是,这里是填入到了SmartDNS
的配置项之中
实测直接使用的话浏览器访问网页的加载速度比较慢,猜测是服务器位于国外,发起解析请求的速度肯定是赶不上国内的机子了,单独使用并不推荐除非可以忍受巨慢的解析
那么如何解决这个问题呢?从/etc/smartdns/smartdns.conf
中的server
配置项可以看出实际上还写入了其他的DNS
提供商,然后利用SmartDNS
的主打?功能测速后返回访问速度最快的解析结果SmartDNS
也推荐配置多个上游服务器,反正测速交给他就好了嘛(不过要是说因为写入了其他提供商而失去了Cloudflare Gateway
的意义自己也无力反驳草,算了不管了

测速模式配置speed-check-mode ping,tcp:80,tcp:443
,顾名思义就不做解释了
同时,在这一环节也可以开启审计日志


0x03.AdGuard
从上述审计日志的内容可以发现请求来自192.168.25.246
的地址,而这个地址对应的服务是HomeAssistant
,而AdGuard Home
是以加载项的方式引入的

AdGuard
主要用来进行自定义拦截过滤(广告+
追踪),AdGuard
的上游服务器只有SmartDNS
这一个来源

可以按需订阅第三方整理好的列表,当然有误封风险了,可以核实后再加到白名单里取消拦截

平时有需要封禁的域名只需填入到自定义过滤规则
的列表即可,前两个环节可以开启审计日志,最后的这个环境自然也是可以的,并且是最便于查看的

AdGuard Home
本身是支持IPv4
和IPv6
两种方式访问的,但可能由于在HomeAssistant
中Docker
网络配置的原因,目前只支持IPv4

把这个IPv4
地址填到各种设备的网络DNS
设置项中就算完成了整个流程,DNS
套娃(bushi
0x04.后记
总结一句话:Cloudflare Gateway
用于获得纯净的DNS
解析结果,SmartDNS
用于测速后返回访问速度最快的解析结果,AdGuard
用于自定义拦截过滤
虽然看起来每个环节的部分功能都有重复之处,但是实践却发现每个环节都各自其职,必不可缺
最后再说下Cloudflare for Teams
,最开始只有Gateway
功能,而现在实装的功能越来越多,并且无料享受
这两天实际体验了下新出的Access
和Devices
等功能,后者当成备用梯子是真香2333


至此本文使命完成