URN Logo
UNIX Resources » Linux » China Linux Forum » Linux防火墙和代理服务器应用 » 2 » LINUX网通电信双线路代理主机的失败经历
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
LINUX网通电信双线路代理主机的失败经历
 
 
Subject: LINUX网通电信双线路代理主机的失败经历
Author: dfl2323    Posted: 2006-09-07 21:10    Length: 6,021 byte(s)
[Original] [Print] [Top]
这几天局里增加了一条网通的线路,为了更好的利用资源,我查看了网上的一些文章,开始做多重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
这样 我们就改变了缺省的路由为多路路由!!!!
到此为止,内网也可以双线路出口了。

经过一段时间的测试,我发现了LINUX主机很不稳定,那就是路由选择严重滞后,对于有一些加了访问控制列表的网站,比如说网通内部的网站,或是电信内部的网站,有时是被禁止浏览的,而且需要刷新无数次(具体次数每台机子并不一致,最长时间的5分钟内没有上去)才能上去。后来惊过阅读资料,发现是LINUX的路由缓存机制有问题,在某一时间段 连接到某一点上的线路是不变的,而必须等到失效才能重新选择,而且资料显示, julian 的补丁解决了这个问题,对于内核是2.4.21.的红旗LINUX需要打上下面的两个补丁。
http://www.ssi.bg/~ja/patch-2.4.20-ja1.diff
B.equailze 这之PATCH 解决了在系统内核中equailze参数不生效的问题
http://www.teatime.com.tw/~tommy/linux/equalize.patch
将这两个PATCH 下载到本地 比如 直接放在 /root目录下那么这样做,将PATCH补进内核:
cd /usr/src/linux-2.4.21-*****/
patch -p1 </root/patch-2.4.20-ja1.diff
cd /usr/src/linux-2.4.21-******/
patch -p1 </root/equalize.patch
按照资料上的步骤执行完以后就应该解决了路由缓存机制问题了,但是在打补丁的过程中,显示是用FAILED的。不知道是补丁没有打上,还是这个补丁就根本没有用,总之,到现在为止,LINUX选择出口不理想的毛病还是一直存在的,所以我只有改变思路,换另一种办法了解决问题了。


最后的内网机子选择路由出口严重滞后的问题,我一直在搜索资料,在这里发帖子也是为了和大家更好的讨论。
----
寒冷时,有关自己的左手来温暖自己的右手!!!
[Original] [Print] [Top]
Subject: Re: LINUX网通电信双线路代理主机的失败经历
Author: daveywjl    Posted: 2006-09-12 16:45    Length: 167 byte(s)
[Original] [Print] [Top]
你说的默认网关是指Linux主机上的?既然你为不同的目标地址都设了路由,默认网关随便指向哪边都可以了。有点不明白,再说说。
equalize这补丁我用起来也很慢。
----

易初莲花牌的垃圾袋漏水的。
[Original] [Print] [Top]
« Previous thread
为什么radhat9.0的防火墙不能关闭呢?急啊!
Linux防火墙和代理服务器应用
2
Next thread »
全国第1本以实战为主Linux黑客书籍
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 02:58:36, cost 0.04478907585144 ms.