Routing Tricks

From SlackWiki
Jump to navigation Jump to search

Weighted Routing

(aka Load Balancing, Net Balancing)

What is Weighted Routing Simply put, distributing network traffic over multiple paths based on load.

EXAMPLE 1: You have two DSL connections incoming and you distribute your connection traffic between them.

EXAMPLE 2: You have a 1.5Mbs DSL connection and a 3MBs cable connection, therefore you set up your routing to send 1/3 of the traffic out the DSL connection and 2/3 out the cable connection.


How do I do it?

Niels Horn has written a slick little script to do the weighted routing for you. He has given me permission to copy it here.


#!/bin/bash
#
# bal_local		Load-balance internet connection over two local links 
#
# Version:		1.0.0 - Fri, Sep 26, 2008
#
# Author:		Niels Horn <niels.horn(at symbol)gmail.com>
#
#
# Set devices:
DEV1=${1-eth0}	# default eth0
DEV2=${2-ppp0}	# default ppp0
#
# Get IP addresses of our devices:
ip1=`ifconfig $DEV1 | grep inet | awk '{ print $2 }' | awk -F: '{ print $2 }'`
ip2=`ifconfig $DEV2 | grep inet | awk '{ print $2 }' | awk -F: '{ print $2 }'`
#
# Get default gateway for our devices:
gw1=`route -n | grep $DEV1 | grep '^0.0.0.0' | awk '{ print $2 }'`
gw2=`route -n | grep $DEV2 | grep '^0.0.0.0' | awk '{ print $2 }'`
#
echo "$DEV1: IP=$ip1 GW=$gw1"
echo "$DEV2: IP=$ip2 GW=$gw2"
#
### Definition of routes ###
#
# Check if tables exists, if not -> create them:
if [ -z "`cat /etc/iproute2/rt_tables | grep '^251'`" ] ; then
	echo "251	rt_dev1" >> /etc/iproute2/rt_tables
fi
if [ -z "`cat /etc/iproute2/rt_tables | grep '^252'`" ] ; then
	echo "252	rt_dev2" >> /etc/iproute2/rt_tables
fi
#
# Define routing tables:
ip route add default via $gw1 table rt_dev1
ip route add default via $gw2 table rt_dev2
#
# Create rules:
ip rule add from $ip1 table rt_dev1
ip rule add from $ip2 table rt_dev2
#
# If we already have a 'nexthop' route, delete it:
if [ ! -z "`ip route show table main | grep 'nexthop'`" ] ; then
	ip route del default scope global
fi
#
# Balance links based on routes:
ip route add default scope global nexthop via $gw1 dev $DEV1 weight 1 nexthop via $gw2 dev $DEV2 weight 1
#
# Flush cache table:
ip route flush cache  
#
# All done...

To use the script, copy it to /usr/local/bin, make it executable with 'chmod +x' and call it with: Code:

bal_local <dev1> <dev2>

filling in <dev1> and <dev2> with your network-devices. If you call the script without any parameters, it tries to balance eth0 and ppp0 (because this works in my case ).

HERE IS HIS ORIGINAL POSTING

(ALSO, I copied a copy of his permission on my DISCUSSION page)