Re: Route fallback issue

Linux Advanced Routing and Traffic Control

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

 



Hi,

I have usually used the "replace" keyword of iproute2 for similar
purposes. I would suggest a script as well, run via cron unless 1 minute
failover times are not acceptable. The logic could be as follows:

if ping -c1 $PRIMARY_NH >/dev/null 2>&1; then
  ip route replace $PREFIX via $PRIMARY_NH
elif ping -c1 $SECONDARY_NH >/dev/null 2>&1; then
  ip route replace $PREFIX via $SECONDARY_NH
else
  ip route del $PREFIX
fi

Alternatively, one could look into a routing daemon that supports static
routing (Zebra/Quagga/FRRouting, BIRD, ...) and check if that supports
some form of next-hop tracking or at least removes static routes with
unreachable next-hops as one would expect from experience with dedicated
networking devices.

IMHO static route handling as done by the Linux kernel does not seem
useful for networking devices. I have even had bad experiences with
Arista switches and static routing because they relied too much on the
Linux kernel (probably still do).

Thanks,
Erik
-- 
Bufferbloat just waits in hiding to get you when you try to use the network.
                        -- Jim Gettys

On Wed, Jun 20, 2018 at 04:20:11AM +0100, cronolog+lartc wrote:
> Hi,
> 
> I /think/ Linux continues sending ARP requests and doesn't fall back
> to the other route because the route to the failed next hop still
> exists in the routing table with highest metric, so it continues
> looking for this next hop.  I get the same behaviour as you when
> labbing this up, I could not see a straightforward option to mark a
> route as invalid under changes in reachability, I'd also like to
> know if this feature is built in and exists.
> 
> 
> However in the enterprise Cisco world, we can do what you are trying
> to do very easily using "route tracking" and "IP SLA" features.
> Basically we define tests e.g. reachability via ping with
> appropriate frequency and threshholds, then attach these tests to
> one or more preferred routes.  If the test fails, the associated
> route is automatically uninstalled from the forwarding table, so any
> existing lower metric routes get exposed and are used instead.  When
> the test passes again, the preferred routes are reapplied.
> 
> The underlying logic of this can certainly be scripted under Linux
> to get very similar functionality, then put into a cron job or a
> while loop or similar.  Something along the lines of (pseudocode):
>    if [the test such as ping fails] ; then
>       if [preferred route exists] ; then ip route delete ... ; fi
>    else  ## ping is successful
>       if [preferred route doesn't exist] ; then ip route add ... ; fi
>    fi
> 
> 
> Hope that helps.  I'm also interested in any other solutions to do
> this under Linux.
> 
> 
> On 2018-06-19 13:18, Akshat Kakkar wrote:
> >I have 2 interfaces
> >eno1 : 192.168.1.10/24
> >eno2 : 192.168.2.10/24
> >
> >I added routes as
> >172.16.0.0/12 via 192.168.1.254 metric 1
> >172.16.0.0/12 via 192.168.2.254 metric 2
> >
> >My intention : All traffic to 172.16.0.0/12 should go thru eno1. If
> >192.168.1.254 is not reachable (no arp entry or link down), then it
> >should fall back to eno2.
> >
> >But this is not working. My box keeps on looking for 192.168.1.254
> >(i.e. sending arp requests) and never falls back.
> >
> >Can anyone help?
> >
--
To unsubscribe from this list: send the line "unsubscribe lartc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux