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 泄露检测不通过,这个目前还在研究

4268 次点击
所在节点    宽带症候群
73 条回复
TossPig
7 天前
我也分享一下我的方案
`agh 192.168.1.53:53 -> mosdns 192.168.1.53:5353 -> clash 192.168.1.8:53`
我是旁路由模式

需要翻墙的域名会被解析为 22.0.0.0/8,这样除了 tg 其他设备都可以局域网内透明翻墙
dhcp 下发静态路由 22.0.0.0/8 gw 192.168.1.8
路由器中也配置静态路由 22.0.0.0/8 到 192.168.1.8 (主要是 andriod 不支持 dhcp 下发路由)

agh 总体分两路
1. 127.0.0.1,192.168.1.1 、192.168.1.8 、192.168.1.53 来源的直接用公共上游 doh 或者 dot
2. 其他上游用 127.0.0.1:5353 也就是 mosdns

mosdns 的规则比较多总体思路就是
需要特殊处理的的域名丢给 clash 或者其他一些解析器
不用特殊的丢给 agh 因为来源是 127.0.0.1 ,所有 agh 会用公共上游
mosdns 的主要作用是读取各种域名规则,还有就是 ros 不支持内网的 ptr 反查,也靠 mosdns ,要不然每次 nslookup 的时候`服务器`显示个 unkown 我就很难受
```
PS C:\Users\ts> nslookup baidu.com
服务器: dns.ts.internal
Address: 192.168.1.53

名称: baidu.com
Addresses: 182.61.244.181
182.61.201.211
```

用了快一年了,很方便,临时要控制某个域名的出口 agh 网页里面调整一下就好
agh 的日志功能也能很方便的找到某个域名走的哪个远程地址,不用去路由器上慢慢抓包,统计功能也可靠了

室友打游戏的延迟也只有 18~23 了

对路由器系统没要求特别要求,支持 dhcp option 配置和绑定静态 IP 就行。很方便我在 ros ,openwrt 、爱快之间来回切换
weicools
7 天前
openwrt 一个搞定,嫌旁路由麻烦
sentivcn
6 天前
一个 ADG 就搞定了,干嘛还要套来套去
miaomiao888
6 天前
太复杂了,一个 MOS 就搞定,兼顾去广告、分流、防污染。
fengyaochen
6 天前
装那么多怎么可能快
wm5d8b
6 天前
用 MosDNS ,域名清单怎么维护更新呢?
全部指向一个 upstream ,又有 cdn 问题
DAPTX4869
6 天前
个人方案是 adg -> smartdns, adg 的分流麻烦, 还没法设置代理
Ch3n4y
6 天前
跟我方案完全一致,哈哈
vitoegg
6 天前
因为 openclash 或者 nikki 都是通过 fake ip filter 来实现绕过中国大陆了,感觉更简单的玩法是 dnsmasq - mosdns - openclash/nikki 。
Dnsmasq 转发到 MosDNS ,MosDNS 根据域名分流不同的 DNS (需要代理的域名分配 openclash/nikki dns ),OpenClash/Nikki 设置成绕过中国大陆且取消掉 DNS 劫持。

这样都是使用自带的配置,操作简单,数据流清晰。
xuxiake
6 天前
@Ch3n4y 🤝
xuxiake
6 天前
@weicools 爱快的流控、IPv6 还是方便很多
xuxiake
6 天前
@miaomiao888 AdGuardHome 广告过滤、可视化查询日志还是方便些
Serino
6 天前
dns:
enable: true
prefer-h3: true
listen: :53053
ipv6: true
enhanced-mode: redir-host
proxy-server-nameserver:
- 国内 DNS
nameserver:
- 国内 DNS
nameserver-policy:
'geosite:private,microsoft@cn,category-games@cn,geolocation-cn':
- 运营商 DNS
'geosite:!cn':
- 国外 DNS

我猜楼主估计用了 fallback 什么的。

不用搞那么复杂啊。去看下 Mihimo 的文档 ( https://wiki.metacubex.one/config/dns/diagram/#_3 ),就会发现,命中了需要代理的规则的网址,是直接发送域名到代理服务器的,不是发送解析到的 IP 。解析 IP ,主要是为了后面判断是走直连还是代理,如果是走代理,就把域名(是的,还是发送域名而不是解析出来的 IP )发送给远端代理服务器。

网上好些做教程的估计都没看过官方文档,各种半桶水,我还见过说不用 fake-ip 肯定 DNS 泄露的,简直一派胡言。基本上我看到说有 DNSleak 的,都是因为不看文档只看各种半桶水教程并且 DNS 用了 fallback 。

按我上面这个简单的 DNS 设置,就能有很好的分流效果,那些 DNSleak 也不会检测出国内旗子。
如果要进阶一点,建议起 3 个 agh 的 docker ,分别做国内、运营商、国外 DNS ,而不是把 agh 放在 clash 之前。
本地缓存做好了,甚至都不需要追求 fake-ip ,还能避免很多奇奇怪怪的问题。
xuxiake
6 天前
@sxwsuieyqwe11 AdGuardHome 分流好像还是稍微有点麻烦
xuxiake
6 天前
@wm5d8b OpenWrt 里面的 MosDNS 插件可以设置定时更新广告规则、GeoIP & GeoSite 数据库
xuxiake
6 天前
@vitoegg 这样设置也挺清晰的,但是 mosdns 最好不要开启缓存
xuxiake
6 天前
@Mystery0 我也发现了,OpenWrt 里的 MosDNS 用自定义配置好像没法启动
xuxiake
6 天前
@383394544 iKuai 咋做分流
xiaoke
6 天前
我用 dae+adguard+mosdns
383394544
6 天前

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

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

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

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

© 2021 V2EX