Possuo três IPs públicos para meu servidor e tenho várias VMs que possuem seu próprio 'trabalho'. O servidor possui 1 NIC. IPs públicos:
- XX.XX.9.247 (PRINCIPAL)
- XX.XX.21.141 (adicional)
- XX.XX.21.142 (adicional)
IPs da LAN:
- 10.10.0.0/24
- 10.10.0.10:80 (servidor Web para o IP PRINCIPAL)
- 10.10.0.20:80 (servidor Web para o 1. IP adicional)
- 10.10.0.30:80 (servidor Web para o 2. IP adicional)
- 10.10.0.31:9987 (TeamSpeak para o 2. IP adicional)
e assim por diante.
Exemplo: A solicitação vem de XX.XX.21.141:80. A solicitação é enviada para 10.10.0.20:80. O vserver envia o pacote de volta via XX.XX.21.141.
Por que eu faço assim? Porque quero alugar alguns vservers.
Eu sei como conseguir isso com IPTables em um IP público, mas não tenho ideia de como fazer isso com vários IPs públicos.
Eu espero que vocês possam me ajudar.
Saudações
Responder1
Se você deseja redirecionar apenas http/https, é melhor usar o nginx (mas você pode apache). Dependendo de qual é o seu servidor Web (Apache, NGinx), você deve considerar um proxy HTTP em seu servidor front-end:
- proxy_pass(NGinx)
- mod_proxy(Apache)
Você pode usar pontes para fornecer alguns IPs dedicados de VM.
Solução iptables
iptables
| .---------------.
.-,( ),-. v port 80 |
.-( )-. port 80 ________ | |
( internet )------------>[_...__...°]------------->| VM |
'-( ).-' XX.XX.9.247 ^ 10.10.0.10 | |
'-.( ).-' | | |
| '---------------'
|
|
__ _
[__]|=|
/::/|_|
Este é o roteiro
#!/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