终极的分流策略

175 天前
 yyysuo
这里聊的是分流策略,不是 fakeip 、bgp 、ospf 、ipset 、ipt 、nft 等分流用到的技术手段,也不是 sing-box 、mihomo 等核心,更不是 openclash ,小猫咪等集成代理工具。

首先要确定分流的对象,互联网上的访问需要分流的,就是域名,没有对应域名纯 IP 访问的场景极其有限,可以做特殊处理。

分流总体上可以分为 2 类,直连和代理,需要代理的域名就直接引入到 sing-box/mihomo 等代理程序中进一步分流即可,代理程序按域名分流十分成熟了。

那如何判断一个域名需要代理呢?目前有各种域名列表,直连域名列表、gfwlist ,基本上覆盖了大部分常用的域名,重点是那些没在域名列表中的域名,虽然访问的机率小,其实是海量的,永远也无法维护完全的。

于是就产生了白名单和黑名单 2 种模式,即不在列表中的域名,要么全走国内 dns 解析,要么全走国外 dns 解析。可能遇到尴尬的场景,黑名单模式下,某个人个博客不在 gfwlist 列表中,无法访问,需要手动添加域名至 gfwlist ;白名单模式下,某国内购物网站突然定位到了国外,出停车场时扫码付费一直在转圈,因为小程序的域名 xxx.top 只做了国内解析,国外 dns 压根没解析结果。

对于这种尴尬,解决的办法有两种
1:列表外域名国内 dns 解析,解析结果为国外 IP/无 IP 的,使用国外 dns 再解析一次,速度快,dns 有泄露。
2:列表外域名国外 dns 解析,附加上国内 ip 作为 ecs ip ,速度慢,结果可能不够精确,dns 无泄露。

当然还有很多细节问题,比如方法 2 就无法解决国外 dns 无解析结果的情况,需要回落到国内 dns 做 2 次解析,可以添加过期缓存来保存分流结果等等等等,需要慢慢打磨。

以上 2 种方法,对域名列表的依赖度大大降低了,基本上可以自动分流不在列表中的域名,分流精度大大提高,体验极佳。

推荐方法 1 ,速度快,dns 逻辑处理起来更简单。
9283 次点击
所在节点    宽带症候群
83 条回复
maybeonly
174 天前
我现在的实现是这样的:
基础的还是白名单+ip 分流+自建递归
+黑名单直接用 1111 解析的
然后每天在 gww (宽带出口)上收集来自递归服务器的访问 udp 53 端口的请求
夜里解析这些域名,然后动态扩充白名单。

这些累积的白名单目前是 3 个月校对一次

基本逻辑还是那个:有任何一层权威在墙内的就算墙内域名。
实际上遇到过的问题:有些域名在 dnspod 或者 ali 上,但是只能通过海外访问,这些就得手工配置了……
yyysuo
174 天前
@maybeonly
自动扩充域名列表我是直接在 mosdns 配置 lazy_cache (过期缓存/分流结果)并永久保存来实现的,家庭使用,目前的条目数没超过 2 万条,mosdns 处理这点数据是没有压力的,其它方案规则数据量多了,不知道效率如何。

