我有 2 台服务器
- 第一个(SRV01)正在运行 Bind 和其他 Web 应用程序
- 第二个(SRV02)正在运行 2 个服务器 Minecraft (^^)
在 Bind 中我有 2 个 MC 的录音
s1.domain.tld A SRV02IP
s2.domain.tld A SRV02IP
2 个 MC 服务器在 2 个不同的端口 25565 和 25566 上运行
所以我希望来自的请求s1.domain.tld:25565
将发送到SRV02IP:25565
并且来自的请求s2.domain.tld:25565
将发送到SRV02IP:25566
我认为我需要在 SRV02 iptables 中执行此操作。我查看了一些有关 iptables 的主题,但都与我无关。
你可以帮帮我吗 ?
谢谢。
答案1
只要两台服务器都可以公开访问,就可以实现。将 s1.domain.tld 指向 SRV01IP,将 s2.domain.tld 指向 SRV02IP。s2.domain.tld:25565 已经可以正常工作。在 SRV02IP 上的 :25566 上设置 minecraft,然后在 SRV01IP 上的 iptables 中,您需要将 :25565 转发到 SRV02IP:25566:
iptables -t nat -I PREROUTING -p tcp --dport 25565 -j DNAT --to-destination SRV02IP:25566
iptables -t nat -I POSTROUTING -p tcp --dport 25566 -j MASQUERADE
最后,为了使其工作,您需要在 proc 中启用 IP 转发:
echo "1" > /proc/sys/net/ipv4/ip_forward
一切就绪。需要注意的是,这不会在重启后持续存在。要使其持续存在,请确保保存 IPTables 规则(因发行版而异)并编辑 /etc/sysctl.conf 以使 ip_forward 持续存在,方法是编辑以下行(如果不存在,则添加它):
net.ipv4.ip_forward = 1
答案2
只需将另一个 IP 绑定到 SRV02。如果您没有额外的外部 IP,也可以使用内部 IP(使用一些额外的技巧)。安装 Squid 代理。这可以将流量重定向到另一个端口。
答案3
听起来你有一个公共 IP 和两个带有私有 IP 的后端服务器(?) - 如果是这种情况,你所问的是不可能的:你不能有两个应用程序在同一个端口和(公共)IP 地址上监听。
您无法通过 DNS 执行此操作(DNSA
记录没有“端口”的概念),而通过 iptables 执行此操作是错误的(这甚至可能是不可能的,但如果可以的话,它将涉及在防火墙规则中进行 DNS 查找,这不是我建议的)。
您需要两个公共 IP 地址才能实现此目的,或者您需要在备用端口上运行其中一个 Minecraft 服务器。