我们遇到过许多这样的情况:在活跃的生产网络中,客户端应用程序需要从一台主机迁移到另一台主机。服务器继续运行其他应用程序。
问题在于,远程应用程序通常在某种嵌入式系统上运行,出于避免风险的原因,不允许更改这些远程应用程序的配置。
我可以看到,具有(可能相当多)NAT配置的路由器可以透明地实现此更改,以强制将流量发送到网络上的另一台主机,而无需接触设备。我们可能能够说服一些网络级别的更改,但即使这些更改也并不受欢迎。
首先,如果无法避免冻结,这是正确的方法吗?其次,是否有人有任何想法(或者更好的是现成的 iptables 规则集)来实现这样的事情?
编辑
我故意不具体说明,但这可能有助于澄清一些事情。客户端应用程序通常是具有专有 TCP 流协议的嵌入式设备。具体来说,限制在于我们无法更改设备配置,并且强烈不希望更改网络或服务器配置。这既是由不确定性带来的风险,也是由管理设备的工具的可用性所驱动。有许多不同类型的设备具有特定的配置文件,并且没有单一的通用解决方案。
这确实需要在网络边缘插入一些硬件来实现重定向。
我意识到这不能算作是好的做法,但这是我们继承下来的,无法控制的。随着我们的发展,我们将改变协议,使设备可以适当配置,或者使用充当服务器的设备来避免这个问题。
下面显示了典型所需配置的图表。
答案1
考虑到您的限制,我建议使用基于源 IP 重定向 TCP 流量的防火墙。使用 ipf 或 iptables 或我能想到的任何专用防火墙都可以轻松实现这一点。
以下是一些帮助您入门的基本 iptables 建议:
首先,告诉服务器进行转发(如果尚未完成)
sysctl net.ipv4.ip_forward=1
然后,为您想要重定向的设备的特定源 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
答案2
这取决于您的情况以及客户端到达服务器应用程序所需的步骤数。
通常,您复制一个客户端进行测试,实际的应用程序服务器并为您复制的客户端重新设计一个新应用程序服务器。
步骤的数量用于确定在哪个步骤向新的应用程序服务器发送请求。有点像这样(这应该完成所有虚拟复制并与真实的东西分开)
Client -> request -> sep1 -> stop2 -> server this -> server that -> done.
因此,步骤“服务器”是您应该研究的第一步,并将其重定向到新的应用程序服务器。如果这在虚假环境中有效,则转到步骤“服务器”和“stop2”等等,直到完成整个重新设计的新应用程序服务器。这更像是一个细分模型,而不是实际的 iptables 规则,但我希望您能明白我的意思。
答案3
我们随后将 Mikrotik 路由器配置为网桥,支持 L3 地址转换。
路由器位于设备和网络之间,并动态地将包含主机 IP 地址的每个以太网帧转换为主机的 IP 地址。
我曾提出过使用纯基于路由器的解决方案的提案,即在路由器的两个端口之间引入一个额外的网络段,但我觉得 L2 解决方案更有可能稳定。
预期的流量率如此之低,以至于入门级RB750提供足够的带宽。
答案4
这就是发明 DNS 的原因。不要在嵌入式设备中硬编码 IP 地址,因为它们会随着时间而变化(正如您现在所见)。将服务移动到另一个主机只是更新用于该服务的 DNS 名称。