V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cnbatch
V2EX  ›  宽带症候群

造了个试验品,利用频繁更换端口的方式来躲避运营商的 UDP 限速

  •  1
     
  •   cnbatch · 306 天前 · 6839 次点击
    这是一个创建于 306 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为了解决 UDP 限速,目前比较常用的做法是将 UDP 流量伪装成 TCP 流量。

    我就想,能否不伪装,继续用 UDP 规避限速?
    或许可以,我记得有人提到过,UDP 被限速后只要重新连接,速度就会重新恢复。
    这么看来,只要四元组的其中一项发生变化就能打破限速。

    于是我造了个试验品,作用类似于 wangyu 的 udp2raw (以及还有 Phantun ),只不过这个试验品全程保持 UDP ,每隔一段时间就自动更换端口。而且是客户端主动更换,无须通知服务器。即使服务器那边使用固定端口,客户端也会建立新的连接连过去。
    同时,服务器端也支持同时监听多个端口(可以指定一个范围),让客户端新建连接时可以随机选择目标端口。

    试验品在这:
    https://github.com/cnbatch/udphop

    目前支持三大平台,并提供这三大平台的 x64 可执行文件:
    FreeBSD
    Windows
    Linux

    听说重灾区在中国移动,但因为我没开通中国移动的家宽,所以没法在中移动家宽网络内试验。
    试过用广东移动的手机网来试验,iperf3 从广东电信家宽发送到广东移动手机(包括手机开启热点给笔记本电脑做测试),发现 UDP 直接被堵死了,收都收不到; UDP 从广东移动手机(及热点下的笔记本电脑)发往电信家宽倒是可以;至于 TCP ,双向畅通无阻。但这样就等于无法开展测试,因为 UDP 无法双向通信。
    第 1 条附言  ·  305 天前

    看到另一个帖子 ( /t/898479 ),我才发现原来是中国移动默认禁止UDP主动入站,个人实测连IPv4都受影响,难怪我用iperf3无法从电信家宽发UDP数据给移动手机热点后面的笔记本电脑。

    我造这个试验品主要是为了满足两个场景的需求:

    1. 有公网IP时无须打洞,随意直连,可以用任意方式躲避限速。
    2. 在NAT打洞的情况下尝试在客户端那边主动更换UDP连接,看能不能避开UDP限速。

    因为目前并没有单独的工具可以同时适应以上两个场景(实在不喜欢多套工具同时组合起来用,增加复杂程度的同时又降低稳定性),所以就自己造一个来试试。而且墙内互联用VPN回家在大多数情况下可以不理会拥塞丢包(对我来说是这样),那就没必要使用众多的承载协议了(比如QUIC),因此就只做最普通的数据包转发。

    一开始就忘了说,这个试验品同时还自带NAT打洞的功能。

    反正我是没发现部分楼层提到的Hysteria 有提供STUN的NAT打洞功能。

    正如我前面提到过的,我个人不喜欢多种工具套娃式组合,再在Hysteria 前面套一个NAT打洞工具等于把事情弄得越来越复杂了。

    何况NAT打洞后的端口并不固定,套娃后配置起来十分麻烦,这样我才想到不如尝试在客户端那边自动重连。

    42 条回复    2023-02-03 10:16:41 +08:00
    unnamedhao
        1
    unnamedhao  
       306 天前 via iPhone
    纯好奇,udp 怎么伪装成 tcp ,ip 包的类型字段就不同
    wangyucn
        2
    wangyucn  
       306 天前
    滋瓷
    cnbatch
        3
    cnbatch  
    OP
       306 天前   ❤️ 2
    @unnamedhao 可以问问你楼下的这位资深 UDP 限速破解专家,他就是 udp2raw 的作者

    @wangyucn 果然是资深 UDP 限速破解专家,平时几乎不出现,只要有人发帖的内容跟运营商的 UDP 限速相关就基本会出现😆
    XiaoxiaoPu
        4
    XiaoxiaoPu  
       306 天前
    跳端口频率较快时,可能会给光猫等设备的 NAT 造成较大压力,导致其他使用 UDP 的应用(例如即时语音、视频)出现网络问题
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       306 天前
    把一个 UDP session 拆成多个是不是也可能有效果?
    swxk521
        6
    swxk521  
       306 天前 via Android
    hysteria 的端口跳跃,和你说的功能一样吧,用这好多了
    cnbatch
        7
    cnbatch  
    OP
       306 天前
    @XiaoxiaoPu
    @swxk521
    其实我是受到 v2ray 的启发,v2ray 很早就支持了 UDP 动态端口的功能,比起 hysteria 和 kcptun 还要早得多。
    它们甚至有并行 session 的设置,多条 UDP session 一起来。
    只不过它们并非单纯的简单转发,而是另有传输协议( v2ray 用的是 vmess + mkcp ,kcptun 顾名思义就是 kcp ,hysteria 用魔改版 QUIC ),效果自然不一样,它们都可以顺便对抗拥塞丢包。

    当然了,多一个选择总没坏处,我就是打算单纯转发数据,因为部分场景不太需要对抗拥塞丢包(比如墙内跨运营商 VPN 回家)。
    我个人的使用情况是,联通↔电信这样用的效果不错,这两家运营商互联基本上极少拥塞导致的丢包,倒是特别需要对付 UDP 限速。

    一条 UDP Session 拆成多个,这也是个好办法,只要每一条 Session 的数据量不是太大的话,应该也不会被限速策略盯上
    brMu
        8
    brMu  
       306 天前 via Android
    @wangyucn 来膜拜一下大佬
    jousca
        9
    jousca  
       306 天前
    是个好办法。

    我是中移动家宽,其实中移动还好(成都移动),成都电信家宽会这个操作。封 UDP

    电信专线不会。
    Zy143L
        10
    Zy143L  
       306 天前 via Android
    目前来看移动 UDP 同网没啥问题
    异网流量才有 UDP 限制的毛病
    a9k1n9
        11
    a9k1n9  
       306 天前 via Android
    qos 不是以 IP 限制的吗?躲得过初一,躲不过十五~
    benwjrumd
        12
    benwjrumd  
       306 天前 via iPhone
    Hysteria 也支持咯
    yulon
        13
    yulon  
       306 天前
    按我几年前实验的结果,需要多 IP ,端口只是数据包里面的一个数字,只要发往同一个 IP ,就没多大区别,有时候可能还会变慢,因为多个端口收到数据后要同步与合并
    lly8666
        14
    lly8666  
       306 天前 via Android
    请问支持动态域名自动解析重连么?
    bclerdx
        15
    bclerdx  
       306 天前
    @jousca 成都电信会怎么封 UPD ,为何电线专线不会?
    smartisan2047
        16
    smartisan2047  
       305 天前
    @jousca 我成都电信没遇到过封 UDP ,电信-移动跨网 UDP 也没太大问题
    emma3
        17
    emma3  
       305 天前
    V2ray 的 mkcp 插件,好像很早就已经支持动态端口了,一直不太知道有什么用。
    cnbatch
        18
    cnbatch  
    OP
       305 天前
    @lly8666 支持,每次更换端口时会自动扫一次。

    如果数据一直传输不间断的话,它可以自动跟踪新的 IP ,所以理论上不用动态域名只填 IP 地址也能跟踪新 IP 的变化。
    之所以这样做,主要是用于 STUN 给 NAT 打洞的场景,毕竟 NAT 打洞获得的新端口并不固定,这就必须自动跟踪了。
    cnbatch
        19
    cnbatch  
    OP
       305 天前
    @emma3 在 7 楼那里我就提到过是受到 v2ray 的启发,因为我就用这个功能用了很长时间。
    好处是爬梯时减少端口被封的概率,也能减轻 UDP 限速的影响。
    只不过 v2ray 的方案不太完美,必须指定固定的主端口,一旦主端口被 ban 那就无法通讯。主端口受到严重限速时也会影响更换端口时的稳定性。

    影响最大的还是 NAT 打洞,墙内想要打洞互联的话,靠 v2ray 做底层传输就不适合了。
    aru
        20
    aru  
       305 天前
    最后相当于提供了一个 socks5 服务么?
    cnbatch
        21
    cnbatch  
    OP
       305 天前
    @aru 不提供 socks5 功能,也不打算支持。
    实际上算下来相当于 NAT 打洞 + 自动转发 + 自动换端口。
    毕竟我个人用的场景仅仅是为了辅助 NAT 打洞时的 VPN 回家。
    jousca
        22
    jousca  
       305 天前
    @bclerdx 传入方向封。如果一定流量后阻止 UDP 包传入。
    emma3
        23
    emma3  
       305 天前
    @cnbatch 现在最大的特征都是 tcp ,有没有考虑在试试 quic 上加点什么?
    hsly109
        24
    hsly109  
       305 天前
    請問加密方式是否可以考慮增加 stream cipher 這類加密方式? stream cipher ,也就是流加密 目前用的比較多的有 rc4 ,chacha20-ietf-poly1305 ,xchacha20-ietf-poly1305
    希望開發者可以考慮一下,並非所有 client 設備或者伺服器默認都啟用或者有 aes-ni 這個指令集
    2000wcw
        25
    2000wcw  
       305 天前
    Hysteria 最新版支持端口跳跃,很好用。
    cnbatch
        26
    cnbatch  
    OP
       304 天前
    @emma3 我个人觉得吧,国内的 QUIC 网站多起来再做会更好些,先看看各大网站能否倒逼运营商善待 UDP 流量
    cnbatch
        27
    cnbatch  
    OP
       304 天前
    @hsly109 好的,已经加了
    lly8666
        28
    lly8666  
       304 天前 via Android
    @cnbatch 感觉很牛逼,玩玩儿。
    huangjinjiang20
        29
    huangjinjiang20  
       303 天前
    客户端中的 destination_address 是填服务端的地址?
    cnbatch
        30
    cnbatch  
    OP
       303 天前
    lly8666
        31
    lly8666  
       303 天前
    ./udphop: error while loading shared libraries: libbotan-2.so.19: cannot open shared object file: No such file or directory

    debian10 已经安装了 libbotan2-dev
    lly8666
        32
    lly8666  
       303 天前
    libbotan-2.so.19 解决了,debian 安装的是 libbotan-2.so.9

    liburing.so.2 这个在 debian 里找不到
    cnbatch
        33
    cnbatch  
    OP
       303 天前
    @lly8666 保险起见,我还是再另外弄了个专门用于 botan 2.9 的版本,以防万一
    hsly109
        34
    hsly109  
       302 天前
    debian 11 還是不太行 那個 libbotan 版本 2.so.9 是 debian LTS buster 的 package ,2.so.19 是 testing 的……我是 stable bullseye ,剛好卡在中間
    cnbatch
        35
    cnbatch  
    OP
       302 天前
    @hsly109 针对最新 Debian 11 弄了个 2.17 的版本,应该够用的了。

    原本我是打算全部以 static linking 的方式发布二进制的,奈何 Linux 版本的 Botan 只有动态库方式能用,静态库几乎反倒没法用。其他平台却可以正常用静态库。

    我刚刚去看了下作者本人对开发环境的描述 ( https://botan.randombit.net/handbook/support.html ),Linux 是主力,然后是 Windows ,剩下的都靠 Github 自动化工具。既然 Linux 是作者的主力平台,使用起来却最“拉跨”,实在费解。
    lly8666
        36
    lly8666  
       301 天前 via Android
    debian10 还是跑不起来,一些依赖版本不对
    Neur2n
        37
    Neur2n  
       294 天前
    看 udp2raw 的文档,服务端似乎是要搭建在 VPS 上,udphop 也需要这样吗
    cnbatch
        38
    cnbatch  
    OP
       294 天前
    @lly8666 前几天更新了静态链接版本,可以再试试
    cnbatch
        39
    cnbatch  
    OP
       294 天前
    @Neur2n udphop 并非一定要 VPS ,我自己就没把 udphop 放在 VPS 上,而是放在路由器(服务端模式)和自己的电脑(客户端模式)
    Neur2n
        40
    Neur2n  
       294 天前
    @cnbatch 请问有文档吗,谢谢
    cnbatch
        41
    cnbatch  
    OP
       294 天前
    @Neur2n 还不至于复杂到需要文档的地步吧
    目前位于 Readme 的介绍就是完整的功能介绍了,可以配置的选项都写在了表格内
    sbilly
        42
    sbilly  
       239 天前
    UDP 国内环境太恶劣,QoS 不是基于会话是基于源 IP 的就没戏了。
    TCP 打洞成功率太低了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2046 人在线   最高记录 6067   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 09:02 · PVG 17:02 · LAX 02:02 · JFK 05:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.