[ILUG] Load Balancing Over 2 Internet connections.

Paul Jakma paul at clubi.ie
Tue Sep 6 03:47:48 IST 2005


On Mon, 5 Sep 2005, Ciaran Johnston wrote:

> What is wanted is something like this:
> http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html

> Which, of course, I haven't tried.

I've used:

 	http://hibernia.jakma.org/~paul/rc.iprules

It doesn't do anything to try detect which links are useful and 
working, but then again, any packets needing this script can't go out 
the any other link anyway..

The above plus a dynamically modified default route in the main table 
(eg using some script as described in previous post, or read on) 
would do the trick.

Getting ISP co-operation is even better (BGP or even just a default 
announced via RIP - I wish ISPs would do that per default). You might 
also be hack something up using the fact that PPP has its own 
link-heartbeat capabilities. Eg use 'ifplugd' or the 'zebra'[1] 
daemons to change the routes according to whether ppp interface is 
IFF_RUNNING or not.

IMHO, zebra would do it better[6].

1. That'd be the 'zebra' daemon from the Quagga[2] package, not from
    the deep-freeze GNU Zebra[3] package (which is not capable of
    link-detection[4])

2. http://www.quagga.net, 'apt-get/yum install quagga'

3. http://www.zebra.org

4. Available on Linux and Solaris, not yet in {Net,Free}BSD but I 
think the ports for each of those have the required patch. Then put 
the following in /etc/quagga/zebra.conf:

-----------------------------------------------------
interface <first ppp interface name>
   link-detect

interface <second ppp interface name>
   link-detect

route 0.0.0.0/0 <peer address on first ppp interface>
route 0.0.0.0/0 <peer address on second ppp interface>
------------------------------------------------------

Start zebra (service zebra start on FC, you have to edit something 
first on debian i think, 'svcadm enable zebra' on Solaris 10), then 
if everything goes as it should[5], whenever one of the PPP 
interfaces loses link, zebra should notice and should automatically 
update the default route in kernel.

5. This depends on PPP being a good bunny and toggling IFF_RUNNING to 
reflect link-state as it should, I think it /does/. Even if it 
doesnt, it /does/ however (i'm pretty sure) remove the addresses 
concerned which should still be enough for zebra to be able to notice 
(cause the target address for the relevant route will have 
disappeared).

6. If you use ifplugd you have to write your own scripts, etc, to 
update the routes. Using the zebra daemon, all you need is the above 
configuration really, it does everything else automagically.

regards,
-- 
Paul Jakma	paul at clubi.ie	paul at jakma.org	Key ID: 64A2FF6A
Fortune:
Generosity and perfection are your everlasting goals.



More information about the ILUG mailing list