Como configurar NAT em containers do Proxmox

Última atualização: 5/17/2017

O Proxmoxopen in new window é um ambiente de virtualização para Linux muito prático e útil para empresas que demandem virtualização em servidores pequenos (por mais que você possa utilizar ele em ambientes bem maiores). É uma boa alternativa para quem não quer usar OpenStack ou controlar VMs com XenCenter. Ele permite criar máquinas virtualizadas em KVM ou Containers LXC (na versão 3.x utilizava-se OpenVZ para os containers).

Normalmente nestes ambientes pequenos você não possui um roteador bom o suficiente para poder controlar as redes em modo Bridge, vai precisar configurar redes locais e também permitir que seus containers/vms acessem a rede externa. Para isso você deve configurar um NAT no Host do Proxmox e posteriormente atribuir um IP interno ao container/vm.

Primeiro passo: Criando uma interface bridge no Host

Acesse o painel administrativo do Proxmox (normalmente em https://seuip:8006/), clique sobre o host, após em Networking, e clique em Create, selecionando Linux Bridge no submenu.

Nova interface no Proxmox

Na janela que abrirá digite um identificador para a interface (no meu caso escolhi vmbr2), um IP (que será o gateway das máquinas) e a máscara de rede (/24, mas você pode usar a máscara que desejar).

Detalhe de nova interface no Proxmox

Após criar a interface, reinicie o servidor do Proxmox para que ele aplique a configuração da nova interface. Depois de reiniciar você precisará adicionar algumas regras para que o NAT de fato ocorra. Edite o arquivo /etc/network/interfaces no servidor Proxmox e adicione as seguintes linhas no trecho da interface vmbr2:

auto vmbr2
iface vmbr2 inet static
        address 192.168.200.1
        netmask 255.255.255.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0
        # Adicione as linhas abaixo
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -t nat -A POSTROUTING -s '192.168.200.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.200.0/24' -o vmbr0 -j MASQUERADE

Note que nas regras acima referenciamos um vmbr0, esta interface é a que possui um IP externo e gateway no Host, provavelmente em sua instalação do Proxmox você precisará configurar com a interface eth0.

Não esqueça de reiniciar novamente a máquina para testar as configurações. Mas você pode simplesmente reinciar as interfaces com ifdown vmbr2 e ifup vmbr2 se desejar.

Caso tenha problemas com o NAT, verifique se sua politica de FORWARDING não está marcada como DROP por padrão, isso pode prejudicar o encaminhamento dos pacotes.

Configurando o container/vm

Agora ficará fácil configurar os containers/vms. Basta no ato da criação do container escolher um IP "interno", e informar o IP de gateway, que é o IP da interface vmbr2 no Host. Não esqueça de atribuir o bridge criado, conforme indicado na imagem.

Configuração de IP no container

As máquinas internas também serão capazes de se conectarem entre si, segmente a sua rede e crie novas interfaces de acordo com a sua necessidade de isolamento. O Proxmox disponibiliza segmentação por VLAN e também controle de tráfego direto pela interface de configuração.

Expondo uma porta interna

Se você precisar expor alguma porta de um container basta adicionar a seguinte regra post-up no mesmo trecho da interface vmbr2 onde as regras de MASQUERADE foram inseridas.

# Expondo a porta 80 do container com IP 192.168.200.40
post-up iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.200.40:80

Agora você poderá acessar a porta 80 no host para que tenha contato com o container.

Informações adicionais

Note que esta configuração não torna desnecessária a configuração de um firewall nos containers e no Host. Use iptables ou as configurações de firewall disponíveis na interface do Proxmox.

Estas configurações com vmbr0 e vmbr2 são comuns em servidores dedicados da OVH, Soyoustart e Kimsufi.