Configuração IP externa do LXC para contêineres

2

Eu alugo um servidor dedicado e quero usar o LXC em vez do KVM. Eu quero comprar IPs para cada recipiente. Por enquanto eu tenho dois IPs externos:

  • 193.X.X.30 / 32
  • 213.X.X.31 / 32

Eu prefiro uma solução de roteamento em vez de NAT.

Minha última tentativa é assim:

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [HOST]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  |    vethXXXX     |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

Configuração de rede no meu host:

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

Configuração do meu contêiner:

lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 213.X.X.31/24
lxc.network.ipv4.gateway = 213.X.X.1

Configuração da minha rede de contêineres:

auto eth0
iface eth0 inet static
   address   213.X.X.31
   netmask   255.255.255.0
   gateway   213.X.X.1

   dns-nameservers 8.8.8.8
   dns-nameservers 8.8.4.4

Não consegui conectar os contêineres diretamente. Qual deve ser a configuração / topologia correta para que os contêineres hospedem com sucesso serviços como Web / Mail / DNS.

    
por Fırat KÜÇÜK 30.04.2015 / 09:36

1 resposta

1

Eu não sei se este é o caminho certo ou a melhor solução, mas funciona sem o NAT. A topologia da rede é a mesma. Temos um NIC físico (em1) e vários IP para cada contêiner. Talvez mais tarde eu possa comprar uma sub-rede. Mas por enquanto vou comprar 4 - 5 IPs.

              -------------------
              |     INTERNET    |
              -------------------
                       |
                       V
----------------------------------------------
|  -------------------      -------  [HOST]  |
|  | br0: 193.X.X.30 | <--- | em1 |          |
|  -------------------      -------          |
|           |                                |
|           V                                |
|  -------------------                       |
|  | vethMyContainer |                       |
|  -------------------                       |
|           |                                |
|           V                                |
|  --------------------------------------    |
|  |  --------------------  [CONTAINER] |    |
|  |  | eth0: 213.X.X.31 |              |    |
|  |  --------------------              |    |
|  |                                    |    |
|  --------------------------------------    |
----------------------------------------------

Esta é a minha configuração de rede no host (/ etc / network / interfaces):

auto lo
iface lo inet loopback    

auto br0
iface br0 inet static
  bridge_ports    em1
  bridge_fd       0
  address         193.X.X.30
  netmask         255.255.255.0
  gateway         193.X.X.1
  dns-nameservers 8.8.8.8 8.8.4.4

Arquivo de configuração para o container (/ var / lib / lxc / my-container / config):

lxc.include                      = /usr/share/lxc/config/ubuntu.common.conf
lxc.rootfs                       = /var/lib/lxc/my-container/rootfs
lxc.utsname                      = my-container
lxc.arch                         = amd64
lxc.network.type                 = veth
lxc.network.veth.pair            = vethMyContainer
lxc.network.link                 = br0
lxc.network.ipv4                 = 213.X.X.31/32
lxc.network.ipv4.gateway         = 193.X.X.1
lxc.network.script.up            = /var/lib/lxc/my-container/script-up.sh
lxc.network.flags                = up
lxc.network.hwaddr               = 00:16:3e:aa:bb:cc
lxc.cgroup.memory.limit_in_bytes = 2048M

Devemos nomear nosso dispositivo veth. Porque nós vamos usar o nome no arquivo de script. Os pacotes não podem ser roteados automaticamente do dispositivo br0 para veth. Então eu adiciono uma regra de roteamento e minha tabela ARP não pode atualizar automaticamente. Então eu adicionei um registro ARP estático.

O arquivo de script (/var/lib/lxc/my-container/script-up.sh):

#!/bin/bash

route del 213.X.X.31 br0
route add 213.X.X.31 br0

A configuração de rede no meu contêiner:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

Assim, posso fazer ping diretamente para o meu contêiner sem usar o NAT. Vou atualizar a resposta se eu encontrar uma maneira de não usar os comandos arp e route.

    
por 30.04.2015 / 12:10