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

[未测试] 绕过上海电信白名单限速

  •  
  •   LGA1150 · 229 天前 · 14364 次点击
    这是一个创建于 229 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自用了很久的玩具项目 https://github.com/LGA1150/nf_deaf

    原理:TCP 三次握手后在真实的请求之前发送一个在白名单之内的伪造请求,理论上不需要有服务器转发。
    使用 skb fwmark 控制,兼容 iptables/nftables 。
    伪造请求内容可自定义。

    55 条回复    2025-06-09 22:55:54 +08:00
    wyntalgeer
        1
    wyntalgeer  
       229 天前
    旁路部署?
    sadan9
        2
    sadan9  
       229 天前
    关键添加的数据如何不影响正常的通信。
    wy315700
        3
    wy315700  
       229 天前
    @sadan9
    TTL 短一点就行了,




    看了眼代码,发现自己看不懂
    des
        4
    des  
       229 天前
    这个咋用啊
    Lentin
        5
    Lentin  
       229 天前
    等个使用说明书~。~
    Chihaya0824
        6
    Chihaya0824  
    PRO
       229 天前
    野生的 kmod 出现了,这个性能怎么样啊,可以无脑给所有流量 setmark 吗?
    lambdaq
        7
    lambdaq  
       229 天前
    好家伙。0 注释!
    bosonx
        8
    bosonx  
       228 天前 via Android
    等一个教程
    VwEI
        9
    VwEI  
       228 天前
    等一个教程
    aa51513
        10
    aa51513  
       228 天前
    你也太高看我了,一行注释都没有,怕是一时半会儿看不懂
    skylancer
        11
    skylancer  
       228 天前
    这个方式有人用来过墙的,我也没想过能绕过限速...
    skylancer
        12
    skylancer  
       228 天前
    这个方式有人用来过墙的,我也没想过居然能绕过限速...
    hondaya
        13
    hondaya  
       228 天前   ❤️ 1
    同求教程,我这非 443 端口上传流量大点就限制上传速率到 0.5 Mbps ,节点,frp 都没法用。自建节点和 frp 域名改成 speedtest 开头的就不限速了。
    thinsychen
        14
    thinsychen  
       228 天前   ❤️ 1
    无需旁路部署,在有权限的路由上可以部署,
    实测 内核 5.15 sh telecom 可以破解 TCP 限速 5M ,基本达到满速!感谢楼主提供的思路。
    thinsychen
        15
    thinsychen  
       228 天前
    或者 客户端部署也可以。
    huaxie1988
        16
    huaxie1988  
       227 天前
    怎么使用呢
    leeyijie
        17
    leeyijie  
       227 天前
    收藏一下
    bhkkvip
        18
    bhkkvip  
       227 天前
    用 deepseek 翻译了一遍,又问了下怎么用,大概好像知道了...
    TonyBoney
        19
    TonyBoney  
       227 天前   ❤️ 1
    在 Linux 路由器成功使用,编译并加载模块后,通过匹配数据包大小的方式跳过握手包,把教程分享给大家,不用谢:
    1. git clone 楼主的仓库,不用多说。
    2. 可以修改源码里的 payload 为你喜欢的内容,也可以在加载模块后修改/sys/kernel/debug/nf_deaf/buf 的内容,例如:
    #define NF_DEAF_BUF_DEFAULT "GET / HTTP/1.1\r\n\
    Host: www.speedtest.cn\r\n\
    User-Agent: Mozilla/5.0\r\n\
    Accept: */*\r\n\
    Connection: close\r\n\
    \r\n"
    3. 改一下 MakeFile:
    obj-m += nf_deaf.o
    KDIR := /lib/modules/$(shell uname -r)/build

    all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

    clean:
    $(MAKE) -C $(KDIR) M=$(PWD) clean

    4. 在源码目录运行 make 命令编译,没有 make 或 gcc 的自行安装
    5. 加载内核模块:insmod nf_deaf.ko ,若命令 lsmod |grep nf_deaf 有返回那么就加载完成啦
    TonyBoney
        20
    TonyBoney  
       227 天前   ❤️ 2
    6. 接下来需要给特定数据包打标记,该内核模块的触发条件是 mark 的高 16 位为 0xdeaf ,低 16 位的定义如下所示:
    15:设置 TCP 的确认号
    14:设置 TCP 的序号
    13:设置 TCP 校验和
    12-10:指定重复发送的次数
    9-5:设置延迟发送时间(jiffies)
    4-0:设置 TTL 值
    那么我们想把 TTL 设置为 2 ,别的不变,只需要设置 mark 为 0xdeaf0002 ,仅修改总大小大于 120(ipv4)和 100(ipv6)的包,避免影响握手
    TonyBoney
        21
    TonyBoney  
       227 天前   ❤️ 1
    7. 如果用 nftables ,ipv4 和 ipv6 的命令分别是:(自行修改目的地址,自担风险,小心连不上服务器)
    nft insert rule inet filter postrouting ip daddr {1.1.1.1} tcp dport { 0-65535 } meta length gt 120 meta mark set 0xdeaf0002 return comment "hahaha"

    nft insert rule inet filter postrouting ip6 daddr {2606:4700:4700::1111} tcp dport { 0-65535 } meta length gt 100 meta mark set 0xdeaf0002 return comment "hahaha"
    8. 如果用 iptables ,ipv4 和 ipv6 的命令分别是:(自行修改目的地址,自担风险,小心连不上服务器)
    iptables -t mangle -A POSTROUTING -d 1.1.1.1 -p tcp --dport 0:65535 -m length --length 121:65535 -j MARK --set-mark 0xdeaf0002 -m comment --comment "hahaha"

    ip6tables -t mangle -A POSTROUTING -d 2606:4700:4700::1111 -p tcp --dport 0:65535 -m length --length 101:65535 -j MARK --set-mark 0xdeaf0002 -m comment --comment "hahaha"
    Ipsum
        22
    Ipsum  
       226 天前
    下一步就是免流技术的大胜利?从来没想过这种技术会用来解决回家的问题。
    zer
        23
    zer  
       226 天前
    感觉可以搞成 openwrt kmod 插件
    LGA1150
        24
    LGA1150  
    OP
       226 天前
    @skylancer
    @Ipsum
    的确可以用来过墙,反正原理差不多,只是黑名单白名单的区别
    shomaru
        25
    shomaru  
       225 天前 via Android
    @TonyBoney 大佬能否加个 q 指导一下
    szdosar
        26
    szdosar  
       223 天前
    就是告诉看门的保安大叔,我是厂长的小舅子,厂长他刚买了台 su7u ,帮他提车的。
    保安大叔一看,放行,并且场内不限速,直接飙到时速 350KM
    Lentin
        27
    Lentin  
       223 天前
    参考 #19 楼大哥的步骤搓了一个飞牛 os 的内核文件,实测如果是旁路设备的话需要 ttl 改为 3 也就是对应的 mark 为 0xdeaf0003

    飞牛 OS 内核版本 Linux fnOS 6.6.38-trim #92 SMP PREEMPT_DYNAMIC Tue Mar 11 17:22:50 CST 2025 x86_64 GNU/Linux

    https://drive.google.com/file/d/1O9HRTqfJrxhuCaFlNMVT9rxNTd9eNaYt/view?usp=drive_link

    自己编译的话 build 目录的文件是从这个包里解包出来的,系统内没有这个 build 目录
    https://download.liveupdate.fnnas.com/x86_64/kernel/6.6.38-trim-92.deb
    dhdjfnnf
        28
    dhdjfnnf  
       222 天前
    大佬,这个方法可以解决 pt 限速的问题吗?
    sadan9
        29
    sadan9  
       222 天前   ❤️ 1
    编译了一个 openwrt 版,测试中.....
    tibbersvs
        30
    tibbersvs  
       222 天前
    @sadan9 大佬求带上车
    siyanmao
        31
    siyanmao  
       221 天前
    对 UDP 流量,伪装成 QUIC 会有效果吗…
    qwvy2g
        32
    qwvy2g  
       221 天前
    @sadan9 源码里面没有 kmod-debugfs 这个模块,没法继续下去。
    sadan9
        33
    sadan9  
       221 天前
    @qwvy2g 你说的"源"还是"源码"? debugfs 应该是很古老的模块了。
    c398425861
        34
    c398425861  
       219 天前
    ImmortalWrt 可以弄吗
    MutuMutu
        35
    MutuMutu  
       216 天前
    @sadan9 大佬测得咋样了
    kob5213
        36
    kob5213  
       212 天前   ❤️ 1
    lovexiaofan12312
        37
    lovexiaofan12312  
       211 天前
    openwrt 已经加载模块,就是不知道怎么详细使用,来个大佬
    mac100
        38
    mac100  
       197 天前
    @lovexiaofan12312 模块 怎么打包的?
    Lentin
        39
    Lentin  
       196 天前
    @TonyBoney #21 老哥 请问一下有没有办法 iptables 放行这个路径的流量,这种路径 ipv4 访问的话访问会有问题,nf_deaf 的设备旁路部署的
    Phone ( LAN )--光猫( WAN )-- 软路由( LAN )
    192.168.1.10 -- 123.123.123.123:80 -- 192.168.1.2:80
    测试过需要放行 123.123.123.123 才能正常访问,但是家宽公网 ip 是随机的,不太好锁定地址。。有没有除了用脚本获取公网 ip 自动添加规则以外的其他方案?
    LGA1150
        40
    LGA1150  
    OP
       196 天前
    @Lentin 这个怎么到光猫转了一圈又回到 LAN 了?是不是光猫开了 nat loopback ,你用公网 IP:端口访问内网服务?
    Lentin
        41
    Lentin  
       196 天前 via iPhone
    @LGA1150 对 平时用家里的节点回家+梯子 ,回家了用上这个模块就不通了,想知道有没有别的好点的方法用 iptables 解决这个问题,不然就只能写 ssid 策略了,光猫似乎没地方关闭 nat loopback
    LGA1150
        42
    LGA1150  
    OP
       196 天前
    @Lentin 如果关了 nat loopback 你就彻底不能通了。
    在软路由上抓包看,经过光猫 nat loopback 之后的源 IP 目的 IP 是多少?
    Lentin
        43
    Lentin  
       196 天前
    @LGA1150 #42
    软路由看到的源 ip 是光猫的公网 IP123.123.123.123 ,目的 IP 是软路由的内网地址 192.168.1.2
    LGA1150
        44
    LGA1150  
    OP
       196 天前
    @Lentin 那光猫这个实现有 bug ,OpenWrt 的默认用 LAN IP 当源 IP 的(可选 WAN IP )。

    不过既然改不了,就只能在软路由加个过滤规则。我给几个思路:
    1 、排除你的节点端口
    2 、从光猫访问软路由属于传入连接,使用 conntrack 区分这个连接是外部发起的还是本地发起的,并用 connmark 标记,之后就可以排除不是本地发起的连接;
    3 、如果还是想匹配传入连接,可以在 2 )的基础上,过滤 TTL 。由于光猫和软路由在同一网段,TTL 一般是个二进制整数:64 或 128 或 255 (不是 256 因为 TTL 最大就 255 ),而从光猫 WAN 外部进入的连接,由于经过了多个路由器,TTL 一般不是整数。这样可以区分 WAN 传入连接 和 光猫自己发起的连接。
    Lentin
        45
    Lentin  
       196 天前
    @LGA1150 #44 可以了,我加了一个 ttl 排除的规则就行了,经过测试测试用网线的话源 IP 是内网地址,wifi 的话会被映射为公网源地址,旁路部署需要给 set-mark 的 2 改成 3
    iptables -t mangle -A POSTROUTING -p tcp --dport 0:65535 \
    -m length --length 121:65535 \
    -m ttl ! --ttl-eq 64 \
    -j MARK --set-mark 0xdeaf0003
    lqu3j
        46
    lqu3j  
       171 天前
    测试有效,这边电信确实能破解了限速
    lqu3j
        47
    lqu3j  
       171 天前
    @lqu3j 成都电信
    TonyBoney
        48
    TonyBoney  
       163 天前   ❤️ 1
    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 ,不用自己改文件了。
    这样一来修改的包至少 wireshark 看顺眼了,不会标黑了
    TonyBoney
        49
    TonyBoney  
       160 天前   ❤️ 1
    之前写的 iptables/nftables 示例会给每个符合条件的包都发送一次伪装包,影响通信效率,以我 fork 版本的 mark 写个新例子,只在握手成功后发一次伪装包,iptables 太长发不出来,去项目主页看 https://github.com/kmb21y66/nf_deaf/

    例如 0xDEA10103:错误的 TCP 校验和,为防止原始包抢先发出设置 jiffies 为 1 ,TTL 为 3 。

    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
    }
    }
    wangshou89
        50
    wangshou89  
       158 天前 via Android
    小白不会用啊,我主路由是爱快,能用在爱快里面吗
    kob5213
        51
    kob5213  
       158 天前
    @TonyBoney 目的地址是本地地址还是远端地址
    TonyBoney
        52
    TonyBoney  
       158 天前
    @kob5213 远端服务器地址
    stonesirsir
        53
    stonesirsir  
       157 天前
    @lqu3j 伪装网站用的 speedtest.cn 吗?我的访问 vps 丢包,没救了
    lqu3j
        54
    lqu3j  
       157 天前
    @stonesirsir 是的
    Lentin
        55
    Lentin  
       152 天前
    抓包看了一下进方向的流量 局域网访问本地公网的 ttl 流量始终为系统默认-1 可以这么写死了好像

    nft -f - <<EOF
    flush table ip mangle
    table ip mangle {
    chain bypass {
    type filter hook prerouting priority mangle -10; policy accept;
    ip ttl 63 meta mark set 0x8000 # *nix 默认 ttl 64-1
    ip ttl 127 meta mark set 0x8000 # windows 默认 ttl 128-1
    }
    }
    EOF
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2769 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:07 · PVG 22:07 · LAX 06:07 · JFK 09:07
    ♥ Do have faith in what you're doing.