<div dir="ltr"><div>Hey lxc gang,<br><br>Here's the short version of my problem.<br><br>I have two LXC containers: lxc-proxy and lxc-app. I want to put lxc-proxy on br0 with a (static) public IP address and on lxcbr0 (with a private IP), and I want to put lxc-server on lxcbr0. Then I want to run Apache on lxc-proxy as a proxy server to relay requests to a web application on lxc-app.<br><br>I'm tinkering with both the lxc container configuration on the host and the network interface configuration in the proxy container and I can get different parts of this setup working at different times, but unfortunately I can't seem to get everything working at once.<br><br><br>-----<br><br><br>Now here's the longer version.<br><br>I'm a junior systems administrator working in a (very) small department with a mostly-inherited environment; I'm new to Linux containers.<br><br>I have a server running Ubuntu 12.04.5 LTS (Precise Pangolin) with kernel 3.2.0-24-generic. I want to set up an LXC container to function as a proxy web server with a public IP address and then have separate containers for individual web applications on the private network. My thinking is that the proxy server will be attached to the public interface as well as the lxc virtual bridge (i.e. br0 and lxcbr0) and that the other containers will only be attached to the virtual network (i.e. lxcbr0 only). If someone has any advice regarding better ways to achieve this kind of separation then I'd be interested in hearing that as well, but I'm primarily interested in understanding what mistakes I'm making in trying to implement this solution.<br><br>There are two configuration files that I'm tinkering with. One is the lxc configuration file (on the host) for the proxy server:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace">host:/var/lib/lxc/proxy-server/config</span><br></div><br>and the other is the network interface configuration file (in the container):<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace">proxy-server:/etc/network/interfaces</span><br></div><br>or equivalently:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace">host:/var/lib/lxc/proxy-server/rootfs/etc/network/interfaces</span><br></div><br>In order to put the proxy server on the public network I initially had the following two configurations:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># lxc-proxy:/etc/network/interfaces - version 1<br><br># The loopback network interface<br>auto lo<br>iface lo inet loopback<br><br># The public network interface (i.e. br0 on the host)<br>auto eth0<br>iface eth0 inet static<br>    address 1.2.3.4<br>    netmask 255.255.255.224<br>    network 1.2.3.0<br>    broadcast 1.2.3.31<br>    gateway 1.2.3.1<br>    dns-nameservers 5.6.7.8 9.10.11.12<br>    dns-search <a href="http://some.domain.com" target="_blank">some.domain.com</a></span><br></div><br>and:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># host:/var/lib/lxc/lxc-proxy/config - version 1<br><br>lxc.network.type = veth<br>lxc.network.link = br0<br><a href="http://lxc.network.name" target="_blank">lxc.network.name</a> = eth0<br><br>[...]<br></span></div><br>This seems to work, in that I can access the proxy server at its public address (e.g. 1.2.3.4) both on the local network and from elsewhere on the internet. Then I try to add the virtual interface as well; so I have:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># lxc-proxy:/etc/network/interfaces - version 2<br><br># The loopback network interface<br>auto lo<br>iface lo inet loopback<br><br># The public network interface (i.e. br0 on the host)<br>auto eth0<br>iface eth0 inet static<br>    address 1.2.3.4<br>    netmask 255.255.255.224<br>    network 1.2.3.0<br>    broadcast 1.2.3.31<br>    gateway 1.2.3.1<br>    dns-nameservers 5.6.7.8 9.10.11.12<br>    dns-search <a href="http://some.domain.com" target="_blank">some.domain.com</a><br><br># The virtual network interface (i.e. lxcbr0 on the host)<br>auto eth1<br>iface eth1 inet static<br>    address 10.0.3.2<br>    netmask 255.255.255.0<br>    network 10.0.3.255<br>    broadcast 10.0.3.255<br>    gateway 10.0.3.1<br>    dns-nameservers 5.6.7.8 9.10.11.12<br>    dns-search <a href="http://some.domain.com" target="_blank">some.domain.com</a></span><br></div><br>and:<br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># host:/var/lib/lxc/lxc-proxy/config - version 2<br><br># The public network interface<br>lxc.network.type=veth<br>lxc.network.link=br0<br><a href="http://lxc.network.name" target="_blank">lxc.network.name</a> = eth0<br><br># The virtual network interface<br>lxc.network.type=veth<br>lxc.network.link=lxcbr0<br><a href="http://lxc.network.name" target="_blank">lxc.network.name</a> = eth1<br><br>[...]</span><br></div><br>Unfortunately with this configuration I can't even access the lxc-proxy console (i.e. sudo lxc-console -n lxc-proxy); I get a blank screen.<br><br>After a little bit of web-searching I found some blog posts that suggest avoiding the local /etc/network/interfaces files in the containers, and performing all of the network configuration inside of the lxc configuration files. My next iteration looks like this:<br><br><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># lxc-proxy:/etc/network/interfaces - version 3<br><br># The loopback network interface<br>auto lo<br>iface lo inet loopback</span><br></div><br></div>and:<br><div><br><div style="margin-left:40px"><span style="font-family:monospace,monospace"># host:/var/lib/lxc/lxc-proxy/config - version 3<br><br># The public network interface<br>lxc.network.type=veth<br>lxc.network.link=br0<br>lxc.network.ipv4=<a href="http://1.2.3.4/27" target="_blank">1.2.3.4/27</a> 1.2.3.31<br><a href="http://lxc.network.name" target="_blank">lxc.network.name</a> = eth0<br>lxc.network.flags=up<br><br># The virtual network interface<br>lxc.network.type=veth<br>lxc.network.link=lxcbr0<br>lxc.network.ipv4=<a href="http://10.0.3.2/24" target="_blank">10.0.3.2/24</a><br><a href="http://lxc.network.name" target="_blank">lxc.network.name</a> = eth1<br>lxc.network.flags=up<br><br>[...]</span><br></div><br>With this configuration I'm able to access the lxc-proxy console and everything appears to be working on the local network; lxc-proxy is accessible via its private and public ip addresses and the Apache proxy server on lxc-proxy is able to communicate with the application running on lxc-app. However lxc-proxy is not publicly accessible by its public ip.<br><br>At this point I'm pretty thoroughly confused and I figure this is a good place to stop and ask for advice. I'm not sure why my second attempt broke the lxc console or why my third attempt isn't making the container publically accessible. Any insight would be greatly appreciated.<br><br>Thank you for your time!<br><br>Cheers,<br>Itamar</div></div>