我们有以下设置:
- 客户端 (10.10.0.2)
- 平衡器(eth1:10.11.0.3,eth2:10.12.0.1)
- 网络服务器(eth1:10.11.0.4、eth2:10.12.0.2 和 eth1:10.11.0.3 参见下文)
- 伪装路由器将 10.10 路由到 10.11。
每个都运行 ubuntu 18
TCP 连接从客户端通过平衡器到达网络服务器。
当 SYN 数据包到达平衡器 (10.11.0.3) 时,我对 Web 服务器的 IP (10.12.0.2) 进行 DNAT,它完美路由,出现在 Web 服务器上。
在网络服务器上,我对该数据包进行 DNAT 到 10.11.0.3(与平衡器相同的 IP,但附加到网络服务器)。
为了使 Web 服务器将 10.11.0.3 识别为本地且不与平衡器的 10.11.0.3 冲突,我在 Web 服务器上过滤 ARP 请求(谁拥有 10.11.0.3)。最后,我想让回复数据包从 eth1 10.11.0.3 直接发送到客户端。然而,数据包是从 eth2 发出的,因为连接已建立并且所有内容都已缓存,因此数据包会到达 eth2。
如果我运行以下设置:
客户端->平衡器->中介->网络服务器,我可以在中介处进行所有数据包修改,并且它可以完美地工作。如果网络服务器位于执行重整的同一台计算机上,则我无法重整回复数据包。
知道如何克服这个问题吗?