Load Balancing of Multi-routing ADSL

1.伪装:

iptables -A POSTROUTING -t nat-s 192.168.0.0/24 -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o ppp1 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o pppN -j MASQUERADE

2.修改网关

ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1

说明:
如果有n条线路,那么继续在其中增加 nexthop dev ppp2(ppp3……);

用replace的原因是当原来没有网关时会增加这个网关,当已经存在网关时,会修改原来的网关.
用add 也可以,但是当已经存在默认网关时就要先delete再add.

两个weight 1的意思是这两条链路的权值是相等的,两条链路承担的网络流量是相等的。
有一点是需要说明的,因为路由表是基于缓存的,所以在实际中两条链路并不能100%的平分流量

nexthop NEXTHOP 设置多路径路由的下一跳地址。NEXTHOP比较复杂,它的语法和以下高层参数类似:

via ADDRESS–表示下一跳路由器;
dev NAME–表示输出设备;
weight NUMBER–在多路由路径中,这个元素的权重。表示相对带宽或者服务质量。

3.刷新路由

ip route flush cache

4.用tcpdump 分别监察两条线路,用下面命令:

tcpdump -i ppp0
tcpdump -i ppp1
tcpdump -i pppN(有多条的话)

5.为了每次启动时自动启动,把命令写在启动脚本里面,在 /etc/rc.local 后面增加:

ifup ppp0
ifup ppp1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o ppp1 -j MASQUERADE
ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1
ip route flush cache