zfl9 / ipt2socks

将 iptables/nftables 传入的透明代理流量转为 socks5 流量的实用工具
GNU Affero General Public License v3.0
411 stars 94 forks source link

Is "really" transparent proxy? #46

Closed 0990 closed 1 year ago

0990 commented 1 year ago

redsocks说明自己并不是真实的透明代理:redsocks acts at TCP level, so three-way handshake is completed and redsocks accepts connection before connection through proxy (and to proxy) is established。我想问下这个项目也是这样的吗?

0990 commented 1 year ago

遇到一个情况,当dns返回多个ip(A和B),正常情况下,当A不可访问(connection refused),这时会再尝试B。当使用透明代理后ipt2socks,猜测工作在TCP level层,已经三次握手了,只会显示A(unable to establish ssl connection),不再尝试B了。具体现象就是透明代理机器上wget下载某张图片l时有时能打开(访问了B),有时打不开(访问了A),但在socks server服务器上,使用wget 命令下载这张图片时,当访问A不成功时显示connection refused会再尝试B,一定会成功

zfl9 commented 1 year ago

这是没法避免的,因为原始的 connection refused 是在 tcp三次握手 期间出现的错误,当接入透明代理时(redsocks/ipt2socks等等),实际上在内核层面,已经将 socket 连接的对端改为了 redsocks/ipt2socks,而 redsocks/ipt2socks 收到任何 TCP 握手,都是必定成功的(除非 nofile 达到上限)。

0990 commented 1 year ago

谢谢,了解了,我再找找,有没有自己实现tcp协议的,握手时,等待socks server返回对端ok时再继续