端口上的 Iptables 代理主机

端口上的 Iptables 代理主机

我有两台来自不同公司的服务器

第一台服务器是我托管网站的 VPS(假设它的 IP 是 5.5.5.5)第二台服务器是 Minecraft 服务器(假设它的 IP 是 6.6.6.6)

在我的 VPS 上,我有一个用于 minecraft 网站的域名和子域名(假设是 mc.example.com)

如果您在浏览器上访问 mc.example.com,您最终将进入 5.5.5.5 和网站。

我想要做的是,当你从 Minecraft 访问 mc.example.com 时,你最终会进入 6.6.6.6。

例如:

mc.example.com:80       ->    5.5.5.5:80
mc.example.com:25565    ->    6.6.6.6:25565

现在,我的网络接口如下我的 VPS 上有两个 IP,主要的是 venet0:0 (5.5.5.5)

这是网络接口

auto lo
iface lo inet loopback
        address 127.0.0.1
        netmask 255.0.0.0
        broadcast 127.255.255.255
        up ip route replace 127.0.0.0/8 dev lo


# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
        address 127.0.0.1
        netmask 255.255.255.255
        broadcast 0.0.0.0
        up route add -net 191.255.255.1 netmask 255.255.255.255 dev venet0
        up route add default gw 191.255.255.1

auto venet0:0
iface venet0:0 inet static
        address 5.5.5.5
        netmask 255.255.255.255

auto venet0:1
iface venet0:1 inet static
        address 4.4.4.4
        netmask 255.255.255.255

有人能告诉我,我需要在 iptables 中写入什么命令才能从我的 VPS 代理该 minecraft 服务器吗?

谢谢你!

答案1

我只需将 mc.example.com 指向 6.6.6.6,否则您将为所有 minecraft 流量支付三倍费用:传入 5.5.5.5、传出 5.5.5.5 和传入 6.6.6.6。在 6.6.6.6 上,我将设置一个简单的 Web 服务器,它只将重定向发送到 mc-web.example.com 之类的东西,它将位于 5.5.5.5 上。

除非两家公司的网络设置得相当宽松(不完善),否则您必须进行 SNAT 以避免非对称路由。因此,任何可能的 iptables 解决方案也会丢失所有责任信息:来自 6.6.6.6 的所有流量都来自 5.5.5.5,而 6.6.6.6 对流量的真正来源一无所知。

也就是说,这应该可以解决问题:

iptables -t nat -A PREROUTING -d 5.5.5.5 --dport 25565 -j DNAT --to 6.6.6.6
iptables -t nat -A POSTROUTING -d 6.6.6.6 --dport 25565 -s '!' 5.5.5.5 -j SNAT --to-source 5.5.5.5

相关内容