如何让多台计算机透明地共享同一个IP?

如何让多台计算机透明地共享同一个IP?

这是一个路由问题。我想按照以下配置设置一个 IP 块(1.1.1.0/24):

                                           /(eth1)-- (Main (1.1.1.3-1.1.1.253)
Router (1.1.1.1) --(eth0)(Load balancer or Router) (1.1.1.2)
                                           \(eth2)-- (Alt (1.1.1.3-1.1.1.253)

使用负载均衡器或路由器 (1.1.1.2) 将所有流量带到 1.1.1.0/24,并将端口 1-50000 的数据包通过 eth1 转发到主服务器。但对于来自 50001-65535 的请求,将该数据包转发到 eth2。

其中最棘手的部分是主网络和备用网络都需要具有相同的 IP 地址。

这个想法是,主网络中 IP 为 (1.1.1.12) 的服务器和 Alt 网络中 IP 为 (1.1.1.12) 的服务器都可以运行,并且可以通过网络向同一目标(如 Web 服务器)发出请求(例如使用端口 3115 和端口 53115)。该 Web 服务器将看到来自同一 IP 地址的两个请求(只是来自两个不同的端口),并将对这两个请求做出响应,并且这些数据包将返回,分别发送到两个服务器(3115 将发送到主网络中的服务器,53115 响应将发送到 Alt 网络中的服务器)。

两个服务器都需要运行,但不知道对方的存在。

实际上,在最佳情况下,我甚至不希望基于端口进行拆分。理想情况下,您只需要 Alt 和 Main。如果收到的请求不是响应,它将被路由到 eth1(主)(因此大多数流量)。但是服务器 Alt 可以发出请求,并且该请求将显示从 1.1.1.12 发出,因为这是 ALT 中机器的 IP。它将被路由回 eth2,即对数据包的响应,即使 eth1 上也有 1.1.1.12。我不认为这种情况是可能的,这就是为什么我认为基于端口进行分离是最好的办法。

答案1

您描述的两种场景都可以使用 Linux 上的 IPTables 实现,但配置会非常复杂。

真正的问题是,为什么需要设备后面的网络与设备前面的网络处于相同的 IP 范围内?最好在设备后面运行不同的 IP 范围,并在设备中进行 IP 地址转换。这样,您可以将所有设备放在设备后面的单个网络上,并根据目标端口将流量引导到不同的机器,或者根据连接是否是对现有连接的回复。

相关内容