我目前域名基本上都是自动处理,极少需要(基本没有)手动添加规则,不明白你说的只能海外访问的域名是哪类,像这种吗? https://www.fx168news.com/
wm5d8b
174 天前
现在不少国外域名使用的 cdn ,在国内有了节点,直接访问速度比代理不知道高到哪里去了。
但是呢,这个国内节点你得使用运营商的 dns 才能解析到。而且这个国内节点不是电信联通移动都能解析并访问,可能只有其中一两家能访问,其他运营商还是得访问国外的 cdn 节点,这样还是得走代理,否则慢得不能接受。
就这个情况,要自己一个人不断维护不太现实。因为大家使用的运营商不一样,相同运营商南方北方还不一样,也就杜绝了共同维护一份的可能。
以上情况和墙完全没关系,纯纯就是访问速度带来的分流问题了,没有能解决的方案
yyysuo
174 天前
@wm5d8b 是必须运营商的 dns ,还是说只要国内主流 dns 就可以,有例子吗?
Goooooos
174 天前
纯 IP 的例子很多
1. telegram
2. 软件内建的 httpdns
yyysuo
174 天前
@Goooooos 我主帖说了纯 IP 特殊处理,目前已知的是国外 dns ip 、电报 ip 、奈飞安卓 tv 端 ip ,其它暂时没发现; httpdns 知道了也管不了,也不用管。
lw4free
174 天前
目前我的 dns 是这样实现的
1:广告域名拦截
2:国外黑名单走 fakeIP
3:国内白名单走运营商 dns 查询
4:其它域名先走运营商 dns 查询,结果如果不匹配国内 IP 再走 fakeIP
设定 fakeIP 持久化 ttl 为 10 秒
yyysuo
174 天前
@lw4free 棒,咱俩一样,说分流的事儿,我就没在主帖中提 fakeip ,我 fakeip ttl 是 1 秒,理论上不持久化也行,不过还是持久化的好,要不然安卓 tv 看奈飞会转圈。
starrys
174 天前
@likai #37 你这种情况,应该是漏掉哪个域名加白名单了
likai
174 天前
@yyysuo nkvod com ,正常可访问,一上分流就打不开了
sicifus
174 天前
@lw4free #47 要自己配这一串任务流有什么教程可以下看吗?
yyysuo
174 天前
@likai 加了白名单是可以的,确实屏蔽了代理访问。
nkvod.com 2406:da18:2d6:bf00:6957:2a07:7286:c0ac
hm.baidu.com 2408:871a:2100:10ea:0:ff:b011:69
media-gslz-fy-home.gs7oss.ctyunxs.cn 240e:935:a04:1001::3
pic.rmb.bdstatic.com 2408:8726:7000::3cdd:1223
qb.xn--it-if7c19g5s4bps5c.com 121.62.31.111
yyysuo
174 天前
@likai 可能某些撸了免费 cf 节点的机场也能看。
lw4free
174 天前
@sicifus 我是使用 routedns 作为 dns 分流和改变 ttl sing-box 实现 tun 模式下的代理和 fakeIP 的持久化
mosdns 可以实现 routedns 同样的功能
sing-box 基于 TProxy 模式也能实现 但不能基于其他入站方式例如 socks 否则 dns 分流就不起效了
sing-box 的内置 dns 功能不能实现功能 4dns 查询后再匹配 使用 xray 应该可以实现所有功能 不过好像不能 fakeIP 持久化和改变 ttl 不是那么理想
yyysuo
174 天前
@lw4free sing-box 可以的
"dns": {
"servers": [
{
"tag": "google",
"address": "https://8.8.8.8/dns-query",
"detour": "♻️ 自动选择"
},
{
"tag": "local",
"address": "202.102.213.68",
"detour": "DIRECT"
},
{
"tag": "ban",
"address": "rcode://success"
},
{
"tag": "remote",
"address": "fakeip"
}
],
"rules": [
{
"outbound": "any",
"server": "local"
},
{
"clash_mode": "Direct",
"server": "local"
},
{
"clash_mode": "Global",
"server": "google"
},
{
"rule_set": "ads",
"domain_suffix": [
"pcmanager.microsoft.com",
"officeplus.cn",
"scorecardresearch.com",
"nelreports.net"
],
"server": "ban",
"disable_cache": true
},
{
"rule_set": [
"geosite-geolocation-cn",
"playstation"
],
"domain_suffix": [
"myds.me",
"dynv6.net",
"dynv6.com",
"asuscomm.com"
],
"server": "local"
},
{
"type": "logical",
"mode": "and",
"rules": [
{
"rule_set": "geosite-geolocation-!cn",
"invert": true
},
{
"rule_set": "cnip"
}
],
"server": "google",
"client_subnet": "114.114.114.114/24"
},
{
"query_type": [
"A",
"AAAA"
],
"server": "remote"
}
],
"fakeip": {
"enabled": true,
"inet4_range": "198.18.0.0/15",
"inet6_range": "fc00::/18"
},
"reverse_mapping": true,
"independent_cache": true
},
likai
174 天前
@yyysuo
不会吧.你那边能正常访问?
我用我自己网上改的和你上面 1119 压缩包里的都不能访问.
yyysuo
174 天前
@likai 自己在 whitelist.txt 中添加上这个域名,你上面不是说加了白名单也不能访问吗,默认确实不能访问,因为这个站只允许大陆 IP ,这个是规则无法判断的。
likai
174 天前
whitelist 加了这个网址的,
cname 那个域名也加了,
奇怪了.
YGBlvcAK
174 天前
这不是我老早发过的吗?参考我的配置了吧?哈哈
lw4free
173 天前
@yyysuo 刚看了 确实可以了 在 1.9.0 之后添加了地址筛选字段 等有空在手机上测试一下 你使用的 logical 模块我一直没搞懂原理和作用

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

https://yangjunhui.monster/t/1091065

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

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

© 2021 V2EX