DNS 分流方案

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

5884 次点击
所在节点    宽带症候群
74 条回复
TossPig
76 天前
我也分享一下我的方案
`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
76 天前
openwrt 一个搞定,嫌旁路由麻烦
sentivcn
75 天前
一个 ADG 就搞定了,干嘛还要套来套去
miaomiao888
75 天前
太复杂了,一个 MOS 就搞定,兼顾去广告、分流、防污染。
fengyaochen
75 天前
装那么多怎么可能快
wm5d8b
75 天前
用 MosDNS ,域名清单怎么维护更新呢?
全部指向一个 upstream ,又有 cdn 问题
DAPTX4869
75 天前
个人方案是 adg -> smartdns, adg 的分流麻烦, 还没法设置代理
Ch3n4y
75 天前
跟我方案完全一致,哈哈
vitoegg
75 天前
因为 openclash 或者 nikki 都是通过 fake ip filter 来实现绕过中国大陆了,感觉更简单的玩法是 dnsmasq - mosdns - openclash/nikki 。
Dnsmasq 转发到 MosDNS ,MosDNS 根据域名分流不同的 DNS (需要代理的域名分配 openclash/nikki dns ),OpenClash/Nikki 设置成绕过中国大陆且取消掉 DNS 劫持。

这样都是使用自带的配置,操作简单,数据流清晰。
xuxiake
75 天前
@Ch3n4y 🤝
xuxiake
75 天前
@weicools 爱快的流控、IPv6 还是方便很多
xuxiake
75 天前
@miaomiao888 AdGuardHome 广告过滤、可视化查询日志还是方便些
Serino
75 天前
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
75 天前
@sxwsuieyqwe11 AdGuardHome 分流好像还是稍微有点麻烦
xuxiake
75 天前
@wm5d8b OpenWrt 里面的 MosDNS 插件可以设置定时更新广告规则、GeoIP & GeoSite 数据库
xuxiake
75 天前
@vitoegg 这样设置也挺清晰的,但是 mosdns 最好不要开启缓存
xuxiake
75 天前
@Mystery0 我也发现了,OpenWrt 里的 MosDNS 用自定义配置好像没法启动
xuxiake
75 天前
@383394544 iKuai 咋做分流
xiaoke
75 天前
我用 dae+adguard+mosdns
383394544
75 天前

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

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

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

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

© 2021 V2EX