造了个试验品,利用频繁更换端口的方式来躲避运营商的 UDP 限速 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cnbatch
V2EX    宽带症候群

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

  •  1
     
  •   cnbatch 2022-11-27 18:13:18 +08:00 11849 次点击
    这是一个创建于 1049 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为了解决 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 &nbs;
       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 杭州。
    meteora0tkvo
        44
    meteora0tkvo  
       2023-11-06 17:40:29 +08:00
    大流量跑 udp ,电信运营商直接把 ip 地址拉黑,任凭怎么换端口都没用
    juzisang
        45
    juzisang  
       2024-07-02 19:40:25 +08:00
    额,有个疑问,我看描述有说如果服务端位于 NAT 后方,然后提供了 stun_server 配置,没看懂这个是做什么的。

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

    我现在就是服务端和客户端都在不同的 NAT 后面,想让他们能够互相通信,好像现在是做不到的?
    cnbatch
        46
    cnbatch  
    OP
       2024-07-03 09:13:19 +08:00
    @juzisang 打洞用的。可以参考 natter 的描述:
    /t/879549
    /t/1030967
    juzisang
        47
    juzisang  
       2024-07-03 11:41:49 +08:00
    @cnbatch #46 感谢,发现新大陆了,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1018 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:27 PVG 02:27 LAX 11:27 JFK 14:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86