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

[长文] 移动白名单上传限速机制,以及解决办法

  •  1
     
  •   mikewang · 4 天前 · 2908 次点击

    背景

    移动开始对白名单以外的域名、网络协议进行上传限速。

    具体表现在:

    • 国内网盘、邮箱、微信、测速网站等上传一切正常。
    • 使用 IPv6 公网回家连 NAS ,或者 IPv4 打洞回家,读取文件异常缓慢。
    • BT 没有上传流量。
    • iperf3 测速只有 1 Mbps 左右。
    • 上传被限速,达到 1 Mbps 峰值时,时有丢包现象或者 ping 值上升。

    除了移动以外,其他运营商也有类似表现:

    • /t/1112956 北京移动 测速正常但上传看着确实变小了
    • /t/1057505 移动似乎对非常用端口上传进行了限速
    • /t/1063534 电信宽带测速正常,NAS 上传被限速
    • /t/1108373 上海电信上传限速
    • /t/1081007 上海电信上传限速
    • ...

    限速机制

    深度包检测。默认限速 1 Mbps ( 125 kB/s ),检测到白名单协议、域名之后,放开至正常速(我测得 100 Mbps )。

    以下均是我在移动宽带下测得的结果。

    TCP

    • HTTPS:TCP 443 端口,SNI 探测

      目标端口为 443 的 TCP 连接建立成功,客户端发送的 TLS Client Hello 包含白名单域名,解除限速。

      比如,在 TCP 建立时,使用下方二进制串,即可解除限速。虽然很多字段是不合法的,比如长度填了 0 ,域名直接放在了最后。但是不影响上游匹配到了 TLS 特征,并命中了域名关键字,放开限速。

      "\x16"         // Handshake
      "\x03\x00"     // TLS version
      "\x00\x00"     // Length (0)
      "\x01"         // Client Hello
      "\x00\x00\x00" // Length (0)
      "\x03\x00"     // TLS version
      "speedtest.cn"
      

      这个检测仅适用于 443 端口。其他端口使用 HTTPS 依然保持限速。

    • HTTP:所有 TCP 端口,HTTP 头 Host 字段检测

      同样地,只要匹配到关键特征即可解除限速。

      "HTTP/\r\n"
      "Host: speedtest.cn\r\n"
      "\r\n"
      

    UDP

    • DNS:53 端口,首个 UDP 包含有 DNS 协议特征

      目标端口为 53 端口,只要第一个 UDP 包发送含有如下 DNS 特征的请求,就可以解除限速。同样是特征匹配,不需要合法。

      "\0\0\1\0\0\1\0\0\0\0\0\0\0\0\0\1\0\1"
      
    • 待发现

      尚未找出对其他 UDP 端口解除限速的方法。

    补充

    该检测会追踪整个 TCP 的状态。在已建立的 TCP 连接中,构造 SYN 之后再发 SNI 或者 HTTP 特征并不会骗过检测机制,达成解除限速的效果。

    话说,这个探测方式是不是很眼熟。我怀疑是不是某个神秘技术下放到了运营商,区别只在:一个是检测到就断流,一个是检测到就恢复上传速度。

    解决方案

    这里介绍除了投诉以外的规避方案。

    带 HTTP 混淆的网络工具

    设置混淆的 host 为白名单网站即可。

    udp2raw 中加上 HTTP 特征

    使用 TCP 协议作为隧道可能不是最佳,因此我 fork 了 udp2raw ,在上面加上了 HTTP 特征: https://github.com/MikeWang000000/udp2raw

    这个特征很明显的通过了运营商的检测,上传速度恢复到 100 Mbps 。

    可以参考这个提交:commit c4995ea

    使用方法是在参数后加上 --fake-http speedtest.cn 这样就会混淆为在访问测速网站。

    对于一般的 TCP 连接

    (理论上,未验证)可以使用 eBPF 等手段,在 TCP 连接建立时,使用较小的 TTL 发送 HTTP 特征。这样既通过了运营商的检测,又不会到达服务器。

    后记

    因为省间结算,运营商费尽心机限制用户上传。这种白名单机制也让用户难以投诉:常见网站、测速网站的上传检测都是正常。运营商可以直接不承认有限速行为,而归结为用户问题。不知道以后还有什么新的手段呢?

    31 条回复    2025-03-20 08:59:07 +08:00
    heiher
        1
    heiher  
       4 天前 via Android
    赞!从外面建立的 TCP 入站连接,连接建立后服务端发送白名单 HTTP 请求作为“响应”,能解除上传限速吗?
    mikewang
        2
    mikewang  
    OP
       4 天前
    #1 @heiher 刚刚实测了一下。有意思的是,这个包不分方向。
    从 server -> client 或者 client -> server 只要有一处匹配到特征,就解除限速了。
    heiher
        3
    heiher  
       4 天前 via Android
    @mikewang #2 666 ,我也去在“回家”套件中加上这个伪装
    MFWT
        4
    MFWT  
       4 天前
    > 带 HTTP 混淆的网络工具

    这个会不会有风险?家宽开 HTTP 访问什么的,不确定他判断方式是主动扫描还是流量监听
    heiher
        5
    heiher  
       4 天前 via Android
    @MFWT 好在不区分方向,如果是手机访问为主,逆向进行 HTTP 握手对服务端的家宽是保护。如果两端都是家宽还是有风险。 @mikewang 除了 http(s)还有没有发现什么其它特征也有同等效果?
    Trim21
        6
    Trim21  
       4 天前
    BT 的 TCP 流必须以特定的协议头 开始,看这样子好像不太好绕过?
    Trim21
        7
    Trim21  
       4 天前
    @Trim21 #6 如果是未开启混淆的 bt tcp 的话,理论上说应该可以在 68 字节的握手之后插入一个包含任意文本的包。不过不知道在这个地方发送对应的文本还能不能触发解除限制了。

    \x00\x00\x00\x1f
    \x20
    \x99HTTP/\r\nHost: speedtest.cn\r\n\r\n

    ( hex 之后是 0000001f2099485454502f0d0a486f73743a207370656564746573742e636e0d0a0d0a )
    383394544
        8
    383394544  
       4 天前 via iPhone
    看到白名单域名是 speedtest.cn 笑了
    iijboom
        9
    iijboom  
       4 天前
    提问,电信的被 qos 或者其他特殊待遇有明显的 mtu 特征或者其他特征,移动的都有什么特征?
    上海电信的 https://www.v2ex.com/t/1091657 https://www.v2ex.com/t/1097472 精品网和被限速的 mtu 都是 1442
    广东电信的 https://www.v2ex.com/t/1079783 没被限速,但是 mtu 变 1430 ,内网 IP 变 100.64 ,变 nat4 ,ipv6 半小时老化
    youx
        10
    youx  
       4 天前
    @383394544 speedtest.net 中国大陆测速节点 迟早要被全部拆除
    huihuilang
        11
    huihuilang  
       4 天前 via Android
    所谓的 sni 伪装?
    伪装成境外的白名单是不是也可以?
    383394544
        12
    383394544  
       4 天前 via iPhone
    @youx #10 .net 和 .cn 不是一个站
    heiher
        13
    heiher  
       4 天前 via Android
    另外,是不是有没有 http response 不重要?如果是伪装双向都发 http request :D
    wy315700
        14
    wy315700  
       4 天前
    哪个地方的移动啊

    上海移动最近给大流量用户开始每天晚上 8 点和 10 点断线重拨
    youx
        15
    youx  
       4 天前
    @383394544 我知道不是同一个网站
    iijboom
        16
    iijboom  
       4 天前
    @wy315700 贴主是江苏移动,上海移动这个手段倒是很多地方用,就是干扰 pcdn
    PROJECT
        17
    PROJECT  
       4 天前
    看上去 doh 或者 doq 是有点用的
    heiher
        18
    heiher  
       4 天前
    实测我这移动和电信之间白天跨网不限速,晚高峰使用 HTTP 伪装也不提速。
    JasperHale
        19
    JasperHale  
       3 天前
    鄙人觉得这个逻辑不像是 GFW 倒是类似 反诈墙的下放.
    NewYear
        20
    NewYear  
       3 天前
    哈哈,我在想在未来的世界,互联网充满了这类“伪装数据包”,也是蛮有意思的。
    ilili
        21
    ilili  
       3 天前
    我预感伪装 host 免流的那一套很适合解限速,ss+obfs 就完事了
    ERvISTyP
        22
    ERvISTyP  
       3 天前
    今天试了下 op 的这个方案( udp2raw + wireguard ),还是限速,不知道我这电信用了什么黑魔法

    我这最开始的时候用 shadowTLS 就行破,现在都不行了
    basncy
        23
    basncy  
       3 天前
    解除 UDP 限速很容易,使用 RAID 0 级的条带化并行传输,2 秒零百加速不是梦。为了世界的和平,正常的 ISP 会封 IP 断流(迅雷一开,全家断网)。
    east4ming
        24
    east4ming  
       3 天前 via Android
    突然想到一个问题,那 http3 呢?
    heiher
        25
    heiher  
       2 天前
    @basncy #23 RAID 0 级条带化并行传输是指开很多个 UDP 端口,类似跳频吗?运营商的 UDP 流控会不会一个用户侧端口共享一个状态机呀
    playboy0
        26
    playboy0  
       2 天前
    如果直接用 reality 这种协议呢🤔 谢谢楼主
    kdzhq443
        27
    kdzhq443  
       2 天前
    何必呢,直接转网
    rulagiti
        28
    rulagiti  
       1 天前
    真恶心,骚操作一波又一波。
    shomaru
        29
    shomaru  
       1 天前
    @ERvISTyP 能不能指点下如何操作
    iamqk
        30
    iamqk  
       15 小时 10 分钟前
    我说的怎么挂了代理上传速度就恢复正常呢
    zzyyzz
        31
    zzyyzz  
       13 小时 10 分钟前
    湖南电信上周就发现了。表现在 OneDrive 上传时,一开始只能跑在 800-1024KByte/s 。一段时间后,可达到 5-6Mbyte/s 满速上传。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3076 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:09 · PVG 22:09 · LAX 07:09 · JFK 10:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.