如何使用 IPTables 将流量重新路由到本地连接管理器或主 xmpp 服务 (Openfire)

How to use IPTables to reroute trafffic to either a local connection manager or the main xmpp service (Openfire)

我正在尝试对 openfire XMPP 服务器的连接进行负载平衡 - 因此我在第二台服务器上托管了一个连接管理器,并且正在尝试使用 IP 表作为负载平衡器。 Linux CentOS 6.3 上的这两个 运行(是的,我知道它很旧 - 正在努力)。

我已经在我的第二台服务器(我们称之为服务器 A)的端口 5300 上设置了连接管理器,XMPP 服务器(服务器 B)已经 运行 愉快地运行了很多年,并且继续这样做。

问题是让负载平衡实际进行任何平衡。

这些是我在服务器 A 上应用的预路由规则(已编辑 IP 地址),用于尝试在服务器 A 上的连接管理器(端口 5300)和服务器 B 上的 XMPP 服务(端口 5222)之间路由流量:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  0.0.0.0/0            <server A IP>      tcp dpt:5222 
statistic mode nth every 2 to:<server B IP>:5222
DNAT       tcp  --  0.0.0.0/0            <server A IP>      tcp dpt:5222 
to:<server B IP>:5300

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我通过 Spark 使用端口 5222 连接到服务器 A,它成功登录到 XMPP 服务。

我希望端口 5222 上到服务器 A 的每个偶数连接都已转发到 :5222 上的 openfire 服务器,并且每个奇数连接都被转发到 :5300 上的连接管理器。

然而,查看 openfire 中的连接,似乎总是通过连接管理器建立连接。

关于为什么会发生这种情况或如何纠正它的任何想法?我知道那里有各种负载平衡软件解决方案,但我更愿意本地处理它以最大限度地降低成本。

事实证明,从外观上看,xmpp 服务器从未接收到通过 IPTables 配置转发的数据包 - 然而 XMPP 服务器将所有默认规则设置为 "accept",并且没有说明其他规则, 并且正在接受来自连接管理器的连接。然后 Spark 重新尝试连接;所以当然连接到连接管理器,因为这是一个 "odd" 连接。

我将 [post 一个新的 question/identify 一个现有的] 关于正在使用的 IPTables 规则以及为什么数据包没有被转发 and/or 收到 - 比上面的问题更简单.