I have two internet connections from two different ISPs and I need to balance the traffic originating to and from my network between the two ISPs. I am using Debian GNU/Linux.
My set-up is like this –
eth0
(192.168.0.0/24) — Local network
eth1
(192.168.1.0/24) — ISP #1
eth2
(192.168.2.0/24) — ISP #2
My local network is connected to this server via eth0 and the box is the DHCP server cum Gateway for all the machines in the LAN.
The server needs to do load-balancing between the two ISPs and also needs to do NAT-ing.
I have followed the routing instructions on lartc.org but I still need instructions to do the NAT-ing properly.
Any help will be appreciated.
PS – I know about pFsense but I need to use Linux.
Best Answer
I have done load balancing using both lartc.org and iptables methods, and I find that the iptables method is easier to understand and implement. The only downside is that you need a fairly recent iptables version to be able to use statistic module
Let's suppose a few things:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, gateway: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, gateway: 192.168.2.2/24
So here is how I would do by using iptables method:
Route tables
First edit the /etc/iproute2/rt_tables to add a map between route table numbers and ISP names
So table 10 and 20 is for ISP1 and ISP2, respectively. I need to populate these tables with routes from main table with this code snippet (which I have taken from hxxp://linux-ip.net/html/adv-multi-internet.html)
And add default gateway to ISP1 through that ISP1's gateway:
Do the same for ISP2
So now I have 2 route tables, 1 for each ISP.
Iptables
OK now I use iptables to evenly distribute packets to each route tables. More info on how this work can be found here (http://www.diegolima.org/wordpress/?p=36) and here (http://home.regit.org/?page_id=7)
NAT
Well NAT is easy: