<p dir="ltr">But if the subnets are on the same VLAN it should work. That's what that patch is designed for. There is (currently) an assumption in Neutron that subnets in the same network are on the same L2 segment. So if a VM wants to communicate with a VM in another subnet on the same network, it can cut out the router and use the direct route by ARPing for the VM on its own. </p>
<p dir="ltr">The default is for VMs to only get an IP from one of the subnets on a multi subnet network. So if I understand your topology, it exactly matches what that patch intended to address (eliminate the hairpinning via the router for same network communication). </p>
<p dir="ltr">Does your router do something special that skipping it breaks things? </p>
<div class="gmail_quote">On Apr 22, 2016 05:19, "Remco" <<a href="mailto:remconl87@gmail.com">remconl87@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hi Neil,<br><br></div>Well that explains... <br></div>My networking setup does not conform to the commit message in such a way that there are multiple subnets on the network, however the instance does not have an IP address in all of them but only in one.<br></div><div>I guess the only option for now is to patch this code, as a workaround.The reason for having multiple subnets on the same L2 segment is a migration scenario. So I guess I'll just patch this as the situation will disappear in the near future as normally subnets are separated by L2 domains (vlans) in our setup.<br><br></div><div>Thanks!<br></div><div>Remco<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 22, 2016 at 1:16 PM, Neil Jerram <span dir="ltr"><<a href="mailto:Neil.Jerram@metaswitch.com" target="_blank">Neil.Jerram@metaswitch.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On 22/04/16 12:03, Remco wrote:<br>
> Hi Neil,<br>
><br>
> Thanks.<br>
> The ip route output is as following, i guess the 0.0.0.0 gateway is only<br>
> listed by cloud-init:<br>
><br>
> debian@instance:/$ ip route<br>
> default via 192.168.10.1 dev eth0<br>
</span>> <a href="http://192.168.10.0/24" rel="noreferrer" target="_blank">192.168.10.0/24</a> <<a href="http://192.168.10.0/24" rel="noreferrer" target="_blank">http://192.168.10.0/24</a>> dev eth0  scope link<br>
<span>> 169.254.169.254 via 192.168.10.1 dev eth0<br>
</span>> <a href="http://192.168.11.0/24" rel="noreferrer" target="_blank">192.168.11.0/24</a> <<a href="http://192.168.11.0/24" rel="noreferrer" target="_blank">http://192.168.11.0/24</a>> dev eth0  scope link<br>
> <a href="http://192.168.12.0/24" rel="noreferrer" target="_blank">192.168.12.0/24</a> <<a href="http://192.168.12.0/24" rel="noreferrer" target="_blank">http://192.168.12.0/24</a>> dev eth0  proto kernel  scope<br>
<span>> link  src 192.168.10.2<br>
><br>
> (ip addresses are altered for security reasons).<br>
<br>
</span>Thanks for these clarifications.<br>
<span><br>
> I'm not sure what creates these routes. I have two suspects: cloud-init<br>
> and DHCP. As the same issue is observed on instances without cloud-init<br>
> this rules out cloud-init.<br>
> We see the same issue on both Windows and Linux instances.<br>
<br>
</span>OK, I think you're seeing the effect of this DHCP agent code, from<br>
neutron/agent/linux/dhcp.py:<br>
<br>
                 host_routes.extend(["%s,0.0.0.0" % (s.cidr) for s in<br>
                                     self.network.subnets<br>
                                     if (s.ip_version == 4 and<br>
                                         s.cidr != subnet.cidr)])<br>
<br>
AFAICS there is no obvious knob for suppressing this logic.<br>
<br>
The code was added in commit 6dce817c7c2, and the commit message says:<br>
<br>
=============8<=================<br>
Provide routes for neighbor IPv4 subnets<br>
<br>
Network may contain several Subnets.  In this case all these subnets are<br>
accessible via same link and two VMs with addresses from different<br>
Subnets may talk to each other directly, bypassing default router.  For<br>
this to work, "neighbour Subnets" should have entry in VM's routing<br>
tables.  RFC3442 describes this situation:<br>
<br>
    In some cases more than one IP subnet may be configured on a link.<br>
    In such cases, a host whose IP address is in one IP subnet in the<br>
    link could communicate directly with a host whose IP address is in a<br>
    different IP subnet on the same link. In cases where a client is<br>
    being assigned an IP address on an IP subnet on such a link, for each<br>
    IP subnet in the link other than the IP subnet on which the client<br>
    has been assigned the DHCP server MAY be configured to specify a<br>
    router IP address of 0.0.0.0.<br>
<br>
When network contains more that one IPv4 subnets, report these subnets<br>
in 'classless-static-routes' DHCP option.<br>
<br>
DocImpact<br>
<br>
Change-Id: Ifcf1d99e0f0136bf52b8d13675b7ccfd48005fab<br>
Closes-Bug: #1372885<br>
=============8<=================<br>
<br>
So I guess the next question is: in what way does your networking setup<br>
not conform to the assumptions in that commit message?<br>
<br>
Regards,<br>
        Neil<br>
<br>
</blockquote></div><br></div>
<br>_______________________________________________<br>
OpenStack-operators mailing list<br>
<a href="mailto:OpenStack-operators@lists.openstack.org">OpenStack-operators@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators" rel="noreferrer" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators</a><br>
<br></blockquote></div>