Ok, então eu quero saber como fazer redes em contêineres LXC. Não apenas o tipo de informação vaga que você obtém dos outros sites, mas um verdadeiro guia para iniciantes para fazê-los funcionar. Como a maioria dos exemplos é basicamente configurada para as pessoas testarem, eu quero executar um serviço em um ... como um servidor web, por exemplo.
Estou executando o Ubuntu 12.04 LTS e tenho o LXC instalado e posso criar, iniciar e parar um contêiner. Meu servidor obviamente tem um IP público e eu gostaria de saber como configurar um contêiner para que ele também possa ter um IP público. Como já parece existir uma ponte no meu contêiner atual, parece que eu preciso fornecer aos contêineres um intervalo DHCP público para que eles funcionem ou atribuir manualmente um endereço IP estático ao meu contêiner.
Se eu quiser atribuir estaticamente um IP ao contêiner, como faço isso? Preciso fazer alterações na minha configuração de ponte no host? É realmente melhor fazê-lo com a opção MACVLAN?
Qualquer ajuda seria apreciada.
Respostas:
Minha abordagem pressupõe que seu servidor tenha uma única NIC e você precisará compartilhá-la entre o host e os convidados LXC. Isso envolve o uso de uma ponte. A ponte possui e gerencia
eth0
. O host agora configura sua própria rede embr0
vez deeth0
. Os convidados LXC estão configurados para se conectar à ponte.No host
sudo apt-get install bridge-utils
,.No host, substitua
eth0
por uma ponte:Isso é perigoso. Cometa isso errado e você poderá ficar bloqueado no servidor. Certifique-se de ter um login local ativado e de que o acesso ao console local funcione, para que você possa reverter essa alteração se tiver algum problema.
Em
/etc/network/interfaces
:auto eth0
porauto br0
.Substituir:
com:
Se você tivesse uma configuração de rede estática, substitua:
com:
Você está apenas mudando
eth0
parabr0
e adicionando abridge_ports eth0
linha.Reinicie o host. Se você estava fazendo isso localmente, execute
sudo ifdown eth0
antes de começar esudo ifup br0
depois também o faria. Observe que a ponte pode demorar um pouco para aparecer, portanto, aguarde cinco minutos após a reinicialização antes de assumir que tudo está perdido.Para mover um determinado contêiner LXC nomeado para um IP público:
/var/lib/lxc/container_name/config
lxc.network.link
br0
/var/lib/lxc/container_name/rootfs/etc/network/interfaces
eth0
Para alterar o padrão para novos contêineres LXC, edite
/etc/lxc/default.conf
no host e alterelxc.network.link
parabr0
.Se você não precisar da ponte NAT fornecida pelo LXC (por exemplo, todos os seus contêineres usarão a nova ponte), no host edite
/etc/default/lxc
e mudeUSE_LXC_BRIDGE
para"false"
e, em seguida, na execução do hostsudo service lxc restart
.fonte
Robie, muito obrigada por postar esta resposta, eu venho tentando arrancar isso e esse foi o único método que funcionou!
Eu pensei em mencionar algumas coisas que descobri para ajudar a esclarecer as instruções para outros administradores.
Meu host tinha vários aliases de IP estáticos atribuídos a eth0 no convidado, por exemplo:
Agora não queremos configurar o br0 da mesma maneira, apenas queremos um IP sem apelidos como Robie indicado acima.
Então, digamos que você queira que o 5.5.5.5 seja atribuído ao contêiner debian8.
Edite
/var/lib/lxc/debian8/etc/network/interfaces
e adicione:Em seguida, emita este comando:
route add default gw <gateway-ip, in my case 5.5.5.1>
Depois disso, reinicie o contêiner e tudo deve finalmente funcionar! :)
fonte
Eu tive o mesmo problema e tenho esta solução (rápida e suja).
No servidor:
route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0
Além disso, se necessário, adicione rota aos roteadores upstream.
Provavelmente, não é a melhor solução, mas não exige muito esforço! Felicidades.
fonte