Configurando contêineres LXC em ponte com IPs estáticos

12

Estou tentando configurar vários contêineres LXC em um host, cada um com IPs estáticos públicos próprios.

Meu host está executando o Ubuntu mais recente. Tem uma única interface de rede chamada eth0. Os IPs estáticos são pingáveis da Internet e são denominados eth0: 210, eth0: 211 ... Os números após os dois pontos são o byte menos significativo dos endereços. Além dessas interfaces, tenho a configuração br0 no IP público do host. Existem também as interfaces lo, veth2LPP9A e lxcbr0. O lxcbr0 tem o endereço de um IP privado.

O host / etc / network / interfaces se parece com:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

Até agora eu usei várias fontes on-line, incluindo Colocar em ponte os contêineres do LXC para hospedar o eth0 para que eles possam ter um IP público para ajudar a configurar isso.

O arquivo de configuração do contêiner tem:

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

Eu removi a configuração estática do lxc.network.ipv4 desse arquivo, pois isso causou problemas. Quando eu corri lxc-ls --fancy com essa configuração, eu veria o mesmo IP público duas vezes na saída. Além disso, ele iria mexer com a configuração de sub-rede das interfaces / etc / network / do contêiner.

Falando do arquivo de interfaces do contêiner, parece um pouco com:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

Eu tive que comentar o gateway e adicionar os comandos route add nesse arquivo. Caso contrário, o contêiner levaria alguns minutos para inicializar.

Os arquivos / proc / sys / net / bridge / bridge-nf- * no host são todos configurados para 0. O valor / proc / sys / net / ipv4 / ip_forward é 1.

O problema é que, mesmo que a "route -n" do contêiner pareça que deveria, não consigo pingar para fora do contêiner. SSH para o que deveria ser o IP do contêiner, me conecta ao host.

EDIT: Remover o IP estático do contêiner do host ajudou, mas agora estou recebendo um novo erro. Tentando efetuar ping no contêiner dos resultados do host em Redirect HostFrom, New nexthop. Os pacotes estão indo apenas do gateway para o host, repetidamente. Executar um traceroute do host mostra que a primeira parada está no gateway. Então todas as outras rotas são * * *. Eu recebo o mesmo problema, independentemente de o contêiner estar online ou não.

    
por EthernetCable 02.02.2014 / 23:40

4 respostas

14

Na verdade, você pode definir o endereço e o gateway de dentro do host e configurar o contêiner para não tocar na interface usando o palavra-chave manual .

Coloque isso nos convidados /etc/network/interfaces :

auto eth0
iface eth0 inet manual

Além disso, deixe-o no arquivo de configuração do contêiner para configurar a interface:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

O convidado se comportará como se o BIOS já configurasse a interface e apenas o usasse.

Explore especialmente lxc.network.ipv4.gateway .

    
por 04.04.2014 / 01:50
3

Como você está criando pontes, é necessário definir os endereços IP no contêiner somente e não no host. O host deve ter apenas seu próprio endereço IP .

    
por 02.02.2014 / 23:42
1

Eu apenas fiz isso no outro dia com o Ubuntu 14.04. É simples. Você só precisa editar o arquivo /etc/network/interfaces dentro do seu contêiner e definir isso:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

Substitua todas as variáveis pelo valor desejado.

Você NÃO precisa fazer mais nada!

PS: Observe o espaço antes de algumas linhas. É obrigatório.

    
por 14.06.2014 / 19:27
1

Eu poderia configurar corretamente meus contêineres lxc depois de seguir a resposta do @Enrique Moreno Tent, então vou explicar o que fazer em mais detalhes caso você não saiba como configurar os outros itens.

1. Acesse seu contêiner LXC por meio do comando lxc-attach

Comando:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Veja suas configurações atuais com ifconfig

Comando

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

'' '

3. Obtendo endereço, máscara de rede e gateway

Vendo o resultado do comando ifconfig acima, vemos:

Endereço é o endereço que você deseja, você pode alterá-lo para 10.0.3.166.

A máscara de rede está lá: 255.255.255.0

Gateway : Para o gateway que você usa o endereço broadcast , aqui está 10.0.3.255

Como você pode ver acima, atualmente você tem todas as informações necessárias para preencher seu convidado (contêiner) /etc/network/interfaces .

4. Obtendo dns-nameservers value.

Emita o comando:

cat /etc/resolv.conf

Mas talvez seja melhor usar o DNS do Google, que é 8.8.8.8 e 8.8.4.4

5. Editando /etc/network/interfaces DENTRO DO CONTÊINER

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8

    
por 02.01.2017 / 17:31