自用了很久的玩具项目 https://github.com/LGA1150/nf_deaf
原理:TCP 三次握手后在真实的请求之前发送一个在白名单之内的伪造请求,理论上不需要有服务器转发。
使用 skb fwmark 控制,兼容 iptables/nftables 。
伪造请求内容可自定义。
![]() |
1
wyntalgeer 74 天前
旁路部署?
|
![]() |
2
sadan9 74 天前
关键添加的数据如何不影响正常的通信。
|
![]() |
4
des 73 天前
这个咋用啊
|
![]() |
5
Lentin 73 天前
等个使用说明书~。~
|
![]() |
6
Chihaya0824 73 天前
野生的 kmod 出现了,这个性能怎么样啊,可以无脑给所有流量 setmark 吗?
|
![]() |
7
lambdaq 73 天前
好家伙。0 注释!
|
8
bosonx 73 天前 via Android
等一个教程
|
9
VwEI 73 天前
等一个教程
|
10
aa51513 72 天前
你也太高看我了,一行注释都没有,怕是一时半会儿看不懂
|
11
skylancer 72 天前
这个方式有人用来过墙的,我也没想过能绕过限速...
|
12
skylancer 72 天前
这个方式有人用来过墙的,我也没想过居然能绕过限速...
|
13
hondaya 72 天前
同求教程,我这非 443 端口上传流量大点就限制上传速率到 0.5 Mbps ,节点,frp 都没法用。自建节点和 frp 域名改成 speedtest 开头的就不限速了。
|
14
thinsychen 72 天前
无需旁路部署,在有权限的路由上可以部署,
实测 内核 5.15 sh telecom 可以破解 TCP 限速 5M ,基本达到满速!感谢楼主提供的思路。 |
15
thinsychen 72 天前
或者 客户端部署也可以。
|
16
huaxie1988 72 天前
怎么使用呢
|
17
leeyijie 71 天前
收藏一下
|
18
bhkkvip 71 天前
用 deepseek 翻译了一遍,又问了下怎么用,大概好像知道了...
|
19
TonyBoney 71 天前 ![]() 在 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 有返回那么就加载完成啦 |
20
TonyBoney 71 天前 ![]() 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)的包,避免影响握手 |
21
TonyBoney 71 天前 ![]() 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" |
![]() |
22
Ipsum 71 天前
下一步就是免流技术的大胜利?从来没想过这种技术会用来解决回家的问题。
|
![]() |
23
zer 71 天前
感觉可以搞成 openwrt kmod 插件
|
26
szdosar 68 天前
就是告诉看门的保安大叔,我是厂长的小舅子,厂长他刚买了台 su7u ,帮他提车的。
保安大叔一看,放行,并且场内不限速,直接飙到时速 350KM |
![]() |
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 |
28
dhdjfnnf 67 天前
大佬,这个方法可以解决 pt 限速的问题吗?
|
![]() |
29
sadan9 66 天前 ![]() 编译了一个 openwrt 版,测试中.....
|
31
siyanmao 66 天前
对 UDP 流量,伪装成 QUIC 会有效果吗…
|
34
c398425861 64 天前
ImmortalWrt 可以弄吗
|
36
kob5213 57 天前 ![]() |
37
lovexiaofan12312 55 天前
openwrt 已经加载模块,就是不知道怎么详细使用,来个大佬
|
38
mac100 41 天前
@lovexiaofan12312 模块 怎么打包的?
|
![]() |
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 自动添加规则以外的其他方案? |
![]() |
41
Lentin 40 天前 via iPhone
@LGA1150 对 平时用家里的节点回家+梯子 ,回家了用上这个模块就不通了,想知道有没有别的好点的方法用 iptables 解决这个问题,不然就只能写 ssid 策略了,光猫似乎没地方关闭 nat loopback
|
![]() |
42
LGA1150 OP @Lentin 如果关了 nat loopback 你就彻底不能通了。
在软路由上抓包看,经过光猫 nat loopback 之后的源 IP 目的 IP 是多少? |
![]() |
44
LGA1150 OP @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 传入连接 和 光猫自己发起的连接。 |
![]() |
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 |
46
lqu3j 15 天前
测试有效,这边电信确实能破解了限速
|
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 看顺眼了,不会标黑了 |
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 } } |
50
wangshou89 3 天前 via Android
小白不会用啊,我主路由是爱快,能用在爱快里面吗
|
53
stonesirsir 1 天前
@lqu3j 伪装网站用的 speedtest.cn 吗?我的访问 vps 丢包,没救了
|
54
lqu3j 1 天前
@stonesirsir 是的
|