O contêiner LXC obtém dois endereços IP atribuídos a ele

2

Estou brincando com o LXC em minha estação de trabalho Arch Linux como uma experiência de aprendizado. Estou seguindo o guia na página do LXC no Archwiki e configurando um ip estático para o contêiner. É assim que minha configuração de rede é:

/etc/netctl/lxcbridge
---------------------
Description="LXC Bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=(enp1s0)
IP=static
Address=('192.168.0.20/24')
Gateway='192.168.0.1'
DNS=('192.168.0.1')

E a configuração do contêiner:

/var/lib/lxc/testcontainer/config
---------------------------------
lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 192.168.0.198/24

No entanto, de acordo com lxc-ls -f , é dado um endereço IP extra.

NAME          STATE   AUTOSTART GROUPS IPV4                         IPV6
testcontainer RUNNING 0         -      192.168.0.198, 192.168.0.220 -

Eu quero apenas 192.168.0.198 . Não sei por que está recebendo o segundo atribuído a ele.

    
por Kalq 07.06.2016 / 07:35

1 resposta

1

Então, depois de um pouco mais de pesquisa, determinei por que isso está acontecendo. Estou usando os modelos padrão do Ubuntu e do Debian para criar os contêineres e sua rede está configurada para usar o DHCP para solicitar um IP do roteador. Portanto, inicialmente, o IP estático é definido usando o lxc.container.config e, quando o contêiner inicia, ele consulta o roteador (ou qualquer servidor DHCP que você tenha) para um IP secundário que é atribuído a ele.

A maneira mais lógica de parar isso provavelmente atribuirá apenas o ip estático dentro do contêiner. Então, em modelos baseados em Debian, edite /etc/network/interfaces :

auto etho0
iface etho0 inet static
    address 192.168.0.15
    netmask 255.255.255.0
    gateway 192.168.0.1

E, em seguida, remova a linha ipv4 da configuração lxc /var/lib/lxc/testcontainer/config :

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

Outro método é deixar o host configurar o ip mantendo a linha ipv4 em /var/lib/lxc/testcontainer/config e informar explicitamente ao contêiner para não tocar na interface definindo-a como manual:

auto eth0
iface eth0 inet manual

Aparentemente, há alguns problemas com este segundo método se o host for suspenso e depois retomado. Provavelmente, é melhor usar o primeiro método.

    
por 09.06.2016 / 18:28