DNS 分流方案

7 天前
 xuxiake

之前使用 OpenClash 自带的分流,总感觉打开国内网站很慢,例如京东经常加载半天,微信图片也加载半天,遂在网上研究了下,得到现在的 DNS 分流方案 AdGuardHome+OpenClash+MosDNS ,现在完全不会影响国内网站,上网体验非常丝滑

网络环境

目前我是使用的旁路由方案,主路由是爱快,负责拨号上网,旁路由是 OpenWrt ,负责科学以及 DNS 服务器。IPv4 这边网关以及 DNS 都指向 OpenWrt ,打开 IPv6 ,开启 DHCPv6 ,但是不开启 IPv6 DNS ,DNS 复用 IPv4 的,IPv6 的网关使用默认配置,也就是指向爱快。

DNS 服务器

数据流向是 AdGuardHome -> OpenClash -> MosDNS

  1. DNS 主入口直接用 AdGuardHome ,彻底弃用 OpenWrt 自带的 dnsmasq ,具体配置是使用 53 端囗替换 dnsmasq ,这样广告拦截效率更高,广告可以在第一道关卡就被拦截,不用流转多道

  2. OpenClash 的 NameServer 、FallBack 、Default-NameServer 都只设置一个上游,就是 MosDNS

  3. MosDNS 负责最终的分流以及 DSN 缓存,配置好国内 DNS 服务器以及远程 DNS 服务器,有一个关键选项要开启,远程 DNS 首选 IPv4 ,这样对于需要代理的国外域名就只会返回 IPv4

总结

这套配置的核心思想是对于国内域名使用 IPv6 进行访问,网关直接就到爱快主路由,摆脱 OpenClash 对于国内网站的影响,目前国内主流网站 IPv6 建设基本已经非常完善,使用 IPv6 完全没有问题,如果没有 IPv6 也会自动 fallback 到 IPv4 。需要代理的国外域名,由于只有 IPv4 ,网关指向 OpenWrt ,就会被 OpenClash 代理到。

不足

虽然是分流了,但是 DNS 泄露检测不通过,这个目前还在研究

4275 次点击
所在节点    宽带症候群
73 条回复
Laoz666
6 天前
@xuxiake #8 出了 ping 和 trace 的时候 我感觉没什么问题
yangfan1999
6 天前
用 ikuai + openwrt 做透明代理,即使旁路由故障也不影响国内网络访问。参考的是这篇文档: https://www.jackiewu.top/article/best-alternative-solution-for-transparent-gateway
vitoegg
6 天前
@xuxiake MosDNS 可以控制哪些结果缓存,哪些结果不缓存的,只要让 Fake IP 不缓存就可以了(不要经过 cache ,并且 ttl 指定为 1 )
sxwsuieyqwe11
6 天前
@xuxiake 配置 upstream_dns_file 就可以了,具体参考 https://github.com/Leev1s/FAK-DNS
huizai2022
6 天前
我直接 2 个 AdGuardHome 一个国内 一个国外
BlackSas
6 天前
我是用 surge 实现的。clash 在这方面确实有问题,openwrt 里又复杂而且修改验证也比较麻烦。
NGUTHONG
6 天前
我觉得有点太复杂了,流量路径上设这么多关卡还都是全局配置,但凡一个插件出问题家里网络不就炸了吗
bclerdx
6 天前
@Laoz666 那应该设置与和 DNS 的关系是啥?
GotKiCry
6 天前
现在是 SmartDNS <- MosDNS <- Adh <- ShellCrash
之前用 MosDNS <- Adh <- ShellCrash 总是会遇到网页加载慢或者第一次打不开第二次刷新就打开的情况,一直找不到什么问题,换成 SmartDNS 请求 MosDNS 做分流后就没啥问题了
EGOISTK21
6 天前
@NGUTHONG 我用了 OSPF 来解决这个问题,除了节点维修的时候 fallback 了一次,已经稳定运行了两年了
xuxiake
6 天前
@NGUTHONG 反正是 allinboom ,问题不大[狗头]
likeflower
6 天前
C 规则前面插入
- GEOSITE,CN,DIRECT
- GEOIP,CN,DIRECT,no-resolve
hiyoi
6 天前
目前用 agh -> paopaodns ,自建的 paopaodns 内部就有 mosdns 分流了,这样保证无污染。代理使用 nikki ,关闭 dns 劫持,开启 ipv4 代理,按需选要代理的设备,模式用 tproxy ,不用 fakeip(问题太多),mihomo 配置只保留一组 nameserver 指向 agh 就行了。

稳定运行 1 年多了。
hjj0529
6 天前
之前我也用这个方案,后来发现 docker 容器里面部署的 vpn 不好使,技术太菜,没找出原因,干脆不搞了。
lozt
6 天前
我自己家里现在用的是 adguardhome -> mihomo(redir-host),mihomo 里配置的上游 dns 默认国外的,policy 里配置 cn 的域名就走国内。似乎也还行- -,没太关注性能
linhongjun
6 天前
不知道你们天天都在干嘛 搞这么复杂
starrys
6 天前
@Serino #33 dns.fallback 具体是有什么问题?
我的理解是,clash 会并发地向 dns.nameserver 与 dns.fallback 这两组 DNS 服务器发出 DNS 请求,关键问题来了,『需要等待 dns.fallback 中的服务器返回 DNS 结果后,才能决定使用哪一组 DNS 服务器的结果』,然而,网上流传的配置里面的 dns.fallback 服务器往往是国外的 DoH/DoT 、是比较慢的,这就明显拖慢上网速度。
看我理解的对吗?

https://clash.wiki/configuration/configuration-reference.html
xpn282
6 天前
我是觉得不用搞那么复杂,OpenClash 的 dns 分流系统足够使用了,就看你怎么写咯,我的就很简单,一切正常,我是用 redir-host 模式:
dns:
nameserver:
- 运营商 dns
nameserver-policy:
geosite:gfw:
- 国外 dns

以上的意思是:gfw 黑名单域名使用国外 dns 解析,其余的都用运营商 dns 解析,我觉得够用了,简单实用,不需要搞 fallback 之类的。

当然还可以根据自己的需求修改合适自己的分流方案。
比如国内域名用国内 dns ,其余的全部用国外 dns 。
另外还可以给国外 dns 做一层代理,实现代理 dns 解析,防止在 redir-host 模式下,直接使用国外 dns 的时候被污染,导致访问 GitHub 之类的异常。

我个人觉得 OpenClash 的 dns 系统足以应对 dns 分流,不需要借助其他工具,就看你怎么写怎么玩咯。
xuxiake
5 天前
@hjj0529 docker 容器为啥要部署 VPN 。。
xuxiake
5 天前
@linhongjun 反正就是折腾嘛[狗头]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1142009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX