V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  mikewang  ›  全部回复第 1 页 / 共 33 页
回复总数  650
1  2  3  4  5  6  7  8  9  10 ... 33  
@Lentin #67
更新一下,因为默认值 512 与 mwan3 的默认掩码冲突了(当时没发现),v0.9.5 之后,默认值改为 0x8000 ,65 楼回答作废,更新为 -j MARK --set-mark 0x8000 ,谢谢~

@colinzhao #88
理论上不应和任何其他工具发生冲突。如果出现报错或者其他问题,欢迎汇报。
@chord #84 FakeHTTP 基于 NFQUEUE 编写,是和 Linux 内核高度绑定的。
#81 @a9k1n9 connbytes 是我最近才加上的,其实不重要,后面我打算直接忽略报错。

#82 @shiyunjin 会加上的。(其实如果谁会用 iptables-translate 工具翻译一下,帮我提个 PR 就好了)最近先修 bug ,修完加上 nft 和 ipv6
@jja #78 已经支持。
@jja #76
我不确定容器下的 iptables 能否正常工作,试了才知道。
需要的权限是:CAP_NET_RAW + CAP_NET_ADMIN
--net=host 肯定是没问题的。
#71 @chord
不可以的,详见 16 楼。这里没有涉及转发,并且插入的 TCP 报文是特殊构造的,可以被中途丢弃且不影响原有 TCP 连接。
你可以简单理解为 FakeHTTP 工作在旁路(但实际上是队列处理的)。
@bfdh #68

查了一下,`-w` 是在 v1.4.20 支持的,已经是十多年前了。已更新采用 `-w` 选项,感谢建议。
@bfdh #68

1 )往返的路径不一定是同一条,估算容易出问题。虽然大多数情况是差不多的,但是没有 100%把握就需要容我考虑一下。
2 )-w 参数在旧版 iptables 不支持,会直接报错,因此考虑兼容性我没有写上。
#60 @yyysuo
FakeHTTP 会新增一个优先级最高的规则,但是只匹配第一个 SYN-ACK / ACK 。因此我觉得不太会影响别的组件。
kmod 用 opkg 能装的上,就是能用的,不然安装时就会报错。

#62 @yyysuo
你这种情况相当尴尬,ttl=3 意味着半径为 3 以内的公网 IP 主机都没法正常通信( FakeHTTP 做了局域网 IP 排除,但是你很不幸地被 NAT 成公网了)
你把匹配的数据包 -j MARK --set-mark 512 吧(默认值,或者是你设定的-m 值),匹配这个值的数据包不会被 FakeHTTP 处理。暂时没想到别的办法。
@fengyaochen #57
有可能只是晚高峰正常拥堵,线路不好。FakeHTTP 只能解决对基于 HTTP 域名(不)限速的场景。

@freedomNet #58
因为直接 kill ,将不给 FakeHTTP 机会去清除它加的 iptables 规则,导致队列阻塞(没有 fakehttp 进程去消化这些 SYN-ACK/ACK 数据包了)。
这个问题其实挺重要的,今天晚上的版本会解决这个问题。
#53 @microka
目前可以通过 nohup 命令在后台运行(可以网上查一下它的用法)。

以后的版本可以通过 `-d` 命令后台运行。
FakeHTTP 目前还是 beta 公测状态,在 v1.0 之前还有不少功能需要完善( IPv6/输出日志到文件/后台运行/支持多网络接口/...),以及 bug 修复。

#54 @microka
感觉是短时间建立了大量的 TCP 连接,然后你的路由器来不及处理了🤦‍♂️ 可以把日志发到 GitHub issue 上面(可码掉 IP 地址),然后我看一下怎么改进。
#50 @opengg
不需要。HTTP 特征由于 TTL 值很低,被半路丢弃,目标服务器收不到,所以不需要任何处理。
#34 @NewYear
没错,TTL 是关键。不支持 NAT 是因为我写的 iptables 规则有点问题,不应在 PREROUTING 链处理。最新版本已修复。

#35 @qwvy2g
TTL 值也可以自行修改 `-t` 调大,如果你觉得不够用。当然设置太大了,被服务器收到就有问题了。服务器多半会回给你一个 RST 。

#38 @ioooou
看起来是你正使用 iptables-nft ,但是是不是有 Docker 或者其他程序在使用 iptables-legacy 导致冲突。
试试 sudo update-alternatives --config iptables ,切换为 iptables-legacy 。

#39 @microka
IPv6 还没有适配,将来会考虑。

#44 @zjsxwc
可以大致这样理解。不过 HTTP 特征的数据包和后续真正的数据包是共用同一个 TCP Sequence 的。
HTTP 特征由于 TTL 值很低,被半路丢弃,目标服务器收不到。
@Rokaki #31 对方收不到的。详见上文 [一些说明] 第三条解释。
@dizhang #20 根据你描述这种情况来看,FakeHTTP 就能解决这个问题。把 -h 参数指定为测速网站域名就好。
爱快是 Linux 内核,但估计也是精简掉 nfqueue 功能了。可以试试,不行还是得装内核扩展。
像 Debian / Ubuntu / Fedora 等 Linux 发行版肯定是没问题的,开箱即用。

@igamebox #21 大概率是没退干净,用 ps 命令或者 pgrep fakehttp 看下进程号
@Terminl #13
可能是你误解了其中的原理。FakeHTTP 只插入,不转发。

SYN -- SYN-ACK -- ACK -*- 数据 1 -- 数据 2 ...

FakeHTTP 在 [ ACK -*- 数据 1 ] 之间,直接对外发送含有 HTTP 特征的 TCP 报文,不涉及任何转发。

nfqueue 的作用是:1. 截取通信中的数据包 2. 拦截 TCP 栈处理流程,将 HTTP 特征在 [数据 1] 前发送出去。

转发全部流量是消耗资源且会带来延迟的,FakeHTTP 不会采用这种方式。
@march1993 #7
?目标端口不认识 HTTP 怎么通信
#2 @qaz741wsd859 入站出站都生效。主要针对出站,入站还在测试中。

#3 @NewYear 不是,这个不是协议。和是否有公网/开放端口没有关系。可以通俗的理解为:在正常的 TCP 传输中加一点 HTTP 特征,骗过限速。

FakeHTTP 只处理已有的 TCP 报文,自身不提供服务。
不关机,似乎说的大多数是 MacBook 。并且 MacBook 插电源和不插电源差距也挺大的。
插电源的话,合盖还能 ping 通,还能 ssh 进去。跑什么命令都没问题。
不插电源,过一段时间就掉线了,ssh 也不行。应该是进入了更深层次的睡眠。

Mac Mini 应该是一直插电的,可能就没有那种体验了(?)
15 天前
回复了 mikewang 创建的主题 MySQL 坑爹的字符集问题:踩到了 MySQL 的 bug
@xiangyuecn #20
你确实发现了一个令很多人困惑的地方:SQL 中的“相等”,其实是概念上的等价,不是完全的相同。

排序规则( collation ),规定了 order by 的顺序,也规定了哪些字符串是“相等”的,等号运算会返回真,group by 会被分到一组。
如果对排序规则了解不深,我推荐阅读一些相关的资料,这样奇奇怪怪的问题就能迎刃而解了。

以 MySQL 为例吧,设置 set collation_connection=utf8mb4_general_ci;
select 'abc' = 'ABC'; -- 你会发现它们是相等的,结果为 1 。
select hex('abc') = hex('ABC'); -- 你会发现结果为 0 ,不等。

select 'abc' = 'abc '; -- 相等
select length('abc') = length('abc '); -- 不等

其实也没什么问题。因为“排序规则”规定了它们等价。但是它们又不是同一个东西,所以套一层函数就不等了。
当然你也可以选一个 NO PAD 的规则,让它们自身不等。

set collation_connection=utf8mb4_0900_ai_ci;
select 'abc' = 'abc '; -- 不等
select length('abc') = length('abc '); -- 不等

这些都是可以配置的,并且不同数据库上的默认配置可能有所不同。

希望对你有所帮助。
1  2  3  4  5  6  7  8  9  10 ... 33  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2561 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 04:46 · PVG 12:46 · LAX 21:46 · JFK 00:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.