O Linux Containers (LXC) é uma alternativa de virtualização no nível do SO, diminuindo o overhead do host em que está como convidado quando comparada a alternativas de hypervisors convencionais. O LXC cria containers, que compartilham diretamente o processador e a memória com o host.
O LXC muitas vezes é estudado instalando-o em VMs, uma vez que é executado apenas em distribuições Linux e evita problemas no host caso seja feito algo que não era esperado. Neste tutorial informamos como deve ser feita a instalação do LXC em uma VM VirtualBox, de modo que o container não tenha o IP fornecido pelo NAT da bridge criada pelo LXC (lxcbr), mas receba o IP fornecido da própria rede em que se encontra.
Este tutorial é feito em uma VM Ubuntu 14.04, mas pode ser feita em outras distribuições do Linux. Primeiro, vamos instalar o LXC. Para instalá-lo é necessário adicionar o ppa da distribuição:
sudo add apt-repository ppa:ubuntu-lxc/stable
Após adicionar o ppa, execute o update:
sudo apt-get update
E após o update, instale o pacote lxc:
sudo apt-get install lxc
Após a instalação, iremos criar nosso primeiro container. Para criá-lo, iremos executar o seguinte comando:
sudo lxc-create -t ubuntu -n u1
Onde o -t indica qual distribuição Linux será o container, e o -n indica o nome do container. Caso queira mudar o u1 para outro nome que achar melhor, não há problema!
Após a criação do container, é possível iniciá-lo pelo comando:
sudo lxc-start -n u1
Caso você execute o comando sudo lxc-ls –fancy, verá a seguinte tabela:
No campo IPV4 está um IP provido pela lxcbr, de rede 10.0.3.0. Entretanto, precisamos que o container receba um IP da rede local que estamos. Para isso, algumas mudanças precisam ser feitas, como criar uma bridge e alterar a configuração do container.
Para criar a bridge edite o arquivo /etc/network/interfaces, adicionando as seguintes linhas:
auto br0 iface br0 intet dhcp bridge_ports eth0
e na eth0 altere a segunda linha, colocando para a interface ser manual:
auto eth0 iface eth0 inet manual
Nós também devemos alterar a configuração do container, passando como bridge a br0 criada. Vamos alterar o arquivo /var/lib/lxc/u1/config (se mudou o nome do container, mude de u1 para o nome alterado), com permissões de super usuário. Nele, altere o lxc.network.link de lxcbr0 para br0.
#mude o network.link de lxcbr0 para br0 lxc.network.type = veth lxc.network.link = br0
Desligue a VM e realize uma importantíssima mudança: No VirtualBox, clique na VM e vá para Configurações, para alterar as preferências da VM. Em Rede, altere o Modo Promíscuo de “Recusar ” para “Permitir tudo” na interface em que está a eth0 da VM. Caso tenha dúvidas de qual interface a eth0 está, altere em todas elas. Desta forma, a placa de rede não recusará pacotes que são de IPs diferentes do IP desta interface, e o container poderá recebê-los caso o destino seja seu IP.
Quando iniciarmos o container na VM pelo lxc-start, o container já terá o IP da rede em que estamos conectados:
Esperamos que este tutorial tenha sido útil para configurar containers em VMs com IPs da rede local, sem a presença do NAT da lxcbr.