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

移动晚高峰的白名单 QoS 限速

  •  
  •   TonyBoney · 7 天前 · 4136 次点击
    最近我家的移动宽带从晚上 7 点准时开始网络卡顿,晚上 11 点准时结束,疑似遭到白名单 QoS 限速,具体观察如下:

    1. IPv4/IPv6 均存在限制。
    2. mtr 的 ICMP 、TCP 、UDP 模式均正常无丢包。
    3. 测速网站无论怎么测都正常。
    4. 与线路无关,哪怕是 mtr 测试 0 丢包低延迟的 CMIN2 线路也极为卡顿。
    5. 经客户端抓包发现,运营商限制到同一目的 IP+端口的 TCP 连接数,多的 SYN 丢掉。
    6. 经服务端抓包发现,高峰期开启无差别限速模式,触发限速后,运营商会丢掉服务端发出的含有 PSH 或 FIN 的 TCP 控制报文,于是双方只能等超时后 RST ,导致大量连接处于等待状态很久后才 RST ,大量的不正常连接导致整体网络卡顿。

    解决方法:使用该内核模块在 TCP 连接刚建立时发送伪装白名单测速网站的 HTTP GET 请求,效果立竿见影,上述限制消失,高峰期不再卡顿。

    /t/1120910
    第 1 条附言  ·  7 天前
    #24
    Fork 并修改了一下模块的源码以更适合这个场景
    36 条回复    2025-06-04 21:55:17 +08:00
    AlphaTauriHonda
        1
    AlphaTauriHonda  
       7 天前 via iPhone
    太夸张了,这种宽带没办法用
    uuhhme
        2
    uuhhme  
       7 天前 via Android   ❤️ 6
    现在新闻一说万兆宽带我就想笑,现在只要上传多了,就给你搞小动作,还拿万兆吹牛逼真是尴尬
    6AbK2rj2vLBD
        3
    6AbK2rj2vLBD  
       7 天前
    很多地方同城跨网都限速,限制到几百 kb/s ,主要是限速导致丢包,高延迟
    someonesnone
        4
    someonesnone  
       7 天前
    看来伪装访问测速网站以后会成为新趋势
    Yien
        5
    Yien  
       7 天前
    看项目的 issue 好像说失效了
    billytom
        6
    billytom  
       7 天前
    @TonyBoney 请教下楼主具体白名单测试网址是?感谢,我也是最近被移动墙得不行,晚上看个视频都开头一分钟模糊的
    baobao1270
        7
    baobao1270  
       7 天前
    需要改 linux 内核……
    要是能用 eBPF 做就好了
    sontjer1
        8
    sontjer1  
       7 天前
    基本上属于 isp 违约了,有法律背景的或者有相关法律资源的可以提告
    dford
        9
    dford  
       7 天前
    是只有跨网限速吧?
    AlwaysPersist
        10
    AlwaysPersist  
       7 天前
    我也遇到类似情况,19:00-23:00 ,访问家里的 NAS ,速度只有不到 1MB/s 通过 iperf3 测试,发现 TCP 重传很多次,白天时间段,可以跑到 5MB/s
    est
        11
    est  
       7 天前
    邀请 某 cdn 警察 @allin1 对这一现象进行解释。
    allin1
        12
    allin1  
       7 天前
    @est 解释啥???我还能发链接。水深火热是有门槛,新人看不到。但不是没人看到
    allin1
        13
    allin1  
       7 天前
    @Livid
    楼上 @est 多次在无关的帖子下 at 我。是他在纠缠。那我只好继续回应
    https://yangjunhui.monster/t/1133329?p=1#r_16284754
    https://yangjunhui.monster/t/1133974?p=1#r_16294370
    renyi1986
        14
    renyi1986  
       7 天前
    都怪 pcdn ,不跑 pcdn“”没得问题“”,
    TonyBoney
        15
    TonyBoney  
    OP
       7 天前 via Android
    @billytom 可以多找几个国内测速网站试试看,例如
    www#speedtest#cn
    TonyBoney
        16
    TonyBoney  
    OP
       7 天前 via Android
    @dford 感觉是只有本省+本网不限速
    est
        17
    est  
       7 天前
    @allin1 哦好。警察说了这个情况属于 “无关的帖子” ,那么大家暂且认为这件事里就是运营商瞎整,不是这届消费者的原因。
    allin1
        18
    allin1  
       7 天前
    @est 是,那怎么不亮明身份,你就是 pcdn 玩家
    对自己名声也很有自信吗
    https://yangjunhui.monster/t/1132326
    allin1
        19
    allin1  
       7 天前
    @renyi1986 你又出现了,看楼上,我知道你也是玩 pcdn 的
    MacsedProtoss
        20
    MacsedProtoss  
       7 天前 via iPhone
    这些阴阳怪气实则在跑 pcdn 的我看到一个拉黑一个 都拉黑之后世界就清净了…
    renyi1986
        21
    renyi1986  
       7 天前
    @allin1 据我观察,我用的火棒看芒果,然而火棒没有关机功能,在后台一直上传。我发现,只要长时间上传或者上传达量就可以叫 pcdn ,原则上只要有 p2p 流量就算是 pcdn ,但是运营商也不敢这么叫 pcdn ,他们只敢叫“疑是 pcdn”
    allin1
        22
    allin1  
       7 天前
    @renyi1986 我能找回之前你回我的帖子
    8kk321
        23
    8kk321  
       7 天前
    移动同市跨网的上传只有 1M……
    TonyBoney
        24
    TonyBoney  
    OP
       7 天前   ❤️ 2
    Fork 了一份 https://github.com/kmb21y66/nf_deaf
    修改如下:
    1. 删除 TCP Option 里的魔数 0x1312 ,避免检测,改为复制原数据包的 TCP Option ,同时避免了 TimeStamp 缺失问题。
    2. 补全 TCP 头缺失的接收窗口。
    3. 把 mark 左移三位,原来只能设置 0-31 的 TTL ,现在能设为正常的 0-255 。
    4. 填好了测速的 payload ,不用自己改文件了。
    这样一来只修改 TTL 的包至少 wireshark 看顺眼了,不会标黑了
    MiKing233
        25
    MiKing233  
       6 天前
    @8kk321 你还能有 1M, 我这边同城跨网联通到电信, 延迟 100ms+ 30%丢包, 速度几乎没有, 个位数到十几二十 KB/s, 完全是不可用的程度
    q0000x
        26
    q0000x  
       6 天前
    @TonyBoney 是只要编译完加载了就可以还是要像示例上那样添加 nft ?
    TonyBoney
        27
    TonyBoney  
    OP
       6 天前 via Android
    @q0000x 看项目主页我写的教程,肯定也是要添加 nftables
    microka
        28
    microka  
       4 天前
    @TonyBoney #27 大佬,请问示例 IP: 1.1.1.1 、示例 IPV6:2606:4700:4700::1111 ,这两个我能直接拿来用吗?还是说需要修改成什么 ip ?
    TonyBoney
        29
    TonyBoney  
    OP
       4 天前
    @microka 那里的 IP 填的是你使用的目的服务器地址
    microka
        30
    microka  
       4 天前
    @TonyBoney #29 但是我想整体绕过限速,比如 pt 时的限速,这种场景下应如何填写呢?
    TonyBoney
        31
    TonyBoney  
    OP
       4 天前
    之前写的 iptables/nftables 示例会给每个符合条件的包都发送一次伪装包,会影响通信效率,以我 fork 版本的 mark 写个新例子,mark 视运营商情况自行随意组合,例如设置 TTL 为 3 ,错误的 TCP 校验和,只在握手成功后发一次伪装包,为防止原始包抢先发出设置 jiffies 为 1 ,mark 是 0xDEA10103

    1. iptables 太长发不出来,去项目主页看 https://github.com/kmb21y66/nf_deaf/

    2. nftables 配置文件示例:

    #!/usr/sbin/nft -f

    #清空 nftables 规则,小心这一条
    flush ruleset

    table inet filter {
    chain postrouting {
    type filter hook postrouting priority 0 ; policy accept;
    #被标记的连接不再打标记
    ct mark 0xDEA10103 return
    #IPv4 ,目的地址 1.1.1.1 ,TCP 端口 0-65535 ,长度大于 120 的包,设置连接标记和包标记后发出
    ip daddr {1.1.1.1} tcp dport { 0-65535 } meta length gt 120 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return
    #IPv6 ,目的地址 2606:4700:4700::1111 ,TCP 端口 0-65535 ,长度大于 100 的包,设置连接标记和包标记后发出
    ip6 daddr {2606:4700:4700::1111} tcp dport { 0-65535 } meta length gt 100 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return
    }
    }
    TonyBoney
        32
    TonyBoney  
    OP
       4 天前
    @microka 可以作用在跳过私有地址后作用到所有地址,但是这个风险比较高,我自己没测试过,可能把你锁在路由器外面,另外就是这个方法只能在你主动发起连接时起作用,别人连接你时无解,这个我也加到项目的 readme 里面了:
    #!/usr/sbin/nft -f

    #清空 nftables 规则,小心这一条
    flush ruleset

    table inet filter {
    chain postrouting {
    type filter hook postrouting priority 0 ; policy accept;
    #跳过 IPv4 私有地址
    ip daddr {100.64.0.0/10, 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.2.0/24, 192.88.99.0/24, 192.168.0.0/16, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4} return
    #跳过 IPv6 私有地址
    ip6 daddr {::, ::1, ::ffff:0:0:0/96, 64:ff9b::/96, 100::/64, 2001::/32, 2001:20::/28, 2001:db8::/32, 2002::/16, fc00::/7, fe80::/10, ff00::/8} return
    #被标记的连接不再打标记
    ct mark 0xDEA10103 return
    #IPv4 ,其余所有地址,端口 0-65535 ,长度大于 120 的包,设置连接标记和包标记
    ip protocol tcp tcp dport { 0-65535 } meta length gt 120 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return
    #IPv6 ,其余所有地址,端口 0-65535 ,长度大于 100 的包,设置连接标记和包标记
    ip6 nexthdr tcp tcp dport { 0-65535 } meta length gt 100 ct mark set 0xDEA10103 meta mark set 0xDEA10103 return

    }

    }
    microka
        33
    microka  
       3 天前
    @TonyBoney 请问 #31 #32 的 nftables 配置文件在 openwrt 上应如何编辑?在 /etc/firewall.user 里添加?
    TonyBoney
        34
    TonyBoney  
    OP
       2 天前
    @microka 问问别人吧,好多年没用过 openwrt 了
    molezznet
        35
    molezznet  
       2 天前
    现在夜间上行直接砍半
    官网测速,白天显示上行 100mbps
    夜间 7-10 点左右,显示签约上行 40
    stonesirsir
        36
    stonesirsir  
       1 天前
    @Yien 原版的被检测的,这个作者这个目前没问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:41 · PVG 14:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.