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