为什么我们要使用redsocks+iptables,而不是只使用iptables?

为什么我们要使用redsocks+iptables,而不是只使用iptables?

我不明白我们为什么要使用 redsocks。难道我不能只使用 iptables 将所有流量重定向到我的 socks 代理(我使用 ssh 隧道创建的)来做同样的事情吗?使用 redsocks 有什么意义?无论如何,我们都将 iptables 与 redsocks 一起使用。

答案1

因为“所有流量”都不使用 SOCKS 协议。SOCKS 代理希望其客户端使用 SOCKS。这就是 redsocks 的作用所在:它终止TCP 连接并在“另一端”使用 SOCKS。

SOCKS 也是基于 TCP 的协议。当 SOCKS 客户端连接时,会发生以下情况:

  1. TCP 握手(SYN→,SYN-ACK←,ACK→)
  2. 客户端发送 SOCKS 连接请求(如维基百科所述
  3. 服务器发送 SOCKS 响应
  4. (如果到目前为止成功)与实际目标进行数据交换(例如发送 HTTP 请求)

如果您只是将任何内容重定向到 SOCKS 代理,则此交换将在步骤 2 中失败:服务器将收到它认为是垃圾数据(例如,应该仅在步骤 4 中出现的 HTTP 请求)并终止连接。

相关内容