У меня есть 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:
- proxy_pass(NGinx)
- mod_proxy(Апач)
Вы можете использовать мосты для предоставления некоторым виртуальным машинам выделенных 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