Como tornar os contêineres lxd acessíveis para a LAN

3

Se eu usar o Virtualbox para girar uma VM, posso selecionar "em ponte" como o tipo de adaptador de rede e isso faz com que a NIC guest / virtual seja conectada à minha LAN física e, portanto, obtenha um IP de LAN do meu roteador DHCP).

Eu quero alcançar essa mesma funcionalidade, mas em vez de usar o Virtualbox, quero usar os contêineres lxc / lxd.

Como posso conseguir isso?

Editar 1

Estou executando o Ubuntu e tentei seguir este guia:

link

... mas isso não ajuda. A interface do host original deve ter um IP depois? Porque isso não acontece quando tento a ponte manual.

Editar 2

Se isso ajudar, meu host lxd / lxc é uma máquina virtual do Virtualbox que executa o Ubuntu, configurada com rede em ponte para minha NIC Ethernet física.

Editar 3

Se eu usar o tcpdump para monitorar o tráfego icmp na interface da bridge, a interface física / host e a interface contêiner / virtual, somente o contêiner / virtual não receberá tráfego. Os outros dois fazem.

Editar 4

De acordo com este guia:

link

Não tenho problemas com a configuração da minha ponte.

No entanto, como mencionado em "Editar 3", a interface do contêiner não está recebendo tráfego. Precisa descobrir por que, mas não sei como ...

Tenho a sensação de que tem algo a ver com rotas.

O container não tem rotas, enquanto o host faz.

Editar 5

Usar o tcpdump para monitorar o tráfego arp, mostra que o tráfego arp está realmente chegando ao container / interface virtual.

Então é apenas o tráfego icmp que não é.

Editar 6

Se eu definir um IP estático no contêiner (via / etc / network / intefaces *), isso me permite executar ping no contêiner do host (que é uma máquina Virtualbox).

Se eu alterar a configuração de rede no Virtualbox para permitir tráfego promíscuo, posso executar ping no contêiner da minha máquina física (o host da máquina Virtualbox). No entanto, daqui, ainda não consigo pingar além da minha LAN física, de dentro do contêiner.

O último passo, se adicionar manualmente uma rota "predefinida" no contentor da seguinte forma:

route add default gw 192.168.0.1 eth0

que permite fazer ping fora da LAN física de dentro do contêiner.

Portanto, a menos que outra pessoa possa oferecer uma explicação (esperarei antes de postar uma resposta), acredito que a falta de suporte DHCP ao contêiner (via bridging) tenha algo a ver com o fato de o lxc / lxd estar usando netmasq para lidar com DHCP (e DNS).

    
por pleasedesktop 24.02.2016 / 08:02

3 respostas

1
  1. Se o seu host LXD for realmente uma máquina virtual, verifique se o adaptador de rede da máquina virtual está configurado para o modo promíscuo, de modo que o tráfego do contêiner LXD passe da rede física para a virtual.
  2. Defina um endereço IP estático no (s) recipiente (s) lxd, porque o DHCP (do seu gateway físico) parece não funcionar.

Na minha 6ª edição eu disse que precisava adicionar manualmente uma rota padrão no container, mas isso não é verdade. Eu só precisei fazer isso porque esqueci de especificar o endereço IP da LAN do gateway no arquivo /etc/network/interfaces . Portanto, não é um problema do LXD, apenas não se esqueça de especificá-lo.

    
por 28.02.2016 / 09:22
1

Você precisa criar uma interface de ponte, na qual sua interface do sistema operacional hospedeiro será uma perna e, em seguida, anexar contêineres lxc a essa ponte. Dessa forma, você obterá a conectividade em ponte adequada.

Parte da configuração do seu contêiner ficará assim:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0

Enquanto sua configuração de ponte de SO será realmente específica de distro.

    
por 24.02.2016 / 08:37
0

O que você basicamente precisa é que os contêineres usem um gateway padrão que possa encaminhar o tráfego para o restante da sua rede e uma rota estática no roteador que possa encaminhar de volta para esse sistema. Este pode ser seu host lxd (usando encaminhamento de IP no Linux), ou você pode ter um contêiner dedicado para manipular o roteamento (possivelmente executando um firewall para limitar quais IP / Portas do contêiner podem ser acessados).

Se você estiver usando a ponte lxdbr0 padrão e quiser alterar o gateway para contêineres, poderá usar o raw.dnsmasq configurações. Geralmente, ele será configurado para o IP usado para o host lxd ao configurar a ponte, mas pode ser alterado usando dhcp-option=3 :

lxc network show lxdbr0
config:
  ipv4.address: 192.168.4.1/24
  ipv6.address: none
  raw.dnsmasq: dhcp-option=3,192.168.4.2
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/ubuntu-test
managed: true

Quando você reiniciar um contêiner, poderá ver o novo gateway usando ip route show .

Quando os contêineres forem definidos para usar o gateway padrão desejado, verifique se o sistema está configurado para encaminhar pacotes IP. Nesse ponto, seus contêineres devem conseguir executar ping em outros IPs nesse host, mas não poderão acessar nada na rede. Isso ocorre porque o restante da rede não possui informações de roteamento sobre como devolver os pacotes destinados à sub-rede do contêiner.

Se esta for uma rede doméstica por trás de um roteador, você pode adicionar uma rota estática em seu roteador doméstico para informá-lo para onde enviar esses pacotes. Se seu host lxd estiver usando um IP estático de 192.168.0.2 e seus contêineres estiverem usando uma sub-rede de 192.168.4.0/24, adicione essa sub-rede como uma rota estática com o IP do host do host .2 como o gateway. Isso deve permitir que os pacotes sejam roteados entre seus contêineres e a rede local usando seu host lxd como um gateway entre as duas redes

    
por 28.02.2018 / 23:38