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

标签 centos iptables 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 服务器将所有默认规则设置为“接受”并且没有说明其他规则,并且正在接受来自连接管理器。 Spark 然后重新尝试连接;所以当然连接到连接管理器,因为这是一个“奇怪的”连接。

我将 [发布一个新问题/确定一个现有问题] 关于正在使用的 IPTables 规则以及为什么没有转发和/或接收数据包 - 比上述更简单的问题。

关于centos - 如何使用 IPTables 将流量重新路由到本地连接管理器或主 xmpp 服务 (Openfire),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54630537/

相关文章:

docker - yum 安装旧版本 docker

linux - 容器无法访问其他容器端口

linux - 允许 DOCKER-USER 链中的某些 IP 用于入站流量,拒绝所有其余 IP

python - 无法从外部主机在 TCP 端口建立连接

java - 让 Smackx PubSub 工作

android - 在 Android 中获取 XMPP Open Fire 私有(private)聊天历史和消息存档

git - 为什么我在本地 VM 上登录时,在共享文件夹中会得到不同的 git 状态?

python - 安装包之间的pycurl版本冲突

java - JDK1.8 和 Mac Yosemite 10.10.3 无法启动 openfire 3.10.0

.net - 无法访问我的 .NET 容器