Para que isso faça sentido, preciso definir um pouco a cena.
Eu tenho um servidor dedicado com 5 Ips públicos: ABC1 a ABC5
O ABC1 gerencia o próprio servidor dedicado e o ABC2 - 5 é usado para contêineres OpenVZ. Desejo que cada IP público seja vinculado a vários contêineres - por exemplo, o ABC2 deve encaminhar o tráfego na Porta 80 para o contêiner em 192.168.2.1 e o tráfego na porta 21 para o contêiner em 192.168.2.2.
Usando IPTables para NAT, o tráfego funciona se apenas um IP externo estiver em uso; no entanto, se tentar adicionar vários IPs públicos para rotear, perco toda a conexão de rede com todos os contêineres, eles não podem executar ping e não podem receber tráfego de entrada. No entanto, o acesso ao nó Host permanece.
A saída de iptables -t nat -L no nó do host está abaixo:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT udp -- anywhere A.B.C.2 udp dpt:9987 to:192.168.2.1:9987
DNAT tcp -- anywhere A.B.C.2 tcp dpt:10011 to:192.168.2.2:10011
DNAT tcp -- anywhere A.B.C.2 tcp dpt:30033 to:192.168.2.2:30033
DNAT tcp -- anywhere A.B.C.3 tcp dpt:80 to:192.168.3.1:80
DNAT tcp -- anywhere A.B.C.4 tcp dpt:25565 to:192.168.4.1:25565
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.2.0/24 anywhere to:A.B.C.2
SNAT all -- 192.168.3.0/24 anywhere to:A.B.C.3
SNAT all -- 192.168.4.0/24 anywhere to:A.B.C.4
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
O nó Host possui uma NIC física - eth0, que possui um IP ABC1
O host está executando o Centos 6.3 e cada uma das VMs está executando o Debian 7.
Minha versão do kernel do OpenVZ é 2.6.32-042stab108.2