Fiz muita pesquisa no Google e pesquisei o que encontrei no Server Fault, mas não encontrei nenhuma solução para isso.
Eu tenho um servidor que está executando contêineres LXC (2 para agora, ambos Ubuntu). A rede LXC é conectada (10.0.3.0/24), com o servidor DHCP por ela estar em 10.0.3.1, e estou usando dois IPs dessa rede: 10.0.3.2 (container 1 [CN1]) e 10.0.3.3 (contêiner 2 [CN2]).
Eu tenho o Apache configurado em ambos e tenho um subdomínio configurado no DNS para um site meu que aponta para o meu IP público (web1 - > CN1 e web2 - > CN2). Os subdomínios são resolvidos corretamente, mas aqui é onde o problema começa.
Dependendo da regra que eu tenho primeiro no iptables determina qual container é atingido com a página da web. Portanto, se eu tiver a porta externa 80, pressione CN1 primeiro, então esse arquivo index.html será mostrado, e se 80 for definido para CN2 primeiro, então esse arquivo index.html será mostrado.
O que eu pensei em fazer foi configurar os servidores Apache para escutar em uma porta diferente, então eu configurei o CN1 para escutar 801 e CN2 para escutar 802, então eu configurei o iptables para rotear a porta externa da rota 80 para ambos destes, mas a mesma questão ainda surge.
Meu objetivo final é fazer com que web1 e web2 exibam seus respectivos arquivos index.html sem especificar uma porta externa específica (por exemplo, ip: 81- > CN1 e ip: 82- > CN2). Só outra coisa que posso pensar é configurar um proxy (ou seja, nginx) no host e ter solicitações de proxy com base no (sub) domínio solicitado, mas prefiro não fazer isso, se possível.
Regras do iptables:
Tabela NAT
root@SKYNet:~# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:http to:10.0.3.2:801
DNAT tcp -- anywhere anywhere tcp dpt:http to:10.0.3.3:802
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.3.0/24 anywhere
Tabela padrão
root@SKYNet:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Eu entendo a lógica do iptables e roteando-o para um ponto, mas eu pensei que o iptables basicamente tentaria direcionar o pacote para a porta 801, e se ele não combina com o VHost, ele irá rejeitá-lo e o iptables irá para o próximo (802 neste caso).