I am setting up a SUSE 11 box that has two NICs:

eth0 - - 00.0C.29.DC.10.CA (MAC)
eth1 - - 00.0C.29.DC.10.DE (MAC)

I need both in the same subnet since they will ne connected to another device (storage) point to point. But I found something while doing the installation; doing ARPs from a workstation I found the behavior below

[root@workstation ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface           ether   00:0C:29:DC:10:CA   C                     eth0           ether   00:0C:29:DC:10:CA   C                     eth0

as you can see it's like eth0 gets all the requests. In fact if I disconnect the cable from eth1 IP .151 will be still pingable; which is not what I want. And if I disconnect the cable from eth0 none of the IPs .150 - .151 are pingable, when .151 should still be accessable.

Why is this happening? I need eth0 to bind only to .150 and eth1 to bind only to .151. It seems like eth0 owns the IPs.

This is not working:


neither is this


Any suggestions?

  • is your storage device block level (iSCSI) or NAS? If it's just NAS access... I'd bond the nics and call it a day. If it's iSCSI well... you're probably on the right path here but ideally you should use a different broadcast domain and different subnet for that. – SpacemanSpiff Mar 5 '12 at 5:46

I agree with womble's answer, but I'll provide an answer to your question directly.

The 2 settings you mentioned are the ones you want.


However after setting this you must force an ARP update. Since you just enabled these settings, all the remote hosts still have the old ARP entries cached and it will appear as if they didnt do anything.

arping -U -c 2 -I eth0
arping -U -c 2 -I eth1

This will send out an ARP broadcast for each IP updating the cache of any neighbors.

You need to set up source based routing rules.
This gets quite a bit more complicated as routing rules are automatically set up when you bring the interface online. You need to override those rules.

ip route add dev eth1 src table 151
ip rule add from lookup table 151 prio 10000
ip route del dev eth1 src table main

The first line creates a new routing rule to route traffic out the right interface for The second line tells the kernel to use this routing rule if the source IP is (this lookup occurs before the 'main' table because of our priority we assigned it). The third line removes the old rule from the 'main' routing table so traffic going out the other interface doesnt use it accidentally.

Now, youre going to need to set this up to somehow run when your interfaces are brought online. This is distro-specific, so I cannot tell you how to do this part.

Things should work without this, but you might also want to add the following to sysctl:


This will keep the kernel from dropping any traffic that comes in the wrong interface.
(UPDATE: Note this is rp_filter, not arp_filter. I think this is the setting you meant to say you already tried)

| improve this answer | |

"I need both in the same subnet since they will ne connected to another device (storage) point to point."

Your rationale makes no sense. If they're both in the same subnet, then by definition it can't be a point-to-point link. If you've got the same IP subnet configured on two different broadcast domains... well, you're screwed. Fix that, and all your problems go away.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.