我有两台机器,A 和 B,运行 RHEL Linux。每台机器都有一个连接到我称之为“LAN”网络的 1Gig 网卡。每台机器都有一个 10Gig 网卡,连接到我称之为“BIGDATA”的网络。除了通过这些机器外,这些网络没有相互连接。
我在 BIGDATA 网络上的 A 的 10Gig 接口上有光纤分接头。水龙头通向捕获服务器,我想在其中记录所有进出的数据。最初都是 TCP,但将来也许一些 UDP 会很好。
出于开发和测试目的,我想在 A 上运行 TCP 对话的双方,然后通过这些水龙头捕获对话。将使用此设置的开发人员不会在 B 上拥有帐户(至少这是我的目标)。
在我看来,超级用户应该可以在 B 上设置某种转发/中继,这将允许 A 上的客户端通过分接光纤连接到 A 上的服务器。即流量从 LAN 网络上的 A 到 B,然后在 BIGDATA 网络上返回到 A。返回流量采用相同的路径返回。
到目前为止,我的尝试是使用 ssh 隧道。喜欢A:~ $ssh B -L 8051:<A's-BIGDATA-IP>:3434 -N
。这实际上非常适合捕获从客户端到服务器的流量。但不幸的是,服务器的响应是找到只留在本地的捷径,并且永远不会出现在光纤上。查看wireshark,数据包知道它们的目标IP,并且不觉得有义务收回隧道。
我找到了这个答案,但我相信所有的解决方案都要求两个接口都在同一个网络上。也许我的解决方案的种子在那里,但我找不到它们。
我想我可以用 C 从头开始编写这个程序,在 B 上运行一个程序,在 LAN 接口上建立 TCP 连接,在 BIGDATA 接口上启动另一个 TCP 连接,返回到 A,并转发回复。它只会复制 TCP 有效负载,这足以满足我的目的。
是否有一个很酷的工具可以进行这种转发/中继?
有没有办法让 ssh 隧道按照我想要的返回流量的方式工作?