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

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

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

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

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

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




    看了眼代码,发现自己看不懂
    des
        4
    des  
       73 天前
    这个咋用啊
    Lentin
        5
    Lentin  
       73 天前
    等个使用说明书~。~
    Chihaya0824
        6
    Chihaya0824  
       73 天前
    野生的 kmod 出现了,这个性能怎么样啊,可以无脑给所有流量 setmark 吗?
    lambdaq
        7
    lambdaq  
       73 天前
    好家伙。0 注释!
    bosonx
        8
    bosonx  
       73 天前 via Android
    等一个教程
    VwEI
        9
    VwEI  
       73 天前
    等一个教程
    aa51513
        10
    aa51513  
       72 天前
    你也太高看我了,一行注释都没有,怕是一时半会儿看不懂
    skylancer
        11
    skylancer  
       72 天前
    这个方式有人用来过墙的,我也没想过能绕过限速...
    skylancer
        12
    skylancer  
       72 天前
    这个方式有人用来过墙的,我也没想过居然能绕过限速...
    hondaya
        13
    hondaya  
       72 天前
    同求教程,我这非 443 端口上传流量大点就限制上传速率到 0.5 Mbps ,节点,frp 都没法用。自建节点和 frp 域名改成 speedtest 开头的就不限速了。
    thinsychen
        14
    thinsychen  
       72 天前
    无需旁路部署,在有权限的路由上可以部署,
    实测 内核 5.15 sh telecom 可以破解 TCP 限速 5M ,基本达到满速!感谢楼主提供的思路。
    thinsychen
        15
    thinsychen  
       72 天前
    或者 客户端部署也可以。
    huaxie1988
        16
    huaxie1988  
       72 天前
    怎么使用呢
    leeyijie
        17
    leeyijie  
       71 天前
    收藏一下
    bhkkvip
        18
    bhkkvip  
       71 天前
    用 deepseek 翻译了一遍,又问了下怎么用,大概好像知道了...
    TonyBoney
        19
    TonyBoney  
       71 天前   ❤️ 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  
       71 天前   ❤️ 1
    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  
       71 天前   ❤️ 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  
       71 天前
    下一步就是免流技术的大胜利?从来没想过这种技术会用来解决回家的问题。
    zer
        23
    zer  
       71 天前
    感觉可以搞成 openwrt kmod 插件
    LGA1150
        24
    LGA1150  
    OP
       71 天前
    @skylancer
    @Ipsum
    的确可以用来过墙,反正原理差不多,只是黑名单白名单的区别
    shomaru
        25
    shomaru  
       69 天前 via Android
    @TonyBoney 大佬能否加个 q 指导一下
    szdosar
        26
    szdosar  
       68 天前
    就是告诉看门的保安大叔,我是厂长的小舅子,厂长他刚买了台 su7u ,帮他提车的。
    保安大叔一看,放行,并且场内不限速,直接飙到时速 350KM
    Lentin
        27
    Lentin  
       67 天前
    参考 #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  
       67 天前
    大佬,这个方法可以解决 pt 限速的问题吗?
    sadan9
        29
    sadan9  
       66 天前   ❤️ 1
    编译了一个 openwrt 版,测试中.....
    tibbersvs
        30
    tibbersvs  
       66 天前
    @sadan9 大佬求带上车
    siyanmao
        31
    siyanmao  
       66 天前
    对 UDP 流量,伪装成 QUIC 会有效果吗…
    qwvy2g
        32
    qwvy2g  
       66 天前
    @sadan9 源码里面没有 kmod-debugfs 这个模块,没法继续下去。
    sadan9
        33
    sadan9  
       65 天前
    @qwvy2g 你说的"源"还是"源码"? debugfs 应该是很古老的模块了。
    c398425861
        34
    c398425861  
       64 天前
    ImmortalWrt 可以弄吗
    MutuMutu
        35
    MutuMutu  
       61 天前
    @sadan9 大佬测得咋样了
    kob5213
        36
    kob5213  
       57 天前   ❤️ 1
    lovexiaofan12312
        37
    lovexiaofan12312  
       55 天前
    openwrt 已经加载模块,就是不知道怎么详细使用,来个大佬
    mac100
        38
    mac100  
       41 天前
    @lovexiaofan12312 模块 怎么打包的?
    Lentin
        39
    Lentin  
       41 天前
    @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
       41 天前
    @Lentin 这个怎么到光猫转了一圈又回到 LAN 了?是不是光猫开了 nat loopback ,你用公网 IP:端口访问内网服务?
    Lentin
        41
    Lentin  
       40 天前 via iPhone
    @LGA1150 对 平时用家里的节点回家+梯子 ,回家了用上这个模块就不通了,想知道有没有别的好点的方法用 iptables 解决这个问题,不然就只能写 ssid 策略了,光猫似乎没地方关闭 nat loopback
    LGA1150
        42
    LGA1150  
    OP
       40 天前
    @Lentin 如果关了 nat loopback 你就彻底不能通了。
    在软路由上抓包看,经过光猫 nat loopback 之后的源 IP 目的 IP 是多少?
    Lentin
        43
    Lentin  
       40 天前
    @LGA1150 #42
    软路由看到的源 ip 是光猫的公网 IP123.123.123.123 ,目的 IP 是软路由的内网地址 192.168.1.2
    LGA1150
        44
    LGA1150  
    OP
       40 天前
    @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  
       40 天前
    @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  
       15 天前
    测试有效,这边电信确实能破解了限速
    lqu3j
        47
    lqu3j  
       15 天前
    @lqu3j 成都电信
    TonyBoney
        48
    TonyBoney  
       7 天前
    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  
       4 天前
    之前写的 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  
       3 天前 via Android
    小白不会用啊,我主路由是爱快,能用在爱快里面吗
    kob5213
        51
    kob5213  
       2 天前
    @TonyBoney 目的地址是本地地址还是远端地址
    TonyBoney
        52
    TonyBoney  
       2 天前
    @kob5213 远端服务器地址
    stonesirsir
        53
    stonesirsir  
       1 天前
    @lqu3j 伪装网站用的 speedtest.cn 吗?我的访问 vps 丢包,没救了
    lqu3j
        54
    lqu3j  
       1 天前
    @stonesirsir 是的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2591 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:39 · PVG 12:39 · LAX 21:39 · JFK 00:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.