如何将 IP 请求转发到特定端口

如何将 IP 请求转发到特定端口

我有 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 代理。这可以将流量重定向到另一个端口。

http://www.linuxquestions.org/questions/linux-networking-3/debian-iptables-squid-redirect-port-80-to-port-8080-on-another-machine-474027/

答案3

听起来你有一个公共 IP 和两个带有私有 IP 的后端服务器(?) - 如果是这种情况,你所问的是不可能的:你不能有两个应用程序在同一个端口和(公共)IP 地址上监听。

您无法通过 DNS 执行此操作(DNSA记录没有“端口”的概念),而通过 iptables 执行此操作是错误的(这甚至可能是不可能的,但如果可以的话,它将涉及在防火墙规则中进行 DNS 查找,这不是我建议的)。
您需要两个公共 IP 地址才能实现此目的,或者您需要在备用端口上运行其中一个 Minecraft 服务器。

相关内容