我的服务器有 3 个公共 IP,并且有多个虚拟机,每个虚拟机都有自己的“任务”。服务器有 1 个 NIC。公共 IP:
- XX.XX.9.247(主要)
- XX.XX.21.141(附加)
- XX.XX.21.142(附加)
LAN IP:
- 10.10.0.0/24
- 10.10.0.10:80(主 IP 的 Web 服务器)
- 10.10.0.20:80(第 1 个附加 IP 的 Web 服务器)
- 10.10.0.30:80(第二个附加 IP 的 Web 服务器)
- 10.10.0.31:9987(TeamSpeak 为第二个附加 IP)
等等等等。
示例:请求来自 XX.XX.21.141:80。请求发送到 10.10.0.20:80。虚拟服务器通过 XX.XX.21.141 将数据包发回。
我为什么要这样做?因为我想出租一些虚拟服务器。
我知道如何使用一个公共 IP 上的 IPTables 实现这一点,但不知道如何使用多个公共 IP 来实现这一点。
我希望你们能够帮助我。
问候
答案1
如果您只想重定向 http/https,最好使用 nginx(但您也可以使用 apache)。根据您的 Web 服务器(Apache、NGinx),您应该考虑在前端服务器上使用 HTTP 代理:
您可以使用网桥为某些 VM 提供专用 IP。
Iptables 解决方案
iptables
| .---------------.
.-,( ),-. v port 80 |
.-( )-. port 80 ________ | |
( internet )------------>[_...__...°]------------->| VM |
'-( ).-' XX.XX.9.247 ^ 10.10.0.10 | |
'-.( ).-' | | |
| '---------------'
|
|
__ _
[__]|=|
/::/|_|
这是脚本
#!/bin/sh
# eth1 is WAN
WAN=eth1
MAIN_IP=XX.XX.9.247
MAIN_PORT=80
BACK_END_IP=10.10.0.10
BACK_END_PORT=80
echo 1 > /proc/sys/net/ipv4/ip_forward
# it's clean all tables
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -A PREROUTING -i ${WAN} -d ${MAIN_IP} --dport ${MAIN_PORT} -j DNAT --to-destination ${BACK_END_IP}:${BACK_END_PORT}
iptables -A FORWARD -d ${MAIN_IP} --dport ${MAIN_PORT} -j ACCEPT
#maybe this# iptables -A FORWARD -i ${WAN} -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE