我有两台来自不同公司的服务器
第一台服务器是我托管网站的 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