ONFIG_IP_ROUTE_MULTIPATH: Normally, the routing tables specify a single action to be taken in a deterministic manner for a given packet. If you say Y here however, it becomes possible to attach several actions to a packet pattern, in effect specifying several alternative paths to travel for those packets. The router considers all these paths to be of equal "cost" and chooses one of them in a non-deterministic fashion if a matching packet arrives. ONFIG_EQUALIZER: If you have two serial connections to some other computer (this usually requires two modems and two telephone lines) and you use SLIP (the protocol for sending Internet traffic over telephone lines) or PPP (a better SLIP) on them, you can make them behave like one double speed connection using this driver. Naturally, this has to be supported at the other end as well, either with a similar EQL Linux driver or with a Livingston Portmaster 2e. Say Y if you want this and read Documentation/networking/eql.txt. You may also want to read section 6.2 of the NET-3-HOWTO, available from . This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eql.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. CONFIG_SHAPER: The traffic shaper is a virtual network device that allows you to limit the rate of outgoing data flow over some other network device. The traffic that you want to slow down can then be routed through these virtual devices. See Documentation/networking/shaper.txt for more information. An alternative to this traffic shaper is the experimental Class-Based Queueing (CBQ) scheduling support which you get if you say Y to "QoS and/or fair queueing" above. To set up and configure shaper devices, you need the shapecfg program, available from in the shaper package. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called shaper.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Equal Cost Multipath HOWTO FORWARD I wrote this document in the absence of any easy to find documentation on the subject of eqal cost multipath routing in linux. I knew it was available in the kernel and I knew I wanted to use it, so I set out on a mission to finally give back to the Linux community which has treated me so well over the years. This document probably assumes too much but my intention is to speak an audience of users with above average network and routing knowlege. A good primer would be the Advanced Routing HOWTO by... I wish this paper to be an addendum some day into it's comprehensive index. If I lead you astray in some way, feel free to write me. I will do my best to correct errors. I have been known to be wrong. Kernel Configuration Compile the kernel with the (ECMP) equal cost multipath option, CONFIG_IP_ROUTE_MULTIPATH. There are some dependancies in this area. You will need to enable [*] TCP/IP networking [*] IP: advanced router [*] IP: equal cost multipath This enables the "next hop" and "equalize" syntax in iproute2 which performs [] weighted round robin TCP session load balancing over multiple default gateways [] unpredictable TCP session load balancing over multiple default gateways - where is the documentation for iproute2...source? These are available by default in the (redhat) 2.4.7 kernel, so you shouldn't need to go hacking around with that for now. Multiple redundant routes Connections Establish mutiple links, this could be any combination (purely speculation) of ethernet, DSL, dialup, cable. I have tried this with cable 1.5 Mb and dialup 56K. I have also tried this with two 128K isdn modem. This technique allows for more througput without increasing the available bandwith to any one particular TCP session. TO DO: Speedtests / Mixed at Matched Not to be confused with TEQL - Trivial/True link equalizer (bidirectional loadsharing) or EQL[izer] - a software device that lets you load-balance IP serial links (SLIP or uncompressed PPP) to increase your bandwidth. Most likely the reason you are reading this is because you want more throughput, and you are just too cheap to buck up for that phat pipe to the internet. So my target audience is the cheap Linux user with above average network and routing knowlege. Funny thing - ok, so now you have two internet links spewing packets into the ether, your private network is NAT'ed to isolate you from Nimda and all that good shit out there, you were too cheap to purchase the IP block from your network provider so you are NAT'ing your entire company through an overworked Linux machine. Your packets are going out on two (or more) interfaces, iptables doesn't understand WTF is going on, so all NAT'ed packets are going out with the source IP as one of your two WAN interfaces AND all packets are returning to that interface as well, not very well balanced. Less than desirable Ipchains shouldn't have an issue here, though I haven't tested it, so if you use iptables you need to add a line for each interface. $cmd -A POSTROUTING -t nat -s 10.0.0.0/8 -o eth0 -j SNAT --to cable.modem.ip $cmd -A POSTROUTING -t nat -s 10.0.0.0/8 -o eth1 -j SNAT --to dsl.modem.ip $cmd -A POSTROUTING -t nat -s 10.0.0.0/8 -o ppp0 -j SNAT --to dialup.modem.ip etc... this should solve that issue. If you equalize with ipchains let me know and I will update the HOWTO, though I've worked with both ipchains and iptable, I suggest iptables for some real speed enhansements (I know how you like your bandwidth), besides it's a _statefull_ firewall. insering module modprobe eql ip route change default equalize nexthop via 12.82.143.54 dev ppp0 nexthop via 12.230.220.1 dev eth1 /sbin/ip route list gets you default equalize nexthop via 10.65.60.12 dev ppp1 weight 1 nexthop via 10.65.60.12 dev ppp0 weight 1 I am interested in hearing from anyone who has enabled CONFIG_IP_ROUTE_MULTIPATH in their configuration, possibly as an alternative to EQL driver for seamless bundling of bandwidths of multiple serial lines. We have one ISDN, and two dialup links between two buildings with latest versions of linux (actually 2.1.101) running on the systems. I am about to experiment EQL and also MULTIPATH options. I am preferring the latter since it will allow VJ compression to be enabled on PPP links. How can we use MULTIPATH option for links which are not equal in capacity? Can starvation be taken care of? My current understanding is that since there is no mechanism to provide this info, it is not taken care of. I feel that the routing should be dependent upon number of packets waiting to be sent on line on each of the ppp devices. I am interested in getting any pointers (and standards) regarding algo's for implementation of MULTIPATH options. On Thu, 28 May 1998, Vinod G. Kulkarni wrote: > How can we use MULTIPATH option for links which are not equal in capacity? You can't. :-( > Can starvation be taken care of? My current understanding is that since > there is no mechanism to provide this info, it is not taken care of. Nope. EQL suffers from this badly. :-( > I feel that the routing should be dependent upon number of packets waiting > to be sent on line on each of the ppp devices. Yup. Hopefully the new 2.1.x loadbalancing queue will handle this in a generic way for all devices... but where are the utilities to configure it? ftp.inr.ac.ru:/ip-routing/iproute2* with the "tc" utility. It is still rather rough tho and the only documentation is the source. If you know IOS it should look familar though. It probably only compiles with libc5 includes. http://www.linux-vs.org/~julian/dgd.txt