clash fake-ip 模式处理 UDP 和 TCP 协议时遇到的奇怪问题

296 天前
 caneman

软路由,透明代理,fake-ip 模式

个人理解,不知道有没有错误的地方

a. 浏览器访问一个网址必须有对应的 IP 地址,没有的话就会自动发起 DNS 查询请求

b. clash 对 DNS 请求( UDP )有区别与其他 UDP 协议的处理

TCP 协议,从浏览器开始

禁用 QUIC 、浏览器、电脑、clash 都没有任何 DNS 缓存记录

  1. 浏览器输入 google.com ,首先浏览器发送一个 DNS ( UDP )请求,查询 google.com 对应的 IP 地址

  2. clash 收到 DNS 请求,直接返回给浏览器一个假的 IP 地址(假设为 192.1.1.1 ),并记录这个假的 IP 地址对应的网址

  3. 浏览器发起 TCP 请求,访问 google.com ,目标地址为:192.1.1.1

  4. clash 收到来自于浏览器的数据包,查看数据包的目标 IP ,在自己的记录表里面查询 IP 有没有对应的域名

    • 有对应域名

      走域名匹配规则,如果没有匹配到任何规则,进行 DNS 查询,用拿到的 IP 进行 IP 匹配(这里不会拿上面的假 IP 进行匹配,而是要进行一次真正的 DNS 查询,这个过程可能会导致 DNS 泄露),DNS 查询会多路并发,主要分为:nameserver 指定的 DNS 服务器(国内的,快,但是有泄露和篡改风险),fallback 指定的 DNS 服务器(国外,慢,一定不会篡改),如果是国外的 IP 信任 fallback 结果,国内的信任 nameserver 。用查询到的 IP 做 IP 规则匹配

    • 没有对应的域名

      进行 IP 规则匹配

  5. 用匹配到的代理进行处理后续的流程....

发现的问题

  1. Ping 命令不好使(因为 fake-ip 的原因,ping googele.com ,ping 到的是 192.1.1.1 )
  2. 基于 UDP 的游戏连不上(看网上说是因为有些基于域名连接的 UDP 必须用真实 IP ,这一点我不懂为什么??)

我的需求

  1. 国内游戏能够正常连接,Direct
  2. 国外游戏能够走代理

我想到的解决方案

  1. fake-ip ,UDP 转发,绕过中国大陆 IP [验证可行]

    但是我并不知道原理,功能上写的是来自中国大陆的流量不再经过内核,可是中国大陆的流量的判定不也是 Domain-DNS-GEOIP?

    不开启这种方案的时候,因为我的规则列表没有任何游戏相关的规则,走域名匹配不通,然后走 IP 匹配的道路不也是 Domain-DNS-GEOIP ,为什么就进不去游戏了?

  2. fake-ip-filter 添加游戏域名 [猜想可行]

    相当于给指定游戏不走 fake-ip 模式,回退到 redir-host

    缺点:一个游戏一个游戏添加,域名收集是个大问题

  3. fake-ip ,不进行 UDP 转发 [猜想可行]

    不知道 DNS 解析会不会受影响,根据我上面的理解 b, 应该不会受影响吧

    缺点:国外游戏想走代理的也走不了,而且走 UDP 的也不止游戏啊

  4. 关于国外游戏代理 [不知可行与否]

    fake-ip, UDP 转发,规则列表添加国外游戏域名,Proxy ,是不是就可以了?

