パブリック IP とポートから LAN IP までの IPTables

パブリック IP とポートから LAN IP までの IPTables

私は自分のサーバーに 3 つのパブリック IP を所有しており、それぞれに「ジョブ」を持つ複数の VM を持っています。サーバーには 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 (2 番目の追加 IP の Web サーバー)
  • 10.10.0.31:9987 (2 番目の IP については TeamSpeak)

などなど。

例: 要求は XX.XX.21.141:80 から送信されます。要求は 10.10.0.20:80 に送信されます。vserver はパケットを XX.XX.21.141 経由で送り返します。

なぜそのようにするのでしょうか? いくつかの vserver をレンタルしたいからです。

1 つのパブリック 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

関連情報