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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    47 条回复    2024-07-03 11:41:49 +08:00
    unnamedhao
        1
    unnamedhao  
       2022-11-27 19:44:22 +08:00 via iPhone
    纯好奇,udp 怎么伪装成 tcp ,ip 包的类型字段就不同
    wangyucn
        2
    wangyucn  
       2022-11-27 19:52:00 +08:00
    滋瓷
    cnbatch
        3
    cnbatch  
    OP
       2022-11-27 21:10:28 +08:00   ❤️ 2
    @unnamedhao 可以问问你楼下的这位资深 UDP 限速破解专家,他就是 udp2raw 的作者

    @wangyucn 果然是资深 UDP 限速破解专家,平时几乎不出现,只要有人发帖的内容跟运营商的 UDP 限速相关就基本会出现😆
    XiaoxiaoPu
        4
    XiaoxiaoPu  
       2022-11-27 21:42:39 +08:00
    跳端口频率较快时,可能会给光猫等设备的 NAT 造成较大压力,导致其他使用 UDP 的应用(例如即时语音、视频)出现网络问题
    XiaoxiaoPu
        5
    XiaoxiaoPu  
       2022-11-27 21:57:44 +08:00
    把一个 UDP session 拆成多个是不是也可能有效果?
    swxk521
        6
    swxk521  
       2022-11-27 22:03:15 +08:00 via Android
    hysteria 的端口跳跃,和你说的功能一样吧,用这好多了
    cnbatch
        7
    cnbatch  
    OP
       2022-11-27 22:34:05 +08:00
    @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  
       2022-11-27 23:03:18 +08:00 via Android
    @wangyucn 来膜拜一下大佬
    jousca
        9
    jousca  
       2022-11-27 23:59:02 +08:00
    是个好办法。

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

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

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

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

    liburing.so.2 这个在 debian 里找不到
    cnbatch
        33
    cnbatch  
    OP
       2022-12-01 02:11:56 +08:00
    @lly8666 保险起见,我还是再另外弄了个专门用于 botan 2.9 的版本,以防万一
    hsly109
        34
    hsly109  
       2022-12-01 20:31:48 +08:00
    debian 11 還是不太行 那個 libbotan 版本 2.so.9 是 debian LTS buster 的 package ,2.so.19 是 testing 的……我是 stable bullseye ,剛好卡在中間
    cnbatch
        35
    cnbatch  
    OP
       2022-12-01 23:43:51 +08:00
    @hsly109 针对最新 Debian 11 弄了个 2.17 的版本,应该够用的了。

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

    我刚刚去看了下作者本人对开发环境的描述 ( https://botan.randombit.net/handbook/support.html ),Linux 是主力,然后是 Windows ,剩下的都靠 Github 自动化工具。既然 Linux 是作者的主力平台,使用起来却最“拉跨”,实在费解。
    lly8666
        36
    lly8666  
       2022-12-03 09:10:34 +08:00 via Android
    debian10 还是跑不起来,一些依赖版本不对
    Neur2n
        37
    Neur2n  
       2022-12-09 17:08:30 +08:00
    看 udp2raw 的文档,服务端似乎是要搭建在 VPS 上,udphop 也需要这样吗
    cnbatch
        38
    cnbatch  
    OP
       2022-12-09 22:27:00 +08:00
    @lly8666 前几天更新了静态链接版本,可以再试试
    cnbatch
        39
    cnbatch  
    OP
       2022-12-09 22:29:17 +08:00
    @Neur2n udphop 并非一定要 VPS ,我自己就没把 udphop 放在 VPS 上,而是放在路由器(服务端模式)和自己的电脑(客户端模式)
    Neur2n
        40
    Neur2n  
       2022-12-09 22:31:20 +08:00
    @cnbatch 请问有文档吗,谢谢
    cnbatch
        41
    cnbatch  
    OP
       2022-12-10 01:14:59 +08:00
    @Neur2n 还不至于复杂到需要文档的地步吧
    目前位于 Readme 的介绍就是完整的功能介绍了,可以配置的选项都写在了表格内
    sbilly
        42
    sbilly  
       2023-02-03 10:16:41 +08:00
    UDP 国内环境太恶劣,QoS 不是基于会话是基于源 IP 的就没戏了。
    TCP 打洞成功率太低了。
    coolchen112
        43
    coolchen112  
       2023-10-05 17:13:05 +08:00
    你好题主,看了你的项目表示很感兴趣,我司最近正在招聘相关内核开发人员,不知道是否有机会聊聊? V2EX 上未找到私信功能,有可能的话希望可以邮件联系我 x#betaidc.com 我司目前开发人员 base 杭州。
    z836454898
        44
    z836454898  
       2023-11-06 17:40:29 +08:00
    大流量跑 udp ,电信运营商直接把 ip 地址拉黑,任凭怎么换端口都没用
    juzisang
        45
    juzisang  
       146 天前
    额,有个疑问,我看描述有说如果服务端位于 NAT 后方,然后提供了 stun_server 配置,没看懂这个是做什么的。

    服务端都在 NAT 后面了,客户端怎么连接,这个 stun_server 配置是用来做什么的呢?

    我现在就是服务端和客户端都在不同的 NAT 后面,想让他们能够互相通信,好像现在是做不到的?
    cnbatch
        46
    cnbatch  
    OP
       145 天前
    @juzisang 打洞用的。可以参考 natter 的描述:
    /t/879549
    /t/1030967
    juzisang
        47
    juzisang  
       145 天前
    @cnbatch #46 感谢,发现新大陆了,😄
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2877 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:02 · PVG 23:02 · LAX 07:02 · JFK 10:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.