4518 次点击
所在节点    DNS
17 条回复
murchef
296 天前
我用 meta 内核,现在还支持 redir-host ,因为我直接用 mosdns 管理 dns ,所以 fakeip 对我来说是副作用
caneman
296 天前
@murchef #1 meta 内核是分出去的,如果想在原版内核 fake-ip 的基础上,解决我上面提出的问题,有没有什么比较好的方案?为什么绕过大陆 IP ,游戏就可以了?大陆 IP 咋判定的?不也是需要通过 DNS 解析获得的吗?这一点我没想通。
murchef
296 天前
@murchef #1 游戏用加速器好一点,之前试过走代理,延迟也高,我也不开 UDP 转发,基本上国内游戏都能直连,走加速器的也不会被代理
murchef
296 天前
@caneman #2 先从 dns 获得 ip ,然后基于 GeoIP 来判断
游戏基本上直接访问 IP ,ip 在 geoip 内就是直连
caneman
296 天前
@murchef #3 其实初衷就是嫌多搞一个游戏加速器麻烦。想着直接上一个高质量机场,所有网络的活都全包了。fake-ip 的优点是,规则列表里面的域名少一次 DNS ,打开网页是真的丝滑。如果能在 fake-ip 的模式下把已有问题解决了,感觉就很舒服,我的需求也不多主要是。
murchef
296 天前
@caneman #5 我之前也有这个想法,但目前高质量机场从江浙沪到 HK 的延迟都远不如垃圾加速器,然后有些游戏平台的或者说游戏的域名或 IP 这种分流很难弄。而且就是规则列表里不全,不如要打游戏时直接全局或在电脑上单独装个 clash 走全局,平时关了
mohumohu
296 天前
fake-ip 就不应该做全局 DNS ,按需分流给 fake-ip ,然后做静态路由是比较清晰合理的。可以参考这个文章的拓扑: https://blog.03k.org/post/paopaogateway.html
yukinomiu
296 天前
分流这个问题, 我觉得目前没有特别好的方案, 非常容易把网路搞的特别复杂, 还要维护一系列规则.

我的选择是, 两个网关, 一个 direct, 一个 proxy. 自己根据需求切下网关就行. 分流判断的开销的省了.
移动设备直接通过 wifi 区别, 有线 PC 麻烦一点, 要手动切换网关.
zbatman
295 天前
具体是啥游戏?
我也是通过 clash+fake-ip 做游戏加速,PS5 的战地 1 、Xbox 的暗黑 4 联机都是没问题的
caneman
295 天前
@zbatman #9

主要是国内的一些游戏,我目前测试的是穿越火线有问题,网上还有王者荣耀、吃鸡遇到问题的

问题表现形式都一样:登录、仓库、商店这些界面都没问题,游戏开始,加载不进去,我这边的具体情况是

开启插件看不到 ping 值,进游戏卡 45%(不是登录的那个进游戏,是要开始对战的进游戏)然后提示网络连接异常,断掉。回到主界面(仓库、商店之类的依然可以点击没有任何问题,大厅也可以正常浏览进入)
caneman
295 天前
@zbatman #9

fake-ip , [关闭] [实验性:绕过中国大陆 IP], [关闭] UU 加速器,游戏加载失败
fake-ip , [关闭] [实验性:绕过中国大陆 IP], [开启] UU 加速器,UU 加速器显示丢包率 100%,游戏加载成功
fake-ip , [关闭] [实验性:绕过中国大陆 IP],fakeip-filter 加入 QQ 相关域名(*.qq.com/tencent.com ),游戏加载失败
fake-ip , [开启] [实验性:绕过中国大陆 IP], [关闭] UU 加速器,游戏加载成功

redirhost , [关闭] [实验性:绕过中国大陆 IP],游戏加载失败
zbatman
295 天前
@caneman 那可能是 fake-ip 的问题。

我的方案跟你的不太一样,不是全局 fake-ip 。我是在主路由上用 mosdns 国内外分流,国内的域名走国内的 DNS ,获取真实 ip 直连(不经过 Clash);国外的域名走软路由 Clash 的 fakeDNS ,获取 fake-ip 。

主路由配置静态路由(fake-ip 段 -> 软路由 ip)把 fake-ip 段的流量导向软路由

可以参考下这个方案,全局 fake-ip 应该就是会有奇奇怪怪的问题
caneman
295 天前
@zbatman #9 主机游戏我没测试,看了下 switch 的网络类型是 F ,节点是支持 UDP 的,但是好像不是 fullcone ,对了我关闭了所有 IPV6 相关的功能,但是跟这个应该没关系吧。
caneman
295 天前
@zbatman #12

这方面了解的不是很多,我去查查看。感觉你的方案更合理一些。
frankilla
257 天前
@zbatman 有作业抄吗-。-
zbatman
205 天前
@frankilla 点我头像看第一个主题帖吧,被判定为敏感信息移到 Chamber 了
frankilla
199 天前
@zbatman 有点久我都忘了我复习一下。谢谢这么久还回复我~

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

https://www.v2ex.com/t/957464

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

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

© 2021 V2EX