这几天局里增加了一条网通的线路,为了更好的利用资源,我查看了网上的一些文章,开始做多重ISP链路复用LINUX主机,但是结果并不好,具体步骤如下。
软件系统,我用的是国产软件红旗LINUX DC SERVER 4.1,iptables系统是自带的。硬件系统是P41.8G的IBM PC,内存是现代512M,硬盘是7200转的40G。
1.我有两条固定IP线路,一条是eth0(电信),网关为202.102.14.1,一条eth1(网通),网关为60.12.5.1,最后一个eth2上绑定的是内网地址192.168.0.0/24。将etho(电信线路)作为默认网关,访问网通的数据走eth1,配置如下:
;/root/wan1.cong文件内容(配置文件)
interface=eth0
ipaddr=202.102.14.2
gateway=202.102.14.1
network=202.102.14.0/30
routefile=/etc/quick/IP_CNC.list
;/root/wan2.cong文件内容(配置文件)
interface=eth1 ;接口名称
ipaddr=60.12.5.2 ;IP地址
gateway=60.12.5.1;网关地址
network=60.12.5.0/30 ;网络地址
routefile=/etc/quick/IP_CTC.list ;路由表
2.建立通向不同ISP的路由表
ip route add 202.102.14.0/30 dev eth1 src 202.102.14.2 table 50
ip route add default via 202.102.14.1 table 50
ip route add 60.12.5.0/30 dev eth2 src 60.12.5..2 table 51
ip route add default via 60.12.5..1 table 51
3.针对我们要访问的目标地址,选择不同的路由表,进行路由
因为有大量的网络地址需要设置不同的规则,采用命令模式不便于修改,所以做了一个简单的脚本文件,
;文件/root/cdkcm,脚本的内容
. /root/hs
RETVAL=0
start() {
if [ -f "/root/wan1.cong" ]
then
. /root/wan1.cong
tab=50
wan_cdk
fi
if [ -f "/root/wan2.cong" ]
then
. /root/wan2.cong
tab=51
wan_cdk
fi
ip route flush cache
return $RETVAL
}
stop() {
if [ -f "/root/wan1.cong" ]
then
. /root/wan1.cong
tab=50
del_wan_cdk
fi
if [ -f "/root/wan2.cong" ]
then
. /root/wan2.cong
tab=51
del_wan_cdk
fi
ip route flush cache
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVAL
;/root/hs文件内容(函数存放文件)
wan_cdk() {
ip route add ${network} dev ${interface} src ${ipaddr} table $tab
ip route add default via ${gateway} dev ${interface} table $tab
ip rule add from ${ipaddr} table $tab
for cc in `/bin/cat ${routefile}`; do
ip rule add from all to $cc table $tab
done
}
del_wan_cdk() {
ip rule del from ${ipaddr} table $tab
for cc in `/bin/cat ${routefile}`; do
ip rule del from all to $cc table $tab
done
ip route del ${network} dev ${interface} src ${ipaddr} table $tab
ip route del default via ${gateway} dev ${interface} table $tab
}
到此为止,LINUX主机已经可以上网了,而且如想象中的那样,可以选择线路上网,而且很流畅;接下来我应该把我的内网的192.168.0.0/24IP地址伪装起来。
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 202.102.14.2 ;内网地址伪装成电信地址
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to 60.12.5.2 ;内网地址伪装成网通地址
到这里问题出现了,那就是可以用内网任何机子直接PING 通电信和网通的公网地址的网关,但确实无法上网的。后来用 ROUTE 命令查看,发现没有默认网关,如果我们加上网关的话,应该加电信的呢还是加网通的,经过实验,加上任何网关都是无法选择出口的,前面的活是白做了。在这一步是需要一个重要的步骤,那就是我没有做负载均衡。这是我后来查资料得来的。 对于负载均衡,可以使用这条语句来实现:
ip route replace default nexthop via 202.102.14.1 dev eth1 weight 1 nexthop via 60.12.5.1 dev eth2 weight 1
这样 我们就改变了缺省的路由为多路路由!!!!
到此为止,内网也可以双线路出口了。