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

181 天前
 LGA1150

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

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

13620 次点击
所在节点    宽带症候群
55 条回复
Lentin
148 天前
@LGA1150 对 平时用家里的节点回家+梯子 ,回家了用上这个模块就不通了,想知道有没有别的好点的方法用 iptables 解决这个问题,不然就只能写 ssid 策略了,光猫似乎没地方关闭 nat loopback
LGA1150
148 天前
@Lentin 如果关了 nat loopback 你就彻底不能通了。
在软路由上抓包看,经过光猫 nat loopback 之后的源 IP 目的 IP 是多少?
Lentin
147 天前
@LGA1150 #42
软路由看到的源 ip 是光猫的公网 IP123.123.123.123 ,目的 IP 是软路由的内网地址 192.168.1.2
LGA1150
147 天前
@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
147 天前
@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
122 天前
测试有效,这边电信确实能破解了限速
lqu3j
122 天前
@lqu3j 成都电信
TonyBoney
115 天前
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
112 天前
之前写的 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
110 天前
小白不会用啊,我主路由是爱快,能用在爱快里面吗
kob5213
109 天前
@TonyBoney 目的地址是本地地址还是远端地址
TonyBoney
109 天前
@kob5213 远端服务器地址
stonesirsir
109 天前
@lqu3j 伪装网站用的 speedtest.cn 吗?我的访问 vps 丢包,没救了
lqu3j
108 天前
@stonesirsir 是的
Lentin
104 天前
抓包看了一下进方向的流量 局域网访问本地公网的 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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1120910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX