V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
caneman
V2EX  ›  DNS

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

  •  
  •   caneman · 285 天前 · 4397 次点击
    这是一个创建于 285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    软路由,透明代理,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 ,是不是就可以了?

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

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

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

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

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

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

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

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

    这方面了解的不是很多,我去查查看。感觉你的方案更合理一些。
    frankilla
        15
    frankilla  
       246 天前
    @zbatman 有作业抄吗-。-
    zbatman
        16
    zbatman  
       194 天前
    @frankilla 点我头像看第一个主题帖吧,被判定为敏感信息移到 Chamber 了
    frankilla
        17
    frankilla  
       187 天前
    @zbatman 有点久我都忘了我复习一下。谢谢这么久还回复我~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2692 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:08 · PVG 19:08 · LAX 04:08 · JFK 07:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.