<div dir="ltr">On Wed, Jan 21, 2015 at 7:09 PM, scrumpyjack <span dir="ltr"><<a href="mailto:scrumpyjack@me.com" target="_blank">scrumpyjack@me.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Yes, i want to give a /32 to a container.<br><br>If i stick to<br><br>lxc.network.type = macvlan<br>lxc.network.flags = up<br>lxc.network.link = eth0<br><a href="http://lxc.network.name/" target="_blank">lxc.network.name</a> = eth1<br>lxc.network.ipv4 = 21.45.463.23/32 (fake IP, obvs)<br>lxc.network.ipv4.gateway = 21.45.463.23<br><br>would you expect that to work?<br><br></blockquote><div><br></div><div><br></div><div>Nope. </div><div><br></div><div>Your main mistake is that you thought since the /32 IP works in the host (e.g. when used as "eth0:1"), it would automagically work inside the container, the host would simply "know" where to route the packet. It doesn't work that way. Network-wise, the host and the container are two separate entities, which might have a private link (i.e. thru a private bridge or something).</div><div><br></div><div>The generic explanation of a working setup can be "stolen" from xen wiki: <a href="http://wiki.xen.org/wiki/Vif-route">http://wiki.xen.org/wiki/Vif-route</a></div><div>Basically they use a combination of /32, specific route, and proxy arp. I use a similar but slightly different method.</div><div><br></div><div>This is on ubuntu server. The host has <a href="http://100.0.0.10/24">100.0.0.10/24</a>, router is on 100.0.0.1, the container is on 100.0.0.11 (fake IPs, of course).</div><div>The host communicates with the container thru a PRIVATE bridge with IP 192.168.124.1 (note that this IP doesn't even have to be in the same network as host and container's IP)</div><div><br></div><div>Relevant part of host's /etc/network/interfaces</div><div>###<br></div><div><div>auto eth0</div><div>iface eth0 inet static</div><div><span class="" style="white-space:pre">    </span>address 100.0.0.10</div><div><span class="" style="white-space:pre"> </span>netmask 255.255.255.0</div><div><span class="" style="white-space:pre">      </span>gateway 100.0.0.1<br></div><div><span class="" style="white-space:pre">        # this part functions similar as proxy arp, force eth0 to accepts packets</span></div><div><span class="" style="white-space:pre">  # destined for the container's IP using static arp</span><br></div><div><span class="" style="white-space:pre">   </span>up arp -i eth0 -Ds 100.0.0.11 eth0 pub || true<br></div><div><br></div><div># this is an internal bridge used to connect the host to the container</div><div>auto br0</div><div>iface br0 inet manual</div><div><span class="" style="white-space:pre">        </span>bridge_ports none</div><div><span class="" style="white-space:pre">  </span>bridge_maxwait 0</div><div><span class="" style="white-space:pre">   </span>bridge_stp off</div><div><span class="" style="white-space:pre">     </span>bridge_fd 0</div><div><span class="" style="white-space:pre">        </span># add specific route for the container IP</div><div><span class="" style="white-space:pre">  </span>up ip route add <a href="http://100.0.0.11/32">100.0.0.11/32</a> dev br0 || true</div><div>###<br></div></div><div><br></div><div><br></div><div>Relevant part of container config. Note that this only sets the bridge and persistent vif mac & name.</div><div><div>###<br></div><div><div>lxc.network.type=veth</div><div>lxc.network.link=br0</div><div>lxc.network.veth.pair=veth-c1-0</div><div>lxc.network.flags=up</div><div>lxc.network.hwaddr = 00:16:3E:FD:46:25</div><div>###<br></div></div><div><br></div><div><br></div><div><div>Relevant part of container's /etc/network/interfaces</div><div>###<br></div><div></div></div><div><div>auto eth0</div><div>iface eth0 inet static</div><div>        address 100.0.0.11</div><div>        netmask 255.255.255.255</div><div><div><div><span class="" style="white-space:pre">   </span># force route for host's br0</div></div></div><div><span class="" style="white-space:pre">   </span>up ip route add 192.168.124.1 dev eth0<br></div><div><span class="" style="white-space:pre">   </span># ... and use it for default route</div><div><span class="" style="white-space:pre"> </span>up ip route add default via 192.168.124.1</div><div>###<br></div><div><br></div><div><br></div><div>Relevant output of several commands in the host</div><div><div>###<br></div></div><div><div># ip route</div><div>...</div><div>default via 100.0.0.1 dev eth0 </div><div><a href="http://100.0.0.0/24">100.0.0.0/24</a> dev eth0  proto kernel  scope link  src 100.0.0.10 </div><div>100.0.0.11 dev br0  scope link </div></div><div><div>...</div></div><div><br></div><div><div># arp -n </div><div>Address                  HWtype  HWaddress           Flags Mask            Iface</div><div>...</div><div>100.0.0.11            ether   00:16:3e:fd:46:25   C                     br0</div><div>100.0.0.11            *       <from_interface>    MP                    eth0</div></div><div><div>...</div></div><div><br></div><div><div># brctl show</div><div>bridge name<span class="" style="white-space:pre">  </span>bridge id<span class="" style="white-space:pre">         </span>STP enabled<span class="" style="white-space:pre">       </span>interfaces<br></div><div>...</div><div>br0<span class="" style="white-space:pre">          </span>8000.feb01cb4ee91<span class="" style="white-space:pre"> </span>no<span class="" style="white-space:pre">                </span>veth-c1-0</div><div><div>...</div></div></div><div>###<br></div><div><br></div><div>-- </div><div>Fajar</div><div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><br></div></div></div></div>