Como configurar endereços IP externos para convidados LXC?

18

Estou explorando os recursos 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", na qual os convidados tenham acesso total à LAN e sejam visíveis a partir dos clientes. Estou acostumado a criar uma ponte de rede com o libvirt / KVM, conforme descrito aqui: http://libvirt.org/formatdomain.html#elementsNICSBridge

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 eu tenho que fazer uma destas coisas:

1) Configure manualmente o roteamento no host e no convidado

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

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

twblamer
fonte
11
Acompanhamento: defino br0 no modo promíscuo e parece estar fazendo o que quero agora. Acho que essa é uma prática padrão, mas não foi abordada em nenhum dos muitos tutoriais de LXC que li. Vou deixar essa questão em aberto por um tempo no caso de eu obter qualquer feedback ...
twblamer
Fiz aproximadamente o mesmo (exceto com um pouco mais de configuração manual): script netup em cada configuração do lxc para adicionar veth à ponte (no host), configuração manual do IP em cada contêiner, script / interface adicionais em cada contêiner a ser configurado roteamento (via encaminhamento ip4 no host). Mas, até onde eu vejo, ambas as soluções significam que o contêiner pode definir o próprio endereço IP para praticamente qualquer coisa (e também a adição da interface principal do host a uma ponte é um pouco inconveniente). Então, eu também estou interessado em algum feedback / solução.
HoverHell 28/10/12

Respostas:

13

Isso está certo - embora você esteja perdendo uma linha como esta:

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

Eu tenho um convidado LXC rodando no Debian. Primeiro, você configura a ponte do host (a maneira 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 br0e eu o chamei wan. A ponte pode ser chamada como você quiser. Você trabalha primeiro - se falhar, investigue com (por exemplo,)brctl

Em seguida, sua configuração do LXC é configurada para ingressar nessa 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 observa o HoverHell, alguém com raiz no contêiner pode alterar o endereço IP. Sim. É uma ponte (também conhecida como switch Ethernet). Se você deseja impedir isso, pode usar regras de firewall no host - pelo menos no meu caso, os pacotes precisam passar pelas tabelas de ip do host.

derobert
fonte
10
Obrigado a todos. É meio triste, mas eu acabei de voltar a este, achou esta através do google e esqueceu que eu era o autor da questão originais ...
twblamer
2
@derobert: não tenho certeza se isso estava disponível na época, mas autotambém é um valor válido lxc.network.ipv4.gatewaye, no meu entender, o padrão é o IP da ponte à qual a interface veth é conectada.
0xC0000022L
A interface da ponte requer seu próprio IP? Se wan_phyestiver voltado para a Internet, o IP da ponte teria que ser outro endereço IPv4 público válido, porque ele deve estar na mesma sub-rede que os outros endereços IPv4 públicos com os quais configurarei meus convidados lxc, certo? Mas isso parece um grande desperdício. askubuntu.com/a/884293/394569 sugere que a configuração de um endereço de ponte não é estritamente necessária.
Josch
@josch Nesse exemplo, wan_phy não tem um IP, está na ponte. Duvido que seja necessário um IP, se você não quiser que o "host" tenha um IP externo.
derobert 6/07
6

Eu não entrei totalmente no LXC,

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

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

Eu corro vários contêineres, assim,

NA MÁQUINA DE HOSPEDAGEM, editei o arquivo do host, adicionando cada contêiner e 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, defino rede e 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 está o meu roteador ip, para lan. endereço (interno) e transmissão é máquina host, ip interno, que mais tarde uso um VHOST para acesso à Internet, servidores da web, ftp, etc.

PARA RECIPIENTES LXC 1-4, CONFIGURAR CONFIGURAÇÃO ASSIM:

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 IP do contêiner 1 = 192.168.1.101

repito para contêineres adicionais terem seu próprio IP estático na LAN ..

no contêiner 1-4,

efetue 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 LAN. U PODE SSH CADA IP LOCAL INDIVIDUAL, PARA TESTAR USANDO PUTTY!

Depois disso, tenho certeza de que você deve descobrir como executá-los via internet depois, por exemplo, do vhost para o contêiner ip / load balancers / proxy / etc.

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

M1-Serverz
fonte
Se você configurar o IP e o gateway etc na configuração do contêiner LXC, não será necessário repeti-lo dentro do contêiner. Em vez disso, defina a ifaceestrofe como manual(not staticor dhcp). up, down, dns-nameserversEtc ainda pode ser utilizado no Debian etc
0xC0000022L
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 lhe dar uma dica sobre a configuração (presumo que o br0 já esteja configurado corretamente):

  1. Você precisa criar um par de dispositivos 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 no namespace da 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 desejado (por exemplo, 192.168.56.201), você deve estar pronto.
Huygens
fonte
Você ainda não testou isso? Você provavelmente receberá a recompensa, mas sua resposta não me ajuda em nada e eu tenho exatamente a mesma configuração do OP.
Jonas G. Drange
Como posso ajudá-lo mais? Houve um passo na minha resposta que não funcionou ou você os executou e não resolveu o problema? Não, como dito na minha resposta, o LXC está na minha lista de desejos de coisas para fazer, mas ainda não comecei os testes reais.
Huygens