Como configurar endereços IP externos para convidados LXC?

18

Estou explorando os recursos do LXC no Ubuntu 12.04 e realmente quero configurar uma rede como esta:

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

Eu só quero uma rede "plana" em que os convidados tenham acesso total à rede local e sejam visíveis a partir dos clientes. Estou acostumado a fazer a ponte de rede com libvirt / KVM, conforme descrito aqui: link

No host:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

lxc.conf para o primeiro convidado:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

Parece que 192.168.56.201 é invisível para o mundo exterior, o que não é o que eu quero. Parece que tenho que fazer uma destas coisas:

1) Configure manualmente o roteamento no host e no convidado

2) Faça alguma coisa bem ... crie interfaces virtuais no host com antecedência e configure os convidados para usá-las lxc.network.type=phys . Eu não sei se isso realmente funcionaria.

Estou focado no Ubuntu, mas as respostas para o RHEL / Fedora também seriam úteis ....

    
por twblamer 08.10.2012 / 09:43

3 respostas

13

Isso está certo, embora você esteja perdendo uma linha como essa:

lxc.network.ipv4.gateway = X.X.X.X

Eu tenho um convidado LXC rodando no Debian. Primeiro, você configura a ponte do host (o caminho mais fácil), em /etc/network/interfaces :

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

No seu caso, você chamou de br0 e eu chamei de wan . A ponte pode ser chamada como você quiser. Você começa a trabalhar primeiro - se falhar, investigue com (por exemplo,) brctl

Então sua configuração do LXC está configurada para se juntar a essa ponte:

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

Como o HoverHell observa, alguém com raiz no contêiner pode alterar o endereço IP. Sim. É uma ponte (também conhecida como switch Ethernet). Se você quiser evitar isso, você pode usar regras de firewall no host - pelo menos no meu caso, os pacotes precisam passar pelo iptables do host.

    
por 10.06.2013 / 23:02
6

Eu não entendi totalmente o LXC,

mas eu configurei vários contêineres com seus próprios ip estáticos em lan que fornecem serviços de internet para alguns dos meus sites ...

Talvez isso possa ajudar, no que você deseja para o seu.

Eu rodei vários contêineres, assim,

NO MÁQUINA DE HOSPEDEIROS Editei o arquivo do host, adicionando cada recipiente & Máquina Host:     vi / etc / hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

depois de salvar ...

Novamente, na máquina host, eu defino rede & ponte para:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

acima da rede é o ip do meu roteador, para lan. (interno) endereço & broadcast é uma máquina host, ip interno, que mais tarde eu uso um VHOST para acesso à internet, servidores web, ftp, etc.

PARA RECIPIENTES LXC 1-4 I CONFIGURAÇÃO CONFIGURAÇÃO COMO:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

agora Container 1 IP = 192.168.1.101

repito para contêineres adicionais para ter seu próprio ip estático na rede ..

no contêiner 1-4,

faça login no host:

lxc-console -n CONTAINERNAME,

& Eu defino cada rede de contêineres como static, eth0 para:

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

CADA UM DOS CONTENTORES TEM PRÓPRIO IP, (local) DISPONÍVEL NA REDE. U CAN SSH CADA IP LOCAL INDIVIDUAL, PARA TESTAR USANDO PUTTY!

Depois disso eu tenho certeza que você deve descobrir como executá-los via internet depois, exemplo, vhost para container ip / balanceadores de carga / proxy / etc ..

Talvez essa configuração possa ajudar de qualquer maneira.

    
por 10.06.2013 / 19:39
1

Ainda não joguei com o LXC, mas este artigo deve ajudá-lo: configuração de rede usando pontes ethernet (consulte o Método 2).

Para dar alguma sugestão sobre a configuração (suponho que você já tenha configurado a br0 corretamente):

  1. Você precisa criar um par de dispositivo veth usando ip link add type veth
  2. O comando anterior criou 2 interfaces virtuais: veth0 e veth1
  3. Agora, adicione a interface virtual veth0 à ponte: brctl addif br0 veth0
  4. no seu shell lxc, digite: ns_exec -nm -- /bin/bash
  5. Agora temos que definir o outro virtual se para o namespace de rede do shell lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Agora, configurando veth1 no shell lxc para o endereço IP que você deseja (por exemplo, 192.168.56.201), tudo deve ser definido.
por 11.02.2013 / 21:56