我不明白我们为什么要使用 redsocks。难道我不能只使用 iptables 将所有流量重定向到我的 socks 代理(我使用 ssh 隧道创建的)来做同样的事情吗?使用 redsocks 有什么意义?无论如何,我们都将 iptables 与 redsocks 一起使用。
答案1
因为“所有流量”都不使用 SOCKS 协议。SOCKS 代理希望其客户端使用 SOCKS。这就是 redsocks 的作用所在:它终止TCP 连接并在“另一端”使用 SOCKS。
SOCKS 也是基于 TCP 的协议。当 SOCKS 客户端连接时,会发生以下情况:
- TCP 握手(SYN→,SYN-ACK←,ACK→)
- 客户端发送 SOCKS 连接请求(如维基百科所述)
- 服务器发送 SOCKS 响应
- (如果到目前为止成功)与实际目标进行数据交换(例如发送 HTTP 请求)
如果您只是将任何内容重定向到 SOCKS 代理,则此交换将在步骤 2 中失败:服务器将收到它认为是垃圾数据(例如,应该仅在步骤 4 中出现的 HTTP 请求)并终止连接。