[lxc-users] LXD containers lose outbound network

ronkaluta rkaluta at gmail.com
Mon Jun 27 13:02:14 UTC 2016


Please forgive the long-winded explanation but I think better to be 
explicit rather than leave people guessing.
I have been using LXD containers ever since its birth and prefer it to 
LXC containers (my personal preference.)
The ease of use and migration between hosts is a definite plus.
I have seen people fighting with external facing containers for awhile 
and although I do not profess to know everything about this issue, I 
have found something that consistently works for me.

1- I use mainly defaults during system installation.
2- generally use default or bridge profiles.
3- Modify as per below

Lately I specifically notice that david.andel at bli.uzh.ch is having 
trouble with Internet facing containers which I had for awhile.
The issue seems to have cured itself by following the sequence below.

I hope this helps someone.
#----------------------------------------
#----------------------------------------
I have noticed that on occasion the profile gets mangled upon "lxc copy" 
of or "lxc init" of a new container.
Therefore I have set up a process whereby a standard procedure is 
followed to delete all interfaces and reinstall.
The process is below #====~
SO FOR ALL INTERNET FACING CONTAINERS I USE "bridge" ONLY
#----------------------------------------
#----------------------------------------
This is my setup
:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
#----------------------------------------
:~# dpkg -l | grep lxc
ii  liblxc1              2.0.0-0ubuntu2     amd64   Linux Containers 
userspace tools (library)
ii  lxc                  2.0.0-0ubuntu2     all     Transitional package 
for lxc1
ii  lxc-common           2.0.0-0ubuntu2     amd64   Linux Containers 
userspace tools (common tools)
ii  lxc-templates        2.0.0-0ubuntu2     amd64   Linux Containers 
userspace tools (templates)
ii  lxc1                 2.0.0-0ubuntu2     amd64   Linux Containers 
userspace tools
ii  lxcfs                2.0.0-0ubuntu2.1   amd64   FUSE based 
filesystem for LXC
ii  python3-lxc          2.0.0-0ubuntu2     amd64   Linux Containers 
userspace tools (Python 3.x bindings)
:~# dpkg -l | grep lxd
ii  lxd                  2.0.2-0ubuntu1~16.04.1 amd64   Container 
hypervisor based on LXC - daemon
ii  lxd-client           2.0.2-0ubuntu1~16.04.1 amd64   Container 
hypervisor based on LXC - client
#----------------------------------------
/etc/default/lxd-bridge   # I generally use defaults
#----------------------
# WARNING: This file is generated by a debconf template!
# It is recommended to update it by using "dpkg-reconfigure -p medium lxd"
etc...
#----------------------------------------
egrep -v '(^#|^$)' /etc/default/lxd-bridge
#--------------------
USE_LXD_BRIDGE="true"
LXD_BRIDGE="lxdbr0"
UPDATE_PROFILE="true"
LXD_CONFILE=""
LXD_DOMAIN="lxd"
LXD_IPV4_ADDR=""
LXD_IPV4_NETMASK=""
LXD_IPV4_NETWORK=""
LXD_IPV4_DHCP_RANGE=""
LXD_IPV4_DHCP_MAX=""
LXD_IPV4_NAT="true"
LXD_IPV6_ADDR=""
LXD_IPV6_MASK=""
LXD_IPV6_NETWORK=""
LXD_IPV6_NAT="false"
LXD_IPV6_PROXY="true"
#----------------------------------------
One difference between this and david.andel at bli.uzh.ch profile is the 
last line which I don't use anyway.
All others are default settings from "dpkg-reconfigure -p medium lxd"
#----------------------------------------
#----------------------------------------
IF INTERNET ACCESS IS DESIRED
#----------------------------------------
lxc copy container1 container2
lxc profile create bridge
lxc profile edit bridge
lxc profile apply container2 bridge
#----------------------------------
###
### On external/internet access containers I use "bridge" ONLY
### "default" is not used
###
### On internal access containers that need a SPECIFIC ip address.
### I use "default,bridge"
### and specify either eth1 or eth2
### or none if specific ip address not desired.
###
### No matter what configuration I use
### eth0 is always parented by lxdbr0
### eth1 is always parented by br0
### eth2 is always parented by br1
#----------------------------------------
lxc profile edit bridge
#----------------------------------------
name: bridge
config:
   security.nesting: "true"
   security.privileged: "true"
description: ""
devices:
     eth1:               # the container nic
         nictype: bridged
         parent: br0     # the host nic
         type: nic
     eth2:               # the container nic
         nictype: bridged
         parent: br1     # the host nic
         type: nic
#----------------------------------------
lxc profile edit default
#----------------------------------------
name: default
config: {}
description: Default LXD profile
devices:
   eth0:
     name: eth0
     nictype: bridged
     parent: lxdbr0
     type: nic
#========================================
#========================================
#========================================
# ON THE SERVER
# These are the commands I use to achieve the above results
# As I mentioned above the sequence sometimes has to be repeated a 
couple of times in order to succeed.
# Especially lxc config edit ${CONTAINER}
#
# If at first you don't succeed,
# lxc stop ${CONTAINER}
# and repeat the sequence
#
# Success is shown by lxc start ${CONTAINER} resulting in ...
# lxc start ${CONTAINER}
# "lxc list" showing desired ip addresses.
#----------------------------------------
#!/bin/bash  # or copy and paste the following lines directly into shell 
prompt.
#----------
CONTAINER=x2go1248    # or whatever you desired container name
lxc config device remove ${CONTAINER} eth0 && \
lxc config device remove ${CONTAINER} eth1 && \
lxc config device remove ${CONTAINER} eth2 && \
#
lxc config device add ${CONTAINER} eth0 nic nictype=bridged 
parent=lxdbr0 && \
lxc config device add ${CONTAINER} eth1 nic nictype=bridged parent=br0 && \
lxc config device add ${CONTAINER} eth2 nic nictype=bridged parent=br1 && \
#
lxc profile apply ${CONTAINER} bridge   # or "default,bridge"
#------------------------------------
#-- These commands usually done separately
lxc config edit ${CONTAINER}
#
lxc start ${CONTAINER}
#========================================
#========================================
#========================================
# Modify these commands to fit your requirements
#------------------------------------------------
##### ON THE SERVER
##### WARNING #####
##### THIS WILL OVERWRITE 
/var/lib/lxd/containers/${CONTAINER}/rootfs/etc/network/interfaces #####
#-----------------
CONTAINER=x2go1248    # or whatever you desired container name
#-----------------
cat <<EOF > 
/var/lib/lxd/containers/${CONTAINER}/rootfs/etc/network/interfaces
# The primary network interface
#auto eth0                 # Not needed for external/internet access.
#iface eth0 inet dhcp      # Not needed for external/internet access.
#
auto eth1                  # This is my external facing LAN
iface eth1 inet static
     address 192.168.2.248/16
     gateway 192.168.2.1
     dns-nameservers 208.67.220.220 8.8.8.8
#
auto eth2                  # This is my internal LAN
iface eth2 inet static
     address 172.31.30.248/12
EOF
#========================================


_______________________________________________
lxc-users mailing list
lxc-users at lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-users


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxcontainers.org/pipermail/lxc-users/attachments/20160627/03cf438b/attachment.html>


More information about the lxc-users mailing list