如何在不丢失原始目标的情况下将TCP包重定向到代理?

时间:2018-04-12 13:45:15

标签: linux redirect tcp iptables

我试图将tcp包重定向到我的代理,但我在此过程中丢失了原始的ip目的地。因为我的代理不能开始连接 原始目的地。我的设置如下:

我有一个正常的tls linux服务器,我称之为C.
我的Linux电脑上有一个名为B.
的中间人代理 A是一个android amulator,其中启动了与C的tls连接。不是 使用http或https。它只是通过tls发送随机数据。

我希望A连接到B和B以连接到C.
在android模拟器里面,我放入了一个iptables规则,将tcp包重定向到我的代理服务器,它的工作原理。唯一的问题是我的 代理不知道原始目的地的目的地IP。我需要 以某种方式为包添加标题或我将如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果将数据包重定向到另一台计算机,则原始目标IP地址将永久丢失,因为在这种情况下,需要更换数据包的目标IP。无法将有关原始IP地址的某些信息附加到数据包。

如果您只是重定向到同一台计算机上的某个代理,情况会有所不同。在这种情况下,代理可以通过调用getsockopt(fd, SOL_IP, SO_ORIGINAL_DST)来检索原始目标(在Linux上,其他系统可能不同),因为操作系统内核仍然知道它。

因此,您需要确保在与代理所在的系统相同的系统上执行重定向。为此,代理系统必须位于路由路径中才能接收数据包,例如将其设置为默认网关。