我们有很多情况下,客户端应用程序需要从活动的生产networking中的一台主机迁移到另一台主机。 服务器继续运行其他应用程序。
问题在于远程应用程序通常运行在某种embedded式系统上,出于避免风险的原因,不允许对这些远程应用程序的configuration进行更改。
我可以看到,具有(可能是相当数量)NATconfiguration的路由器可以透明地实现这种改变,以强制stream量到达networking上的另一个主机而不接触设备。 我们也许能够说服一些networking层面的变化,但即使这些也不是很受欢迎。
首先,如果不能避免冻结,这是否是正确的方法;其次,是否有人有任何想法(甚至更好的一个现成的iptables规则集)来实现这样的事情?
编辑
我正在故意不具体,但这可能有助于澄清事情。 客户端应用程序通常是具有专有TCPstream协议的embedded式设备。 这个约束是特别的,我们不能改变设备的configuration,并且强烈的不愿意改变networking或服务器的configuration。 这既受到不确定性的风险以及pipe理设备的工具的可用性的驱动。 有许多不同types的设备,具有特定的configuration文件,这不是一个单一的通用解决scheme。
这确实需要在networking边缘插入一些硬件来实现redirect。
我意识到这不能被认为是好的做法,而是我们inheritance和无法控制的东西。 随着我们前进,我们会将协议更改为设备可以适当configuration的协议,或使用充当服务器的设备来避免此问题。
下面显示了一个典型的所需configuration图。

鉴于你的限制,我会build议一个防火墙,redirect基于源IP的TCPstream量。 它可以很容易地用ipf或者iptables,或者我能想到的任何专用的防火墙。
下面是一些基本的iptablesbuild议,以帮助您入门:
首先,告诉服务器做转发(如果还没有完成)
sysctl net.ipv4.ip_forward=1
然后,为您要redirect的设备的特定源IP设置规则:
iptables -t nat -A PREROUTING -s 1.1.1.1 -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
(这里,1.1.1.1是源,2.2.2.2是新目标,目标端口是1111)
你还需要告诉iptables伪装IP
iptables -t nat -A POSTROUTING -j MASQUERADE
这取决于您的情况以及客户端访问服务器应用程序的步骤数量。
通常,您复制一个客户端进行testing,实际的应用程序服务器,并为您的copy'd客户端重新devise一个新的应用程序服务器。
步骤数量用于确定在哪个步骤中向新的应用程序服务器发送请求。 有点像这样(这应该做的全部虚拟copy'd和从真实的东西分开)
Client -> request -> sep1 -> stop2 -> server this -> server that -> done.
所以,步骤“服务器”是您应该查看并将其redirect到新的应用程序服务器的第一步。 如果这在假环境中工作,你去“服务器这个”和“停止2”等等,直到你完成了整个重新devise的新的应用程序服务器。 这是比实际的iptables规则更多的细分模型,但我希望你能明白。
随后,我们将Mikrotik路由器configuration为支持L3地址转换的桥接器。
路由器位于设备和networking之间,并将包含主机IP地址的每个以太网帧dynamic地转换为主机的IP地址。
我曾经提出过使用纯粹基于路由器的解决scheme,在路由器的两个端口之间引入额外的网段,但感觉L2解决scheme更可能是稳定的。
预期的stream量很低,入门级RB750提供了足够的带宽。
这就是DNS发明的原因。 不要在embedded式设备中对IP地址进行硬编码,因为它们会随着时间而改变(如您现在所见)。 然后将服务移动到另一个主机,只需更新用于该服务的DNS名称即可。