Sto esplorando le funzionalità LXC in Ubuntu 12.04 e voglio davvero configurare 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 clienti. Sono abituato a collegare 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 io debba fare una di queste cose:
1) Imposta manualmente il routing sull'host e sul guest
2) Fai qualcosa di strano... crea in anticipo interfacce virtuali sull'host e configura gli ospiti per usarle lxc.network.type=phys
. Non so se funzionerebbe davvero.
Sono concentrato su Ubuntu, ma anche le risposte per RHEL/Fedora sarebbero utili….
Risposta accettata:
Questo è praticamente giusto, anche se ti manca una riga come questa:
lxc.network.ipv4.gateway = X.X.X.X
Ho un ospite LXC in esecuzione su Debian. Per prima cosa, configura il bridge host (in modo 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 br0
, e l'ho chiamato wan
. Il ponte può essere chiamato come vuoi. Prima fai in modo che funzioni:se fallisce, indaga con (ad es.) brctl
Quindi la tua configurazione LXC è impostata per unirsi a 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ò modificare l'indirizzo IP. Sì. È un bridge (noto anche come switch Ethernet). Se vuoi impedirlo, puoi utilizzare le regole del firewall sull'host, almeno nel mio caso, i pacchetti devono passare attraverso iptables dell'host.