Come configurare gli indirizzi IP esterni per i guest LXC?


18

Sto esplorando le funzionalità LXC in Ubuntu 12.04 e voglio davvero creare una rete come questa:

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

Voglio solo una rete "piatta" in cui gli ospiti abbiano pieno accesso alla LAN e siano visibili dai client. Sono abituato al collegamento in rete con libvirt / KVM, come descritto qui: http://libvirt.org/formatdomain.html#elementsNICSBridge

Sull'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 per il primo ospite:

# /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

Sembra che 192.168.56.201 sia invisibile al mondo esterno, che non è quello che voglio. Sembra che devo fare una di queste cose:

1) Configurare manualmente il routing sull'host e sul guest

2) Fai qualcosa di speciale ... crea in anticipo interfacce virtuali sull'host e configura gli ospiti per usarle lxc.network.type=phys. Non so se funzionerebbe davvero.

Mi concentro su Ubuntu, ma anche le risposte per RHEL / Fedora sarebbero utili ...


1
Follow-up: ho impostato br0 in modalità promiscua e sembra che stia facendo quello che voglio ora. Immagino che questa sia una pratica standard, ma non è stata trattata in nessuno dei molti tutorial LXC che ho letto. Lascerò questa domanda aperta per un po 'nel caso avessi un feedback ...
twblamer

Ho fatto all'incirca lo stesso (tranne con un po 'più di configurazione manuale): script netup in ogni configurazione lxc per aggiungere veth al bridge (sull'host), configurazione IP manuale in ciascun contenitore, script / interfaccia aggiuntivi in ​​ciascun contenitore da impostare instradamento (tramite inoltro ip4 sull'host). Ma, per quanto vedo, entrambe le soluzioni indicano che il contenitore può impostare il proprio indirizzo IP praticamente su qualsiasi cosa (e anche aggiungere l'interfaccia primaria dell'host a un bridge è leggermente scomodo). Quindi sono anche interessato ad alcuni feedback / soluzioni.
HoverHell,

Risposte:


13

Questo è praticamente giusto, anche se ti manca una linea come questa:

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

Ho un ospite LXC in esecuzione su Debian. Innanzitutto, imposta il bridge host (il modo più semplice), in /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

Nel tuo caso, l'hai chiamato br0e l'ho chiamato wan. Il bridge può essere chiamato come vuoi. Fai in modo che funzioni prima: se fallisce, investiga con (es.)brctl

Quindi la tua configurazione LXC è impostata per unire quel bridge:

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

Come osserva HoverHell, qualcuno con root nel contenitore può cambiare l'indirizzo IP. Sì. È un bridge (noto anche come switch Ethernet). Se vuoi impedirlo, puoi usare le regole del firewall sull'host, almeno nel mio caso, i pacchetti devono passare attraverso l'iptable dell'host.


10
Grazie a tutti. È un po 'triste, ma sono appena tornato a questo, l'ho trovato su Google e ho dimenticato di essere il richiedente originale ...
twblamer,

2
@derobert: non ero sicuro che fosse disponibile allora, ma autoè anche un valore valido per lxc.network.ipv4.gateway, e per quanto ne so , per impostazione predefinita è l'IP del bridge a cui viene connessa l'interfaccia veth.
0xC0000022L

L'interfaccia bridge richiede il proprio IP? Se si wan_phytrova di fronte a Internet, l'IP bridge dovrebbe essere un altro indirizzo IPv4 pubblico valido perché deve trovarsi nella stessa sottorete degli altri indirizzi IPv4 pubblici con cui configurerò i miei ospiti lxc, giusto? Ma sembra abbastanza dispendioso. askubuntu.com/a/884293/394569 suggerisce che la configurazione di un indirizzo bridge non è strettamente richiesta.
Josch

@josch In questo esempio, wan_phy non ha un IP, è invece sul bridge. Dubito che abbia bisogno di un IP, tuttavia, se non si desidera che l '"host" abbia un IP esterno.
derobert,

6

Non sono entrato completamente in LXC,

ma ho installato più contenitori con i propri IP statici in lan che forniscono servizi Internet per alcuni dei miei siti Web ...

Forse questo può aiutare, su ciò che vuoi per il tuo.

Corro più container, in questo modo,

SU HOST MACHINE Ho modificato il file host, aggiungendo ogni contenitore e macchina 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

dopo aver salvato ...

Ancora una volta, sulla macchina host ho impostato network e bridge su:

# /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

sopra la rete c'è il mio router ip, per lan. L' indirizzo (interno) e la trasmissione sono macchine host, ip interni, che in seguito utilizzo un VHOST per l'accesso a Internet, i server Web, ftp, ecc.

PER CONTENITORI LXC 1-4 CONFIGURO CONFIGURANDO COME:

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**

ora Contenitore 1 IP = 192.168.1.101

ripeto per contenitori aggiuntivi per avere il proprio ip statico sulla lan ..

nel contenitore 1-4,

accedi dall'host:

lxc-console -n CONTAINERNAME,

e ho impostato ogni rete di container su statica, eth0 su:

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

OGNI CONTENITORE HA IL PROPRIO IP, (locale) DISPONIBILE SULLA LAN. PUOI SSH OGNI IP LOCALE INDIVIDUALE, PER TESTARE USANDO PUTTY!

Dopodiché sono abbastanza sicuro che dovresti capire come eseguirli via Internet dopo, ad esempio, dal vhost al contenitore ip / load balancer / proxy / ecc.

Forse questa configurazione può essere d'aiuto in ogni caso.


Se si configura IP, gateway ecc. Nella configurazione del contenitore LXC, non è necessario ripeterlo all'interno del contenitore. Invece imposta la ifacestanza su manual(non statico dhcp). up, down, dns-nameserversEcc possono essere ancora utilizzati in Debian ecc
0xC0000022L

1

Non ho ancora giocato con LXC, ma questo articolo dovrebbe aiutarti: configurazione di rete usando bridge ethernet (controlla il Metodo 2).

Per darti qualche suggerimento sulla configurazione (suppongo che tu abbia già correttamente configurato br0):

  1. È necessario creare un paio di dispositivi veth utilizzando ip link add type veth
  2. Il comando precedente ha creato 2 interfacce virtuali: veth0 e veth1
  3. Ora aggiungi l'interfaccia virtuale veth0 al bridge: brctl addif br0 veth0
  4. nella tua shell lxc, digita: ns_exec -nm -- /bin/bash
  5. Ora dobbiamo impostare l'altro virtuale se nello spazio dei nomi di rete della shell lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Ora configurando veth1 nella shell lxc sull'indirizzo IP desiderato (ad es. 192.168.56.201) dovresti essere impostato.

Non lo hai provato affatto? Probabilmente otterrai la taglia, ma la tua risposta non mi aiuta affatto e ho la stessa configurazione di OP.
Jonas G. Drange,

Come posso aiutarti di più? C'è stato un passo nella mia risposta che non ha funzionato o li hai eseguiti e non ha risolto il problema? No, come detto nella mia risposta, LXC è nella mia lista dei desideri da fare, ma non ho ancora iniziato test reali.
Huygens,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.