从公网 IP 和端口到局域网 IP 的 IPTables

从公网 IP 和端口到局域网 IP 的 IPTables

我的服务器有 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

相关内容