Subject: Re: Strange routing problem: NetBSD goes outside for a local IP address
To: Stephane Bortzmeyer <bortzmeyer@nic.fr>
From: Manuel Bouyer <bouyer@antioche.eu.org>
List: netbsd-users
Date: 02/11/2003 23:07:35
On Tue, Feb 11, 2003 at 10:16:39AM +0100, Stephane Bortzmeyer wrote:
> I have a point-to-point line (PPP over asynchronous serial) between
> two Unix machines. Both machines run Zebra and establishes an OSPF
> adjacency over the PtP line. It works fine.
> 
> But there is a strange side effect: the route for the *local*
> interface now goes to a remote machine. Apparently, Linux ignores this
> strange route (traceroute indicates that the packet stays local) but
> NetBSD follows blindly the routing table.
> 
> RTA is a Linux and has router ID 10.4.100.2 and address 172.22.131.65
> on the point-to-point link.
> 
> RTB is a NetBSD and has router ID 192.134.7.241 and address
> 172.22.131.64 on the point-to-point link.
> 
> The routes are strange (here, seen from RTA):
> 
> ============ OSPF network routing table ============
> N    10.4.200.0/25         [100] area: (0.0.0.0)
>                            directly attached to eth0
> N    172.22.131.64/32      [10000] area: (0.0.0.0)
>                            directly attached to ppp0
> N    172.22.131.65/32      [10110] area: (0.0.0.0)
>                            via 10.4.200.1, eth0
> ...
> 
> 172.22.131.65, RTA's own address, goes outside!
> 
> It ends up in Zebra's routing table:
> 
> O   172.22.131.64/32 [110/10000] is directly connected, ppp0, 00:16:14
> C>* 172.22.131.64/32 is directly connected, ppp0
> O>* 172.22.131.65/32 [110/10110] via 10.4.200.1, eth0, 00:12:38
> 
> But Linux does not use it:
> 
> Kernel IP routing table
> Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
> 172.22.131.64   0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
> 172.22.131.65   10.4.200.1      255.255.255.255 UGH   10110  0        0 eth0
> 
> traceroute to 172.22.131.65 (172.22.131.65), 30 hops max, 38 byte packets
>  1  172.22.131.65 (172.22.131.65)  0.520 ms  0.253 ms  0.202 ms
> 
> On RTB, the NetBSD box, the routes are the same (both with "show ip
> ospf route" and "show ip route"). The difference is that the indirect
> route is actually used :-(
> 
> Destination        Gateway            Flags     Refs     Use    Mtu  Interface
> 172.22.131.64      192.134.7.245      UGH1        0        9      -  epic0
> 172.22.131.65      172.22.131.64      UH          0      195      -  ppp0
> 
> traceroute to 172.22.131.64 (172.22.131.64), 30 hops max, 40 byte packets
>  1  192.134.7.245 (192.134.7.245)  0.692 ms  0.304 ms  0.229 ms
>  2  10.4.200.2 (10.4.200.2)  0.819 ms  0.604 ms  0.590 ms
>  3  172.22.131.64 (172.22.131.64)  4.947 ms  3.732 ms  3.709 ms
> 
> The issue is described into the John Moy's book: "OSPF: Anatomy of an
> Internet Routing protocol", chapter 8, the section entitled: "Why is
> the representation of point-to-point links in OSPF so strange ?"
> 
> Moy seems to imply that NetBSD, unlike Linux, is wrong. The case of a
> router having a routing table entry for one of its addresses is
> discussed by Moy and dismissed on the grounds that no machine is
> stupid enough to forward a packet which is destined to one of its
> interfaces. But NetBSD is :-}

Actually I can't see how this is wrong. If you have an entry in the routing
table, it's expected to be used :)

BTW, this would probably be better on the tech-net list.

-- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 24 ans d'experience feront toujours la difference
--