如何将流量从某个 IP / 主机路由到同一端口上的另一个主机 / IP

如何将流量从某个 IP / 主机路由到同一端口上的另一个主机 / IP

我遇到过这样的情况:我的客户关闭了他的旧 Linux 主机(examplehost01.example.com),该主机运行着一个在端口上监听的应用程序7001,他在旧主机上创建了新服务器,他们想将所有流量移动到新服务器(examplehost02.example.com)。

examplehost01.example.com: 7001 (old Server)
examplehost02.example.com: (New Server)

examplehost01.example.com我们如何将端口上的服务器上的所有流量重定向到端口上的7001新服务器?examplehost02.example.com7001

这些服务器位于同一个网络中。

任何帮助将非常感激。

答案1

当您发现人们真正使用的服务器名称时,就会进行服务器迁移。

在 DNS 中为此创建一个服务名称,例如,examplething.example.com 它不是特定主机,而是该应用程序的前端。

创建 CNAME 记录或以其他方式将其指向examplehost02。如果您的设计包括此功能,这将是引入负载均衡器或高可用性集群的机会。

重新配置所有客户端以指向永久服务名称examplething.example.com。解释服务器被替换是为了维护系统的性能和可用性。并且作为此应用程序重点方法的一部分,您现在希望使名称比任何一台服务器都更持久。

保留旧名称和 IP 以实现兼容性。例如将 01 IP 分配给 02 服务器。设置终止日期,确定何时将其停用并examplehost01删除旧名称。记录与旧 IP 的连接(例如使用防火墙日志记录规则),以查找剩余的未迁移客户端。

答案2

由于两台主机位于同一网络中,因此可以将旧主机的 IP 地址分配给新主机作为辅助 IP。然后,可以配置内部重定向以将发送到oldip:7001端口 80 或 443 的流量重定向。

答案3

即使服务器距离很远,下面描述的所有方法都适用。但是,如果它们距离很近,例如在同一个子网中,则有更好的方法可以做到这一点。

简单的 DNAT 无法工作,因为它需要将来自另一台服务器 ( examplehost02) 的所有流量路由到这台服务器 (examplehost01 ) 的所有流量,或者设置复杂的路由设置。但是,您可以这样做两个都DNAT 和 SNAT 同时进行。这有一个警告:以这种方式重定向的流量将在其他服务器上显示为来自此服务器;如果这是不可接受的,您必须使用其他方法。但是,这是唯一可以帮助您的服务的通用方法,即 UDP。

为此,设置以下规则:

iptables -t nat -I PREROUTING -p tcp --dport 7001 -j DNAT --to-destination examplehost02.example.com
iptables -t nat -I POSTROUTING -p tcp --dport 7001 -d examplehost02.example.com -j MASQUERADE

如果相关服务是基于 HTTP 的,您可以设置反向代理。通过适当的日志设置,通过代理发出的请求仍将记录正确的远程 IP 地址,因此如果先前宣布的警告不允许使用上述方法,则该方法适用。


第三种可能性是使用 SSH TCP 端口转发而不是地址转换。这是最简单的,但性能较差,也存在同样的问题,并且仅适用于 TCP。为此,只需从旧服务器通过 SSH 连接到新服务器:

examlehost01# ssh examplehost02 -g -L 7001:localhost:7001

或反之亦然,使用反向端口转发(要求 上的 SSH 服务器examplehost01允许绑定到地址0.0.0.0,该地址可能不是默认值):

examlehost02# ssh examplehost01 -g -R 7001:localhost:7001

相关内容