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
...
10 ISP1
20 ISP2
...
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)
ip route show table main | grep -Ev '^default' \
| while read ROUTE ; do
ip route add table ISP1 $ROUTE
done
And add default gateway to ISP1 through that ISP1's gateway:
ip route add default via 192.168.1.2 table ISP1
Do the same for ISP2
So now I have 2 route tables, 1 for each ISP.
...
10 ISP1
20 ISP2
...
ip route show table main | grep -Ev '^default' \
| while read ROUTE ; do
ip route add table ISP1 $ROUTE
done
ip route add default via 192.168.1.2 table ISP1
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%5Fid=7)
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
NAT
Well NAT is easy:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
No comments:
Post a Comment