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

144 天前
 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 规则还没有适配,仅支持本机解除限速。后续会支持下游机器。

25677 次点击
所在节点    宽带症候群
175 条回复
vanillaxxx
131 天前
@dizhang 先 opkg update 一下软件源再试试呗?
dizhang
131 天前
@zer
@vanillaxxx
多谢两位提醒,换了个 openwrt 版本可以按照 kmod nft queue 了,但是执行 ./fakehttp -h www.speedtest.net -i eth0
还是那个问题
ERROR: nfq_create_queue(): Invalid argument (Missing kernel module?)
我试着 opkg install iptables iptables-mod-conntrack-extra iptables-mod-nfqueue 也可以安装,但是执行 fakehttp 还是报错,一样的 missing kernel module
一头雾水
dizhang
131 天前
@zer 下了一个 immortalwrt-24.10.1-x86-64-generic-squashfs-combined-efi 打算再试试看,实在是太折腾了
dizhang
131 天前
@zer 下了 immortalwrt 24.10 ,终于全部搞定了,用的是一个不用的软路由+u 盘,只接了电信的线路
./fakehttp -h www.speedtest.net -i eth3 ( eth3 是 wan 口的地址)发现没效果,需要用 ./fakehttp -h www.speedtest.net -i ppoe-wan 马上上传提速了
但是问题来了,我如果接上联通的两条线,都是用的 ppoe 拨号的,相当于三条线路,那么是不是还是用 ppoe-wan 的参数?因为只需要给电信线路做 fakehttp ,联通的没有限速,不需要这个命令
另外开着 putty ,疯狂的闪过各种 ip 地址,不停滚动,能不能不让屏幕滚动?
另外 immortalwrt 里面啥插件都没有,我想看看每条线路实时的网速,应该装什么插件呢,多谢了
mikewang
130 天前
@dizhang #124 pppoe-wan 只会是一条线路,如果接其他线路,可能是 pppoe-wan2 或者其他名字。
可以在命令的末尾加上 -s ,表示安静模式( slient ),只会在报错时显示,正常运作不再打日志。
另外 -d 表示后台运行。
tatsa
130 天前
WARNING: Falling back to iptables command, as nft command is not working.
我用 ER-X 试了一下出现这个提示,并且所有网页都打不开了,怎么破?
dizhang
130 天前
@mikewang 感谢感谢,下的是 immortalwrt ,啥插件都没有,就试着在软件包里面搜 passwall ,装了一个,结果装了一会儿就报错啥 jason 还是啥的,总感觉这些软件在不同 wrt 版本里面混乱得要命,头疼。
fengyaochen
130 天前
@zer openwrt 旁路由可以用吗
zer
130 天前
@fengyaochen 我没试过,我猜想是只有内网设备的网关指向旁路由,才能生效
fengyaochen
130 天前
@zer http://speed5.ntu.edu.tw/speed5/ 这个网址你试试有用吗,我先没有用旁路由,先做用主路由也完全不起作用,用的是 www.speedtest.net 域名
mikewang
130 天前
@tatsa #126
出现这个 warning 是正常的,因为这个固件应该用的是 iptables 而不是最新的 nft 。
所有网页都打不开了,这个不正常。可以发一下系统版本:
cat /proc/version /etc/openwrt_release

@dizhang #127
OpenWRT / ImmortalWrt 这一点是比较头疼的问题,所以不少用户会自己编译固件,在精简的同时保留自己需要的功能。FakeHTTP 依赖于 Linux 内核的 NFQUEUE 功能,如果没有就运行不了。
dizhang
130 天前
@mikewang 谢谢,能否推荐一个改版的 openwrt ,集成了较多插件,也可以用那个 nfqueue 的?
现在我下的原版 immortalwrt 看起来太简陋了,也完全不懂什么编译不编译的
之前用了 bleachwrt 和 esir 的一个 openwrt 貌似都不能装这个 queue
mikewang
130 天前
@dizhang #132 不太好推荐,因为大多数定制的固件不含这个功能,只能请求对应固件的作者看是否愿意加上了。
如果他们制作固件的时候没有勾选 nfqueue ,后面那就是安装不上的。
fengyaochen
130 天前
@mikewang 我在 istoreOS 24.10 上运行,运行没有报错,国内测速还是限速 5M ,国外走 passwall 代理的 fast.com 就不限速了,原本没有用 fakehttp 的时候,走 passwall 的 fast.com 也限速的,搞不懂为什么国内无效了
dizhang
130 天前
@mikewang 所以我用的 esir playground 的高大全固件,已经安装了 kmod nf queue ,运行依然报错说 invalid arguments missing kernel module?
制作固件不知道复杂不?不勾选这个 nfqueue 也是奇怪啊
另外建议你在发布页特别提一下这个问题,毕竟很多人用的改版的 openwrt ,运行不了 fakehttp ,写清楚的话可以帮助很多人少走弯路哈。
mikewang
130 天前
@fengyaochen #134
国内用 speedtest 测速正常否?这种情况确实少见,也有可能和环境有关,

@dizhang #135
安装成功后,输下下面的命令看下有没有 nft_queue 和 nfnetlink_queue 吧。如果有就表示生效了。
lsmod | grep -i queue

总感觉有点诡异,照理来说安装好就应该可以的。如果没有,手动执行以下命令:
modprobe nfnetlink_queue
modprobe nft_queue
dizhang
130 天前
@mikewang 我在 esir 的 openwrt 里面输入
opkg install nftables kmod-nft-queue
显示
Package nftables-json (1.1.1-r1) installed in root is up to date.
Package kmod-nft-queue (6.6.73-r1) installed in root is up to date.
然后输入 lsmod | grep -i queue
没有结果
输入
modprobe nfnetlink_queue
modprobe nft_queue
都是 1 module could not be probed

就是说安装了,但是不生效?
tatsa
130 天前
@mikewang 不是 OpenWRT ,系统是 EdgeOS v2.0.9 ,装的 mips32el 版。开了 FakeHTTP 后打不开的网页大部分显示 ERR_SSL_PROTOCOL_ERROR 。
我这边本来 sftp 和 RDP 被限速,http 不限速,打开 FakeHTTP 后 sftp 连不上了,RDP 拷贝的限速没有提高
fengyaochen
130 天前
@mikewang 比如这个测速网址 http://speed5.ntu.edu.tw/speed5/,我开启 fakehttp 关闭 passwall 直连上传 5M ,开启 passwall 开启 fakehttp 上传 100M ,关闭 fakehttp 开启 passwall 代理,还是 5M ,也就是 fakehttp 只给我的 passwall 解除了限速,passwall 是装在 openwrt 上的,是不是 fakehttp 只能解除 openwrt 自身或者转发的限速,并不能给局域网 NAT 下的设备解除限速?
mikewang
130 天前
@dizhang #137
是的,模块不兼容。可能是软件包维护人配置错误,或者其他原因。具体报错信息可以在 dmesg 命令里面看到。


@tatsa #138
是最新的 0.9.14 吗?之前修复过一个问题,就是 IPv6 中局域网内的公网 IPv6 被当作外部连接处理了。这种情况会导致无法连接。

根据你的描述,看起来很像是将局域网的主机当作外部处理了,这会导致他们无法处理多余的 HTTP 头部。

也可以查看日志,如果出现 ERR_SSL_PROTOCOL_ERROR 的同时,日志看到链 内部 IP <==HTTP(*)== 内部 IP 这种情况,那就是判定错误,对内网 IP 发了伪装 HTTP 。正常情况是日志中看不到,或者只有 内部 IP <==LOCAL(?)== 内部 IP 如此情况。

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

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

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

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

© 2021 V2EX