Re: SCTP multihoming sends incorrect ARP request

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 12/14/2011 09:07 AM, Stanislav Kozina wrote:
> malc,
> 
> Thank you for reply and help!
> 
> I am well aware of this weird subnet prefix, this was to keep access to the machines from outside using one line in the firewall above...
> This IP address was not used in any of the packets, so I was quite sure this is not the problem.
> However, I was not lazy and reconfigured all machines so now all IP addresses use only /24 prefix:
> 
> hostA# $ ip addr show
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
>     link/ether 52:54:00:92:35:7a brd ff:ff:ff:ff:ff:ff
>     inet 192.168.100.14/24 brd 192.168.100.255 scope global eth0
>     inet 192.168.100.4/24 brd 192.168.100.255 scope global secondary eth0:1
>     inet6 fe80::5054:ff:fe92:357a/64 scope link 
>        valid_lft forever preferred_lft forever
> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
>     link/ether 52:54:00:92:35:7b brd ff:ff:ff:ff:ff:ff
>     inet 192.168.200.14/24 brd 192.168.200.255 scope global eth1
>     inet 192.168.200.4/24 brd 192.168.200.255 scope global secondary eth1:1
>     inet6 fe80::5054:ff:fe92:357b/64 scope link 
>        valid_lft forever preferred_lft forever
> 
> The issue still exists as before:
> 
> hostA# $ ip neigh
> 192.168.200.5 dev eth1 lladdr 00:16:36:d3:6a:5e REACHABLE
> 192.168.100.5 dev eth0 lladdr 00:16:36:d3:6a:5e REACHABLE
> 
> Note the same MAC in first two lines, this was caused by incorrect ARP packets sent by SCTP...
> Everything I wrote is still valid.

# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

This has nothing to do with SCTP.  IP by default will answer ARP on the
first interface that sees the packet (weak-host model).  Turning above
on will make sure that you only answer ARPs on interfaces that have the
address configured.

-vlad

