我目前在 VPS 上运行游戏服务器,不久将更换 VPS 提供商。为了让玩家更轻松地完成迁移,我希望玩家能够通过将所有数据包从旧服务器转发到新服务器,暂时使用原始 IP。
我知道这会增加额外的延迟,但我将显示一条显示新 IP 的消息,并警告他们如果他们使用原始 IP 会增加延迟。
两台服务器不是在同一个内部网络上。
我希望所有这些都是有效的;
Client --> Server A --> Server B
Server B --> Client
Client --> Server B
例如,客户端可以直接连接到 B,但如果他们连接到 A,它将重定向到 B。在所有情况下,服务器 B 都会将其数据直接发送到客户端。
服务器 A 除了转发数据包外不做任何事(例如游戏服务器不是正在跑去那里)
我知道这可能不太可能,但如果有人能帮助我那就太好了。
哦,因为它是一个游戏服务器,所以大多数流量都是 UDP,并且两个服务器都运行 Ubuntu 12.0.4
谢谢
答案1
客户端——>服务器A——>服务器B
为此,您必须使用双 NAT,如下所示Server A
:
DNAT
传入数据包到Server A
到Server B
- 这样做是
SNAT
为了确保返回流量能够通过Server A
像这样:
iptables -t nat -A PREROUTING -d $Server_A_ip_address -j DNAT --to-destination $Server_B_ip_address
iptables -t nat -A POSTROUTING -d $Server_B_ip_address -j SNAT --to-source $Server_A_ip_address
其他情况更容易处理:
服务器B-->客户端
在Server B
:iptables -A OUTPUT -s $Server_B_ip_address -j ACCEPT
客户端——>服务器B
在Server B
:iptables -A INPUT -d $Server_B_ip_address -j ACCEPT
当然,对于所有这些,建议指定协议和端口。我的样本太宽容了,因为我不知道你的端口/协议。