FakeHTTP - 伪装 TCP 连接为 HTTP,解除白名单限速

143 天前
 mikewang

FakeHTTP

https://github.com/MikeWang000000/FakeHTTP


原理:

在 TCP 三次握手之后,立即发送一个 HTTP GET 请求,Host 为指定域名。使用 NFQUEUE 实现。


相关帖子:


命令(需要 sudo ):

fakehttp -h www.example.com -i eth0

特点:

因为 nf_deaf 是内核模块,需要手动编译,有一定使用门槛。FakeHTTP 选择使用 iptables + NFQUEUE 方案,使用 musl 静态编译,通用全部主流 Linux 发行版。

一些说明:


特别说明:

首次使用 FakeHTTP ,请不要远程操作。若使用不当,可能造成远程机器断网。


备注:

目前因为 NAT 规则还没有适配,仅支持本机解除限速。后续会支持下游机器。

25637 次点击
所在节点    宽带症候群
175 条回复
goodryb
141 天前
@imokkkk 直接 block ,一切都恢复平静了
Lentin
141 天前
我的光猫是路由模式的,fakehttp 跑在旁路,WiFi 设备在访问光猫公网端口对应的旁路端口会被 nat 为公网源地址访问内网地址,fakehttp 处理之后会导致访问不了,大佬看看有没有更优雅的方法解决一下,我之前用的这个方法:
https://www.v2ex.com/t/1120910?p=1#r_16192422
Zeaxion
141 天前
似乎对 TLS 无效啊,坐标 028 ,v2 wss 协议,省内点对点,fake 改头,也起不来速度
协议换成 v2 ws ,不加 tls ,fake 改头,可以
hackroad
141 天前
routeros 不适用,得在前面再挂一层。
mikewang
141 天前
#60 @yyysuo
FakeHTTP 会新增一个优先级最高的规则,但是只匹配第一个 SYN-ACK / ACK 。因此我觉得不太会影响别的组件。
kmod 用 opkg 能装的上,就是能用的,不然安装时就会报错。

#62 @yyysuo
你这种情况相当尴尬,ttl=3 意味着半径为 3 以内的公网 IP 主机都没法正常通信( FakeHTTP 做了局域网 IP 排除,但是你很不幸地被 NAT 成公网了)
你把匹配的数据包 -j MARK --set-mark 512 吧(默认值,或者是你设定的-m 值),匹配这个值的数据包不会被 FakeHTTP 处理。暂时没想到别的办法。
songofsaya
141 天前
我只觉得太强了,Star 了~
Lentin
141 天前
@mikewang #65

思来想去,还是用一个比较 2B 的方法 每五分钟执行一次 iptables 规则
#!/bin/bash
PUBIP=$(curl -s curl https://4.ipw.cn) || exit 1
iptables -t mangle -S POSTROUTING | grep -q "$PUBIP" && exit 0
iptables -t mangle -I POSTROUTING -d $PUBIP -j MARK --set-mark 512
bfdh
141 天前
关于 TTL 有个想法,增加一个动态计算的功能,因为 TTL 的典型值一般为 32/64/128/255 (不确定实际应用中有多少服务器会修改这个值),那么根据收到报文的 TTL 值可以推测出中间经过的跳数,进而动态地设置每条连接的 TTL 值。

另外,iptables 操作建议加行-w 参数,否则可能会因为有其他 iptables 实例在运行导致命令失败,尤其是在路由器上。
mikewang
141 天前
@bfdh #68

1 )往返的路径不一定是同一条,估算容易出问题。虽然大多数情况是差不多的,但是没有 100%把握就需要容我考虑一下。
2 )-w 参数在旧版 iptables 不支持,会直接报错,因此考虑兼容性我没有写上。
kuanat
141 天前
这个思路有意思,手动点赞
chord
141 天前
理论上在 TCP 应用层的层面可以实现吗?
playboy0
141 天前
这个作者的很多项目都很秀,我是从 Natter 接触到的,不知道作者平时咋学习的,实在佩服
chord
141 天前
有没有办法通过本地的 socks5 代理转发,不通过内核转发。
mikewang
141 天前
@bfdh #68

查了一下,`-w` 是在 v1.4.20 支持的,已经是十多年前了。已更新采用 `-w` 选项,感谢建议。
mikewang
141 天前
#71 @chord
不可以的,详见 16 楼。这里没有涉及转发,并且插入的 TCP 报文是特殊构造的,可以被中途丢弃且不影响原有 TCP 连接。
你可以简单理解为 FakeHTTP 工作在旁路(但实际上是队列处理的)。
jja
140 天前
太强了。请问是否可以在 docker+macvlan 网络+NET_ADMIN 权限的环境中运行呢?我目前的旁路网关是这样跑的。
mikewang
140 天前
@jja #76
我不确定容器下的 iptables 能否正常工作,试了才知道。
需要的权限是:CAP_NET_RAW + CAP_NET_ADMIN
--net=host 肯定是没问题的。
jja
140 天前
楼上这么多跑在 OpenWrt 上的,但是这不是还不支持 NAT 吗 🤔
git00ll
140 天前
@1423 头像咋这么亮
mikewang
140 天前
@jja #78 已经支持。

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

https://www.v2ex.com/t/1135702

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

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

© 2021 V2EX