從公用 ip 和連接埠到 LAN ip 的 IPTables

從公用 ip 和連接埠到 LAN ip 的 IPTables

我的伺服器擁有 3 個公用 IP,並且有多個擁有自己「工作」的虛擬機器。伺服器有 1 個 NIC。公共IP:

  • XX.XX.9.247(主要)
  • XX.XX.21.141(附加)
  • XX.XX.21.142(附加)

區域網路IP:

  • 10.10.0.0/24
  • 10.10.0.10:80(主 IP 的網路伺服器)
  • 10.10.0.20:80(第 1 個新增 IP 的網路伺服器)
  • 10.10.0.30:80(第二個位址的網路伺服器)
  • 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

相關內容