Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能做到根据ipv4返回的地址,选择上游服务器并返回结果么(即根据ip分流) #1768

Open
supppig opened this issue Jul 7, 2024 · 10 comments

Comments

@supppig
Copy link

supppig commented Jul 7, 2024

需求应用场景
1、对于国内域名的逻辑是,使用国内dns解析,返回ipv4及ipv6,ip测速并返回最优结果。
2、对于国外域名的逻辑的,使用特定dns解析,仅返回ipv4,返回全部查询结果(不测速)。
3、区分国内国外域名的方式是,通过国内dns解析ipv4,检测是否国内ip,并执行对应逻辑。

建议的方案
1、配置两组上游服务器(如china及oversea)
2、服务器收到查询请求,如需访问上游,则同时访问china及oversea。
3、根据china的ipv4返回结果,执行以下逻辑
a. ipv4首个ip为中国ip,则对china服务器返回的结果测速、双栈优选,选最优的ipv4及ipv6返回。
b. ipv4首个ip为国外ip,则直接返回oversea的ipv4结果,屏蔽ipv6结果。
4、记录该查询域名的上游匹配结果,后续再次访问上游时,直接走对应的a/b逻辑。

设备信息

  1. 设备信息(CPU,厂家)
    N100,X86_64,PVE环境

  2. 固件信息
    原生openwrt 23.05

@PikuZheng
Copy link
Contributor

建议用mosdns,那边有成熟的逻辑判断方案做二次解析

@supppig
Copy link
Author

supppig commented Jul 7, 2024

建议用mosdns,那边有成熟的逻辑判断方案做二次解析

我知道mosdns,但是那个没有测速功能,而且我也不想套娃。。。

@PikuZheng
Copy link
Contributor

还有一个办法是一刀切,强制用黑名单将国内上游出来的非国内ip结果全部ban掉

@supppig
Copy link
Author

supppig commented Jul 7, 2024

还有一个办法是一刀切,强制用黑名单将国内上游出来的非国内ip结果全部ban掉

这个办法我也想过,昨晚也写了一半的配置文件了。然后突然发现,国内双栈+测速,国外单ipv6+不测速,很难写出来。除非smartdns自己套娃自己。

@PikuZheng
Copy link
Contributor

只需要设一个国外上游组,且不要从默认组中排除。国内上游组作为默认组且采用结果黑名单。
由于测速+缓存的存在,国内网站基本不会采用国外上游的结果。

@supppig
Copy link
Author

supppig commented Jul 7, 2024

只需要设一个国外上游组,且不要从默认组中排除。国内上游组作为默认组且采用结果黑名单。 由于测速+缓存的存在,国内网站基本不会采用国外上游的结果。

嗯,是个办法。我尝试一下。但最好这个软件以后能做到我提的建议,这样效率高很多。

@maojianyou
Copy link

只需要设一个国外上游组,且不要从默认组中排除。国内上游组作为默认组且采用结果黑名单。 由于测速+缓存的存在,国内网站基本不会采用国外上游的结果。

具体如何配置呀,可以提供配置不,我想测试验证下,我这边当前是国内域名是已知的分组上游用国内DNS解析,默认上游DNS到国外,但感觉偶尔还是国内有些域名访问卡顿,不确定是不是域名分流存在缺陷,比如抖音偶尔播放卡顿了,家里环境linux软路由,但使用手机流量没出现这种情况,感觉是分流域名的不一致性

@maojianyou
Copy link

建议用mosdns,那边有成熟的逻辑判断方案

只需要设一个国外上游组,且不要从默认组中排除。国内上游组作为默认组且采用结果黑名单。 由于测速+缓存的存在,国内网站基本不会采用国外上游的结果。

其实还有一种情况,就是上游某个DNS解析结果,比如www.baidu.com 返回的是0.0.0.0有出现这种情况,我能否设置2个上游DNS,然后比如第一个上游DNS返回错误的结果0.0.0.0 然后我就用第二个DNS解析比如返回1.1.1.1那就正常了,就是能否支持针对返回结果IP正则之类过滤,如果返回不是想要的结果,就不提供给用户

@PikuZheng
Copy link
Contributor

其实还有一种情况,就是上游某个DNS解析结果,比如www.baidu.com 返回的是0.0.0.0有出现这种情况,我能否设置2个上游DNS,然后比如第一个上游DNS返回错误的结果0.0.0.0 然后我就用第二个DNS解析比如返回1.1.1.1那就正常了,就是能否支持针对返回结果IP正则之类过滤,如果返回不是想要的结果,就不提供给用户

抖音域名太多了 估计是没搜集全

如果有两个以上的dns上游且一半以内返回0.0.0.0或nxdomain或soa,smartdns将无视这些无效结果,仅采用其他有ip的

@pymumu
Copy link
Owner

pymumu commented Jul 14, 2024

不清楚你要的是不是IP地址黑白名单?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants