为了实验负载均衡,我把我的设备模拟成双CDMA路由器,即用板载的以太网卡eth0(IP为192.168.14.222)接入局域网(局域网IP为192.168.14.XXX),同时板载的两路CDMA通过拔号上网形成PPP0 和PPP1,并把局域网的两台PC机(IP为:192.168.14.4 和 192.168.14.55)的网关设成我的设备IP(192.168.14.222),希望局域网的机器通过我的设备上网时,按我的设定,分别走不同的CDMA通道上网,通过以下脚本后,我在两台局域网PC上用PING包试验,发现仅使用了PPP1通道,PPP0通道一直没有数据收发,我试验是用的 iptable 和 iproute ,主要是参考网上相关的关于多路ADSL负载均衡文章,具体实现脚本如下,因对LINUX网络不熟悉,很多是参考网上的作法,属一知半解,请各位大侠指正帮助,非常感谢!!!
#!/bin/sh
IF1=ppp0
IF2=ppp1
#取得动态两路CDMA IP地址
echo "Got IP address "
IP1=`ifconfig ppp0 | awk '/inet addr/ {printf $2}' | cut -f2 -d ":"`
IP2=`ifconfig ppp1 | awk '/inet addr/ {printf $2}' | cut -f2 -d ":"`
#取得CDMA网关地址
echo "Got Gateway address "
P1=`ifconfig ppp0 | awk '/P-t-P/ {printf $3}' | cut -f2 -d ":"`
P2=`ifconfig ppp1 | awk '/P-t-P/ {printf $3}' | cut -f2 -d ":"`
P1_NET=$IP1
P2_NET=$IP2
#添加路由表 T1 T2
echo "Add T1 T2 to rt_tables "
echo 201 T1 >> /etc/iproute2/rt_tables
echo 202 T2 >> /etc/iproute2/rt_tables
#设置T1 T2路由表路由
echo "Set route tables "
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
#设置main路由表
echo "Set main route tables "
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
#设置缺省路由
ip route add default via $P1 table T1
ip route add default via $P2 table T2
#设置路由规则
echo "Set default route tables "
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
#激活IP FORWORD
echo "active IP FORWORD "
echo 1 > /proc/sys/net/ipv4/ip_forward
#设置IPTABLES 环境变量
echo "Set IP table ENV "
export IPTABLES_LIB_DIR=/lib/iptables/
#进行 IP 伪装 ,并指定来自192.168.14.4 的数据走 PPP0通路,指定来自192.168.14.55 的数据走PPP1通路
echo "IP MASQUERADE "
iptables -A POSTROUTING -t nat -s 192.168.14.4/255.255.255.0 -o ppp0 -j MASQUERADE
iptables -A POSTROUTING -t nat -s 192.168.14.55/255.255.255.0 -o ppp1 -j MASQUERADE
ip route replace default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1
ip route flush cache