将传入连接转发到另一台服务器,但同时转发连接 IP 地址

将传入连接转发到另一台服务器,但同时转发连接 IP 地址

我有两台 Linux 服务器。我需要将传入连接从服务器 A(1.1.1.1:25565)转发到服务器 B(2.2.2.2:25598)(作为示例)。我尝试了多个 iptables 规则,部分成功。问题是 IP 没有被转发。

举个例子,我有一个 Minecraft 服务器。当有连接时,它会将我从 1.1.1.1 转发到 2.2.2.2,但是,玩家拥有的 IP 不是他们的网络 IP,而是服务器 A IP(当前示例中为 1.1.1.1)。是否也可以以某种方式转发连接的 IP?

如果这不可能的话,我是否可以通过连接发送一个数据包,以便我可以通知游戏服务器玩家正在使用的 IP,并让服务器将其从服务器 A IP 更改为真实的连接 IP(例如插件会做什么?从我看到的使用情况来看,它只是拆分传入的连接数据包并获取连接 IP、端口和时间戳。有人知道怎么做吗?

我尝试过的规则:

# Rule 1
iptables -t nat -A PREROUTING -p tcp --dport 25568 -j DNAT --to-destination 2.2.2.2:30026
iptables -t nat -A POSTROUTING -j MASQUERADE
# Rule 2
iptables -t nat -A PREROUTING -p tcp --dport 25599 -j DNAT --to-destination 2.2.2.2:30026
iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 30026 -j SNAT --to-source 1.1.1.1
# Rule 3
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 12222 -j DNAT --to 2.2.2.2:30026
iptables -A FORWARD -p tcp -d 2.2.2.2 --dport 30026 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE

不要过多关注端口,我知道每个命令的端口都不一样,但这些并不重要。

答案1

您可以通过设置default路由2.2.2.2然后从 IPTables 规则中1.1.1.1删除POSTROUTING MASQUERADE/规则来达到您的目标。SNAT

然而,这意味着所有的访问都2.2.2.2必须通过 进行1.1.1.1

您看到修改后的 IP 地址的原因是SNAT/MASQUERADE规则。这会将 IP 数据包源地址替换为1.1.1.1,并且当2.2.2.2有除 之外的其他默认路由时,这是必需的1.1.1.1

相关内容