使用 iptables 将客户端转发到新服务器

使用 iptables 将客户端转发到新服务器

A客户端通过连接域名地址来连接到服务器www.example.com:4444,域名地址www.example.com解析为服务器的IP地址A

问题:为了提供无缝服务器升级,客户端必须不间断地从一台服务器转移A到另一台服务器B。以下 iptables 规则允许客户端B通过 间接与服务器通信A

iptables -t nat -A PREROUTING -p tcp --dport 4444 --to-destination 123.123.123.123 -j DNAT
iptables -t nat -A POSTROUTING -p tcp -d 123.123.123.123 --dport 4444  -j MASQUERADE

但是客户端仍然需要服务器A才能访问服务器B。有没有办法告诉客户端他们应该与之通信的新服务器是B具有 IP 地址的服务器123.123.123.123,并且他们应该直接转到该服务器 IP 地址,而不再通过该服务器进行连接A

我假设更改ADNS 中的记录并等待更改传播到客户端将需要客户端重新启动(这是我们必须避免的)。


服务器和客户端通过 TCP 上的 JSON 消息进行通信,而不是 HTTP。

答案1

您需要更新 DNS 的 A 记录。

通常,您会在更改之前降低记录的 TTL,以减少其他 DNS 服务器缓存“旧”地址的时间。您至少应该在实际更改为新服务器之前降低 TTL。

例如,如果您的 TTL 正常为 24 小时,那么您可以在实际想要更改的 24 小时前将 TTL 缩短为 5 到 30 秒。然后更改 A 记录,一旦您确认一切正常(即您不需要恢复到旧服务器),您就可以将 TTL 恢复正常。

答案2

假设这是正常的 HTTP,您无需重新启动客户端即可应用 DNS 更改。TTL 只需过期即可。HTTP
是一种REST 风格的,这意味着实际连接(套接字)通常不会在请求(“页面加载”)之间保存,因此“断开连接”毫无意义。客户端将丢失会话(这是服务器端的),但这是不可避免的(毕竟您正在切换服务器)。
您可以通过修改客户端的本地hosts 文件并观察他们的行为。

相关内容