> 
> Thank you once again and regards,
> -Stanislav
> 
>>
>> inet 192.168.100.14/16 brd 192.168.200.255 scope global eth0
>>
>> You see that /16 in there and the odd-looking broadcast address
>> (given your diagram stating all subnets are /24)? That's your
>> configuration issue :)
>>
>> Cheers,
>> malc.
>>
>>
>> On Wed, Dec 14, 2011 at 11:41 AM, Stanislav Kozina <
>> skozina@xxxxxxxxxx > wrote:
>>
>>
>> Greetings,
>>
>> I'd like to discuss obscure behavior of SCTP in multihoming
>> environment.
>> SCTP connect() leads to incorrect ARP who-has request and reply.
>>
>> Suppose we have two hosts (hostA, hostB), each with two NICs (nicA,
>> nicB),
>> each NIC with two addresses (addrA, addrB). So in our scenario we
>> have 8
>> addresses in total. All NICs are connected to the same physical
>> network
>> switch.
>> Both addresses on both nicA are in one subnet, both addresses on both
>> nicB are
>> in one different subnet.
>>
>> So my settings looks like:
>>
>> ===hostA================ ===hostB================
>> | 192.168.100.4/24 nicA-\ /-nicB 192.168.100.5/24 |
>> | 192.168.100.14/24 | || | 192.168.100.15/24 |
>> |----------------------| || |----------------------|
>> | 192.168.200.4/24 nicB-/ \-nicB 192.168.200.5/24 |
>> | 192.168.200.14/24 | | 192.168.200.15/24 |
>> ======================== ========================
>>
>> (in real setup both subnets would be routed through different
>> physical networks etc.)
>>
>> Now suppose we are running SCTP server on hostB, which does:
>>
>> socket(AF_INET, SOCK_STREAM,IPPROTO_SCTP);
>> bind(192.168.100.5)
>> sctp_bindx(192.168.200.5)
>> listen()
>> accept()
>>
>> And SCTP client running on hostA doing:
>>
>> socket(AF_INET, SOCK_STREAM,IPPROTO_SCTP);
>> bind(192.168.100.4);
>> sctp_bindx(192.168.200.4);
>> connect(192.168.200.5);
>>
>> So in short - the client does connect to the secondary interface of
>> the server.
>>
>> The problem here is ARP resolution before actual SCTP handshake. Here
>> the
>> client sends incorrect ARP request, see **) below for tcpdump output.
>> In the showed packets, the ARP Who-has request contains incorrect
>> combination
>> of Sender's MAC and IP address. It has Sender's MAC address of nicB,
>> but
>> Sender's IP address of nicA.
>> The server then replies with the same wrong packet - Sender's MAC
>> address of
>> his nicA, but IP address from nicB.
>> This leads to wrong ARP tables on both hosts - they both only only
>> one MAC
>> address of their respective partner.
>> Wrong ARP tables leads for incorrect source IP in future SCTP
>> packets.
>>
>> Possible workaround is to ping all partners before starting SCTP
>> connection to
>> fill ARP tables correctly.
>>
>> I was testing this on yesterday's build of the kernel:
>>
>> $ git log | head
>> commit dc47ce90c3a822cd7c9e9339fe4d5f61dcb26b50
>> Author: Linus Torvalds < torvalds@xxxxxxxxxxxxxxxxxxxx >
>> Date: Fri Dec 9 15:09:32 2011 -0800
>>
>> Linux 3.2-rc5
>>
>> hostA$ uname -a
>> Linux hostA-2 3.2.0-rc5 #1 SMP Mon Dec 12 17:31:15 CET 2011 x86_64
>> x86_64 x86_64 GNU/Linux
>>
>> The question is - do you agree that this is a bug, and the ARP
>> who-has request
>> should be sent with matching pair of MAC and IP address?
>> In that case - I would be happy to propose a patch with fix (which
>> might take
>> me some time...).
>>
>> Thanks for reply and regards,
>> -Stanislav Kozina
>>
>> *) IP configuration of both hosts
>> hostA# ip addr show
>> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
>> state UP qlen 1000
>> link/ether 52:54:00:92:35:7a brd ff:ff:ff:ff:ff:ff
>> inet 192.168.100.14/16 brd 192.168.200.255 scope global eth0
>> inet 192.168.100.4/24 brd 192.168.100.255 scope global eth0:1
>> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
>> state UP qlen 1000
>> link/ether 52:54:00:92:35:7b brd ff:ff:ff:ff:ff:ff
>> inet 192.168.200.14/24 brd 192.168.200.255 scope global eth1
>> inet 192.168.200.4/24 brd 192.168.200.255 scope global secondary
>> eth1:1
>>
>> hostB# ip addr show
>> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
>> state UP qlen 1000
>> link/ether 00:16:36:d3:6a:5e brd ff:ff:ff:ff:ff:ff
>> inet 192.168.100.15/16 brd 192.168.200.255 scope global eth0
>> inet 192.168.100.5/24 brd 192.168.100.255 scope global eth0:1
>> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
>> state UP qlen 1000
>> link/ether 00:16:36:d3:6a:5f brd ff:ff:ff:ff:ff:ff
>> inet 192.168.200.15/24 brd 192.168.200.255 scope global eth1
>> inet 192.168.200.5/24 brd 192.168.200.255 scope global secondary
>> eth1:1
>>
>> **) Tcpdump of respective ARP packets
>> No. Time Source Destination Protocol Info
>> 7 7.185516 RealtekU_92:35:7b Broadcast ARP Who has 192.168.200.5?
>> Tell 192.168.100.4
>>
>> Frame 7 (42 bytes on wire, 42 bytes captured)
>> Ethernet II, Src: RealtekU_92:35:7b (52:54:00:92:35:7b), Dst:
>> Broadcast (ff:ff:ff:ff:ff:ff)
>> Address Resolution Protocol (request)
>> <!SNIP>
>> Sender MAC address: RealtekU_92:35:7b (52:54:00:92:35:7b)
>> Sender IP address: 192.168.100.4 (192.168.100.4) /** Here the Senders
>> MAC and IP do not match */
>> Target MAC address: 00:00:00_00:00:00 (00:00:00:00:00:00)
>> Target IP address: 192.168.200.5 (192.168.200.5)
>>
>> No. Time Source Destination Protocol Info
>> 8 7.185832 QuantaCo_d3:6a:5e RealtekU_92:35:7b ARP 192.168.200.5 is
>> at 00:16:36:d3:6a:5e
>>
>> Frame 8 (42 bytes on wire, 42 bytes captured)
>> Ethernet II, Src: QuantaCo_d3:6a:5e (00:16:36:d3:6a:5e), Dst:
>> RealtekU_92:35:7b (52:54:00:92:35:7b)
>> Address Resolution Protocol (reply)
>> <!SNIP>
>> Sender MAC address: QuantaCo_d3:6a:5e (00:16:36:d3:6a:5e)
>> Sender IP address: 192.168.200.5 (192.168.200.5) /** Here also
>> Senders MAC and IP do not match */
>> Target MAC address: RealtekU_92:35:7b (52:54:00:92:35:7b)
>> Target IP address: 192.168.100.4 (192.168.100.4)
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-sctp"
>> in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Networking Development]     [Linux OMAP]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux