lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAN17JHUZLWmDQF8P6eCbLkTanYjwi0YmF5dXkfvH_QCRnbtaMA@mail.gmail.com>
Date:	Fri, 7 Oct 2011 11:08:49 -0700
From:	Yinglin Sun <yinglin.s@...il.com>
To:	Neil Horman <nhorman@...driver.com>
Cc:	Jay Vosburgh <fubar@...ibm.com>,
	"David S. Miller" <davem@...emloft.net>,
	Alexey Kuznetsov <kuznet@....inr.ac.ru>,
	James Morris <jmorris@...ei.org>,
	Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>,
	Patrick McHardy <kaber@...sh.net>, netdev@...r.kernel.org
Subject: Re: [PATCH] IPv6: DAD from bonding iface is treated as dup address
 from others

On Fri, Oct 7, 2011 at 4:10 AM, Neil Horman <nhorman@...driver.com> wrote:
> On Thu, Oct 06, 2011 at 06:24:36PM -0700, Yinglin Sun wrote:
>> On Thu, Oct 6, 2011 at 5:59 PM, Jay Vosburgh <fubar@...ibm.com> wrote:
>> > Yinglin Sun <Yinglin.Sun@....com> wrote:
>> >
>> >>On Thu, Oct 6, 2011 at 3:17 PM, Yinglin Sun <Yinglin.Sun@....com> wrote:
>> >>>
>> >>> On Thu, Oct 6, 2011 at 12:05 PM, Jay Vosburgh <fubar@...ibm.com> wrote:
>> >>> >
>> >>> > Neil Horman <nhorman@...driver.com> wrote:
>> >>> >
>> >>> > >On Wed, Oct 05, 2011 at 08:59:10PM -0700, Yinglin Sun wrote:
>> >>> > >> Steps to reproduce this issue:
>> >>> > >> 1. create bond0 over eth0 and eth1, set the mode to balance-xor
>> >>> > >> 2. add an IPv6 address to bond0
>> >>> > >> 3. DAD packet is sent out from one slave and then is looped back from
>> >>> > >> the other slave. Therefore, it is treated as a duplicate address and
>> >>> > >> stays tentative afterwards:
>> >>> > >>    kern.info:
>> >>> > >>        Oct  5 11:50:18 testvm1 kernel: [  129.224353] bond0: IPv6 duplicate address 1234::1 detected!
>> >
>> > [...]
>> >
>> >>> > >Nack, This seems like it will just completely break DAD.  What if theres another
>> >>> > >system out there with the same mac address.  A response from that system would
>> >>> > >get dropped by this filter, instead of causing The local system to stop using
>> >>> > >the address.  What you really want to do is modify
>> >>> > >bond_should_deliver_exact_match to detect this frame on the inactive slave or
>> >>> > >some such, and drop the frame there.
>> >>> >
>> >>> >        Also NACK; and adding a bit of information.  The balance-xor
>> >>> > mode is nominally expecting to interact with a switch whose ports are
>> >>> > set for etherchannel ("static link aggregation"), in which case the
>> >>> > switch will not loop the packet back around.
>> >>> >
>> >>> >        If your switch can do etherchannel, then enable it and the
>> >>> > problem should go away.  If your switch cannot do this, then you may
>> >>> > have other issues, because all of the multicast or broadcast packets
>> >>> > going out any bonding slave will loop around to another slave.  You
>> >>> > could also use 802.3ad / LACP if you switch supports that.
>> >>> >
>> >>> >        For balance-xor (or balance-rr, for that matter) mode to a
>> >>> > non-etherchannel switch, it's going to be difficult, if not impossible,
>> >>> > to modify bond_should_deliver_exact_match, because there are no inactive
>> >>> > slaves.  In this mode, bonding is expecting the switch to balance
>> >>> > incoming traffic across the ports, and not deliver looped back packets
>> >>> > or duplicates.  There are no restrictions on what type of traffic
>> >>> > (mcast, bcast, ucast) may arrive on any given port.
>> >>> >
>> >>> >        I can't think of a way to make the non-etherchannel case work
>> >>> > for balance-xor (or balance-rr) without breaking the DAD functionality
>> >>> > in the case of an actual duplicate.  I'm not aware of a way to
>> >>> > distinguish a looped back DAD probe from an actual duplicate address
>> >>> > probe elsewhere on the network.
>> >>> >
>> >>>
>> >>> Hi Neil & Jay,
>> >>>
>> >>> Thanks a lot for the comments.
>> >>>
>> >>> The use case is to add IPv6 address on the bonding interface first,
>> >>> and then set up port channel on switch. We'll hit this issue and the
>> >>> new address will stay tentative and unusable after port channel is set
>> >>> up on switch. This patch is for this valid use case.
>> >>>
>> >>> Except failover mode, all slaves are active on receiving packets, so
>> >>> we are receiving such looped back DAD and the bonding driver cannot
>> >>> ignore them. I cannot think of a way to distinguish if a DAD is looped
>> >>> back or from someone else having the same mac address. They look the
>> >>> same to the host. If there is another machine having the same mac
>> >>> address, this code path gets executed if both are doing DAD at the
>> >>> same time for the same IPv6 address. Maybe we should find out what the
>> >>> specification defines for this case?
>> >>>
>> >>
>> >>RFC4862 has a discussion about this issue:
>> >>http://tools.ietf.org/html/rfc4862#appendix-A
>> >>The better solution could be to record the number of DAD sent out. If
>> >>we received more DAD packets than we sent out, there is someone else
>> >>on the network who has the same mac address and sent DAD for the same
>> >>IPv6 address. However, this solution doesn't work with bonding
>> >>interface, since all other active slaves but the one sending out DAD
>> >>will receive packet looped back. It doesn't seem there is a simple
>> >>solution for this issue.
>> >
>> >        Why are you setting up the port channel after configuring the
>> > bond?
>> >
>> >        As a possible workaround, if you have control over the setup
>> > process (perhaps it's some sort of manual process), adding one slave to
>> > the bond, leaving the other soon-to-be slaves down, then setting up the
>> > switch, and finally adding the remaining slaves should work around the
>> > issue, since if the bond has only one slave it won't see any looped
>> > packets.
>> >
>> >        Or you could bring the bond up as active-backup, then change the
>> > mode to balance-xor once the switch is configured.
>> >
>> >        Ultimately, though, the problem stems from the settings mismatch
>> > between the switch and the bonding system; balance-xor is meant to
>> > interoperate with etherchannel, and when the switch is not configured
>> > properly, correct behavior is difficult to guarantee.
>> >
>>
>> Jay,
>>
>> Thanks a lot for the suggestion.
>>
>> It's mainly about usability. We would like to provide customers with
>> consistent IPv6 configuration procedures as IPv4.  Such workarounds
>> could be confusing and generate customer calls.
>>
> Its not a workaround, its the way it has to be done.  You can't just drop dad
> packets because you can't tell the difference between those that are looped back
> and those that are legitimaely from other hosts, so you need to do something
> like what Jay is suggesting.
>

Yes, you are right. For this case, we cannot tell the difference
between those DADs  looped back and DADs for the same IPv6 addresses,
which are from other machines having the same mac address on the
network.

If this happens, the network is already broken due to duplicate mac
addresses, right? I know this is not the excuse to drop DAD from
others having the same mac address, since those DADs are legitimate
and indicate duplicate IPv6 address in the network. Just out of
curiosity, is there any case that such network can still function well
with multiple machines having the same mac address besides link
aggregation? Maybe we could drop those DADs since the network is
already in trouble?

Thanks.

Yinglin
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