Linux下网通、电信、教育多出口策略路由配置详解
Linux下网通、电信、教育多出口策略路由配置详解
一、处理流量分割的问题;二、解决双线负载均衡的问题。原文如下:
1、流量分割
首先是如何保证:回应来自某一个ISP的数据包时,仍然使用相同的ISP。
让我们先定义一些符号。令第一块网卡的名字叫eth1,而第二块网卡叫做eth2;然后设置网卡1的IP地址为221.200.0.2(CNC分配网址),网卡2 的IP地址为58.56.0.2(CTC分配网址);ISP1(联通)网关地址为221.200.0.1,ISP2(电信)网关地址为58.56.0.1;最后,ISP1(联通)的网络地址为211.200.0.0/30,ISP2(电信)的网络地址为58.56.0.0/30。
额外创建两个路由表,T1 和T2 ,加入到/etc//iproute2/rt_tables中。然后如下设置两个路由表中的路由:
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table T1
ip route add default via 221.200.0.1 table T1
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table T2
ip route add default via 58.56.0.1 table T2
没什么大不了的,不过是建立了通向该网关的一台路由,并使之成为默认网关,分别负责一个单独的上行流,并且为这两个ISP都作这样的配置。要指出的是,那条网络路由是必要条件,因为它能让我们找到那个子网内的主机,也包括上述的那台网关。
下一步,我们设置“main”路由表,把包通过网卡直接路由到与网卡相连的局域网上不失为一个好办法。要注意“src”参数,他们能够保证选择正确的出口IP地址。
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table main
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table main
然后,设置你的缺省路由:
ip route add default via 221.200.0.1
接着,设置路由规则。这实际上在选择用什么路由表进行路由。你需要确认当你从一个给定接口路由出数据包时,是否已经有了相应的源地址:你需要保证的就是如果你已经有了相应的源地址,就应该把数据包从相应的网卡路由出去:
ip rule add from 221.200.0.2 table T1
ip rule add from 58.56.0.2 table T2
以上命令保证了所有的回应数据都会从他们来的那块网卡原路返回。
现在,完成了非常基本的配置。这将对于所有运行在路由器上的所有进程起作用,实现IP伪装后,对本地局域网也将起作用。如果不进行伪装,那么你要么拥有两个ISP的地址空间,要么你想对两个ISP中的一个进行伪装。无论哪种情况,你都要添加规则,基于发包的主机在局域网内的IP地址,选择从哪个ISP路由出去。
2、负载均衡
第二个问题就是如何对通过两个ISP流出的数据进行负责均衡。如果你已经成功地实现了流量分割。这件事不难。
与选择两个ISP中的一个作为缺省路由不同,这次是设置缺省路由为多线路路由。在缺省内核中,这会均衡两个ISP的路由。像下面这样做(基于前面的流量分割实验):
ip route add default scope global nexthop via 221.200.0.1 dev eth1 weight 30 /
nexthop via 58.56.0.1 dev eth2 weight 70 (注意:与上面为同一行命令)
这样可以均衡两个ISP的路由。通过调整“weight”参数我们可以指定其中的一个ISP的优先权高于另一个。(具体:线路1的流量约占30%,线路1占70%)
应该指出,由于均衡是基于路由进行的,而路由是经过缓冲的,所以这样的均衡并不是100%精确。也就是说,对于一个经常访问的站点,总是会使用同一个ISP。
中国的现状这样设置是有缺陷的:因为网通和电信等的线路在沟通上存在问题,就是说从网通线路访问电信的网址不如直接从电信访问快,从电信访问网通也是如此。因此对于拥有不同种线路的路由器我们需要做基于目标地址的策略路由,同种线路的可以做上面的策略路由。如果你拥有多个ISP且某个ISP有多条线路,则可以把负载均衡与基于目标的策略路由结合起来。
做这样的策略路由来自于《QEL4.1 网吧版》,其相关说明部分如下:
从QEL4.1 版本开始,我们增加了多线路策略路由的功能。用户只需要简单地填写几个配置文件即可完成。
策略路由功能由qlcm 程序实现。这个程序在QEL4.0 上为1.0,包含了内核智能优化、抗DDOS、SYN 洪水攻击等功能。在4.1 版上,qlcm 版本为2.0,增加了arp 绑定,多线路策略路由功能。
qlcm 服务是QEL 服务器的核心服务,您可以restart qlcm 服务,但在任何情况下您都不应该停止它。关闭它会造成无法预料的后果,比如出现大量丢包,某些服务停止等。这样的故障不在我们技术支持的范围内。
qlcm 2.0 支持最大8 路外网线路,根据用户定义的配置文件自动判断工作模式,可以为每个外网出口单独定义路由表,也可以实现实现多条线路的负载均衡(即多链路带宽捆绑)。一般的硬件路由器只能支持23路外网线路,而且价格不菲。硬件路由器使用嵌入式CPU 和少量内存,处理性能有限,在处理过多路由时会超出处理能力。而使用PC 做路由则不受此限制。
QEL4.1 内核最大可以支持到255 路外线,我们随时可以修改qlcm,支持32 路或者更多的外线。
我们再来看一个具体例子的实现:
3.我们有三条固定IP 线路,一条是eth0(电信),网关为202.102.14.1,一条eth1(网通),网关为60.12.5.1,一条是教育网线路,网关为125.216.44.1,将etho(电信线路)作为默认网关,访问网通的数据走eth1,访问教育网的走eth2,
配置如下:
wan1.conf:
interface=eth0
gateway=202.102.14.1
defaultgw=yes
wan2.conf:
interface=eth1
gateway= 60.12.5.1
routefile=/etc/quick/IP_CNC.list
wan3.conf:
interface=eth2
gateway=125.216.44.1
routefile=/etc/quick/IP_EDU.list
这样就OK 了。新建一个IP_EDU.list 文本文件,其中定义了教育网的IP 段。
在这样的环境下,defaultgw=yes 只设定在某个网卡接口上。当访问已定义的路由时,走指定的网卡出去,否则走默认网关。
routefile= 后面填该线路对应的路由表文件。在安装时我们已经为您默认安装了两个文件:IP_CNC.list 和IP_CTC.list,这两个文件都在/etc/quick 目录下,其中IP_CNC.list 文件是网通路由表文件,IP_CTC.list 为电信路由表文件。
这两个文件的格式也很简单,每行一个IP 段,示例如下:
58.16.0.0/16
58.17.0.0/17
58.17.128.0/17
qlcm只能运行在《QEL4.1 网吧版》上,如果移植到其它Linux下会因为版本的不同而造成系统的崩溃。在不想更换系统的前提下,我们可以自己用IP命令来实现qlcm的功能模拟。
我们仍然以文章开始的实例来进行说明基于目的的策略路由设置。
1、首先建立通向不同ISP的路由表
ip route add 211.200.0.0/30 dev eth1 src 221.200.0.2 table 50
ip route add default via 221.200.0.1 table 50
ip route add 58.56.0.0/30 dev eth2 src 58.56.0.2 table 51
ip route add default via 58.56.0.1 table 51
没什么可说的,与前面相同,只是仅用数字表示路由表。
2、针对我们要访问的目标地址,选择不同的路由表,进行路由
因为有大量的网络地址需要设置不同的规则,采用命令模式不便于修改,所以做了一个简单的脚本文件,配置文件与qlcm采用相同的结构。
目录 返回
首页