2.2.x and bad ARP'ing for eth/lo

Aaron D. Turner (aturner@best.com)
Sun, 12 Sep 1999 23:04:00 -0700 (PDT)


I'm forwarding this to the list for a friend (hooman@radware.com) who
noticed this, so please be sure to hit 'reply to all'.

The bug has been seen with Red Hat linux version 6.0. We've seen it with
kernels 2.2.5-15, 2.2.10, and 2.2.11. I haven't tried 2.2.12, but I
believe it will be there also, since I did some looking around and found
no mention of anything even near this.

We've basically uncovered 3 bugs with assigning IP aliases to interfaces.
They're easy to see. Let's say I have a Linux machine with IP
192.168.1.1/255.255.255.0, and I'd like to use an alias of
192.168.1.100/255.255.255.0. A legitimate application is to assign this
alias to the loopback (lo) interface. This is useful in case I need the
IP address to be "internal" and not associated with an ethernet interface.
This will also eliminate ARPs for this IP. In other words, the host will
not (or should not) answer to ARPs for 192.168.1.100 if they're seen on
its ethernet interface, since this IP is in no way associated with
ethernet.

Problem 1:

If the alias is configured with

ifconfig lo:1 192.168.1.100 netmask 255.255.255.255 up

The machine will respond to ARPs for 192.168.1.100. This is wrong,
because this is not an ethernet interface alias. With a 2.0.x kernel (I've
tried 2.0.36)this works perfectly fine and the machine does not illegally
answer ARPs.

Problem 2:

If I configure the alias with

ipconfig lo:1 192.168.1.100 netmask 255.255.255.0 up

then the illegal ARP replies stop, so the machine will no longer answer to
ARPs received on its ethernet interface for IP 192.168.1.100. However,
with this statement, the linux machine thinks that it itself is EVERY HOST
on the 192.168.1.0 network. It's actually rather amusing!!! A telnet from
this linux machine to any 192.168.1.X address will give you a login prompt
for the machine itself (as if you'd done "telnet 127.0.0.1"). So, no
communication is any longer possible with the 192.168.1.0 network.
Again, with 2.0.36 this works just fine.

Problem 3:

While trying to work our way around the desired configuration of putting
an alias IP on the loopback interface, we ran into a third problem. The
ifconfig option of "-arp" is not supported (it's ignored) for ethernet
aliases. In other words if I do a

ifconfig eth0:1 192.168.1.100 netmask 255.255.255.0 -arp up

the -arp is ignored and indeed the machine will respond to ARPs for this
IP. If I use the -arp option for eth0, it works OK. It's aliases of eth0
that ignore the option. Again, 2.0.x handles the option fine, both for
eth0 itself and its aliases.

Thanks...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/