[lxc-users] Configuring LXC containers to use a host bridge under CentOS 7

Peter Steele pwsteele at gmail.com
Fri Aug 28 22:11:51 UTC 2015


On 08/28/2015 02:08 PM, Serge Hallyn wrote:
> Can you show the host and container network details and container
> xml for your libvirt-lxc setup?  If machines A and B are on the
> same LAN, with containers on A, are you saying that B can ping
> the containers on A?

Yes, in our libvirt-LXC setup, containers on machine A can ping 
containers on machine B. They all have static IPs taken from the same 
subnet. This was easy to setup in libvirt-LXC. In fact, I just used the 
default behavior provided by libvirt.

Each server has a br0 bridge interface with a static IP assigned to it. 
This is independent of anything to do with libvirt per se, the bridge is 
setup using a standard CentOS 7 configuration file. For example, one of 
my servers has a ifcfg-br0 file that looks like this:

# cat /etc/sysconfig/network-scripts/ifcfg-br0:
DEVICE=br0
NAME=br0
BOOTPROTO=none
ONBOOT=yes
TYPE=Bridge
USERCTL=no
NM_CONTROLLED=no
IPADDR=172.16.110.202
NETMASK=255.255.0.0
GATEWAY=172.16.0.1
DOMAIN=local.localdomain
DEFROUTE=yes

The containers themselves are created using a command similar to this:

virt-install --connect=lxc:///  \
                                     --os-variant=rhel7 \
                                     --network bridge=br0,mac=RANDOM \
                                     --name=test1 \
                                     --vcpus=2 \
                                     --ram=4096 \
                                     --container \
                                     --nographics \
                                     --noreboot \
                                     --noautoconsole \
                                     --wait=60  \
                                     --filesystem /lxc/test1/rootfs/,/

The xml that this generates for the containers is pretty basic:

     <interface type='bridge'>
       <mac address='00:16:3e:e1:54:36'/>
       <source bridge='br0'/>
     </interface>

The container ends up with an eth0 interface with the specified mac 
address, bridged through br0. The br0 interface itself is not visible in 
the container, only lo and eth0.

I did not have to configure anything specifically on the server beyond 
the ifcfg-br0 file. I relied on the default behavior and configuration 
provided by libvirt-LXC. There *is* a network related configuration for 
libvirt, but it's only used if a container uses NAT instead of bridging:

# virsh net-dumpxml default
<network>
   <name>default</name>
   <uuid>43852829-3a0e-4b27-a365-72e48037020f</uuid>
   <forward mode='nat'>
     <nat>
       <port start='1024' end='65535'/>
     </nat>
   </forward>
   <bridge name='virbr0' stp='on' delay='0'/>
   <mac address='52:54:00:f9:cd:a3'/>
   <ip address='192.168.122.1' netmask='255.255.255.0'>
     <dhcp>
       <range start='192.168.122.2' end='192.168.122.254'/>
     </dhcp>
   </ip>
</network>

I don't think the info in this xml plays any role in containers 
configured with bridged networking.

The command I use to create my LXC containers looks like this:

# lxc-create -t /bin/true -n test1 --dir=/lxc/test1/rootfs

I populate the rootfs manually using the same template that I use with 
libvirt-LXC, and subsequently customize the container with its own 
ifcfg-eth0 file, /etc/hosts, etc.

I'm clearly missing a configuration step that's needed to setup LXC 
containers with bridged networking like I have with libvirt -LXC...

Peter





More information about the lxc-users mailing list