Differences between revisions 4 and 5
Revision 4 as of 2015-04-28 06:27:38
Size: 3018
Editor: PieterSmit
Comment: Add cronscript to ensure ppp stays up.
Revision 5 as of 2015-07-31 11:33:00
Size: 3244
Editor: PieterSmit
Comment: Add SNR recommendations.
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
 * 2015-07 ADSL line quality recommendations.
   * '''SNR''' should be at least 6dB, but preferably higher than '''9 or 10dB'''.
   * '''Attenuation'''/resistance should be below 55dB, but preferably lower than '''45dB'''.

Loadbalance traffic over multiple ADSL lines

  • 2015-07 ADSL line quality recommendations.
    • SNR should be at least 6dB, but preferably higher than 9 or 10dB.

    • Attenuation/resistance should be below 55dB, but preferably lower than 45dB.

  • 2015-04 Add routing table and ppp notes., Add cron-script to keep adsl lines up.
  • 2013-06 feature removed in kernel 3.6 for route caching.
    • This causes per packet load-balancing over equal cost routes, breaking ADSL links, as outside ip changes in middle of tcp session.
  • Main setup script, used in firehol.conf bash config file.
    • What it does is mark statefull sesion with exit interface and then use same interface for all other packets.
    • This works in conjunction with routing based on fw-mark.

##(c) Pieter E Smit 2013 - GPL3.
##(c) 2015 Add notes on creation of routing tables.
#Note1: create tables e.g. ppp1, ppp2 in /etc/iproute2/rt_tables
#Note2: define pppX interface number with "unit X" option in ppp config. 
##Routing
ipt=iptables
prio=1
#Set connmark depending on dsl interface used.
for i in {1..5}; do
  int="ppp$i"
  mark="$i"
  $ipt -t mangle -I POSTROUTING 1 -o $int -m state --state NEW -j CONNMARK --set-mark $mark
  $ipt -t mangle -I PREROUTING 1 -i $int -m state --state NEW -j CONNMARK --set-mark $mark
  $ipt -t mangle -I INPUT      1 -i $int -m state --state NEW -j CONNMARK --set-mark $mark
  #Update route
  #Also done in ppp ip-up script as we cant add route if int does not exist.
  ip route replace default dev $int table $int 2> /dev/null

  ##THIS is LOCAL lan route## Update to local subnet.
  ip route replace 192.168.0.0/16 dev eth0 table $int

  #set routing rule to pick routing table depending on fwmark, table name=$int see /etc/iproute2/rt_tables
  ip rule del fwmark $mark table $int 2> /dev/null
  ip rule add fwmark $mark table $int prio $prio
  #

done
  $ipt -t mangle -I PREROUTING 1 -j CONNMARK --restore-mark

#Debug command
#   iptables -L -nv -t mangle
  • ppp/if-up and if-down script to add and remove routes as adsl go up and down.

#(c)Pieter E Smit 2013 GPL3
#adds all ppp interfaces to default route.
command="ip route replace default scope global" 
for i in `ifconfig | grep ppp | cut  -d " " -f 1` ;  do
  command="$command nexthop dev $i weight 1" ;
  #Add default route to each ppp interface's own routing table. /etc/iproute2/rt_table
  ip route replace default dev $i table $i
  done 

$command
  • line added to cron to test and enable adsl if down. Currently set to test every hour.

# crontab -e 
10  */1 * * * if /sbin/ifconfig ppp1 > /dev/null; then true ; else /sbin/ifup --force ppp1 ; fi
20  */1 * * * if /sbin/ifconfig ppp2 > /dev/null; then true ; else /sbin/ifup --force ppp2 ; fi
30  */1 * * * if /sbin/ifconfig ppp3 > /dev/null; then true ; else /sbin/ifup --force ppp3 ; fi
40  */1 * * * if /sbin/ifconfig ppp4 > /dev/null; then true ; else /sbin/ifup --force ppp4 ; fi
50  */1 * * * if /sbin/ifconfig ppp5 > /dev/null; then true ; else /sbin/ifup --force ppp5 ; fi

...

linux/LoadBalanceMultipleADSLlines (last edited 2015-07-31 11:33:00 by PieterSmit)