IPTables из публичного IP и порта в локальную сеть IP

IPTables из публичного IP и порта в локальную сеть IP

У меня есть 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 (Веб-сервер для 2-го доп. IP)
  • 10.10.0.31:9987 (TeamSpeak для 2-го доп. IP)

И так далее.

Пример: Запрос приходит с XX.XX.21.141:80. Запрос отправляется на 10.10.0.20:80. Виртуальный сервер отправляет пакет обратно через XX.XX.21.141.

Почему я так делаю? Потому что я хочу сдать в аренду несколько виртуальных серверов.

Я знаю, как добиться этого с помощью IPTables на одном публичном IP-адресе, но не имею представления, как это сделать с несколькими публичными IP-адресами.

Надеюсь, вы мне поможете.

Привет

решение1

Если вы хотите перенаправлять только http/https, лучше использовать nginx (но можно и apache). В зависимости от того, какой у вас веб-сервер (Apache, NGinx), вам следует рассмотреть возможность использования HTTP-прокси на вашем сервере front-end:

Вы можете использовать мосты для предоставления некоторым виртуальным машинам выделенных 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

Связанный контент