Net-策略路由

1.策略路由


策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的。

例如我们可以有这样的策略:“所有来直自网A的包,选择X路径;其他选择Y路径”,或者是“所有TOSA的包选择路径X;其他选者路径Y”。


Cisco 的网络操作系统 (Cisco IOS) 11.0开始就采用新的策略性路由机制。而Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了多路由表以及规则的概念。



2.linux方式


2.1 多路由表(multiple Routing Tables)


传统的路由算法是仅使用一张路由表的。但是在有些情形底下,我们是需要使用多路由表的。例如一个子网通过一个路由器与外界相连,路由器与外界有两条线路相连,其中一条的速度比较快,一条的速度比较慢。对于子网内的大多数用户来说对速度并没有特殊的要求,所以可以让他们用比较慢的路由;但是子网内有一些特殊的用户却是对速度的要求比较苛刻,所以他们需要使用速度比较快的路由。如果使用一张路由表上述要求是无法实现的,而如果根据源地址或其它参数,对不同的用户使用不同的路由表,这样就可以大大提高路由器的性能。


2.2 规则 (rule)


规则是策略性的关键性的新的概念。我们可以用自然语言这样描述规则,例如我门可以指定这样的规则:

  规则一:“所有来自192.16.152.24IP包,使用路由表10,本规则的优先级别是1500

  规则二:“所有的包,使用路由表253,本规则的优先级别是32767


  我们可以看到,规则包含3个要素:

  什么样的包,将应用本规则(所谓的SELECTOR,可能是filter更能反映其作用);

  符合本规则的包将对其采取什么动作(ACTION),例如用那个表;

  本规则的优先级别。优先级别越高的规则越先匹配(数值越小优先级别越高)。



3. linux策略路由配置方式



传统的linux下配置路由的工具是route,而实现策略性路由配置的工具是iproute2工具包。


Linux最多可以支持255张路由表,其中有3张表是内置的:

255 本地路由表(Local table)本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。

254 主路由表(Main table)如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。一般是普通的路由。

253 默认路由表(Default table)一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。

0 保留


路由配置命令的格式如下:Usage: ip route listSELECTOR


首先我们可以看看路由表默认的所有规则:


      #ip rule list

      0:          from all lookup local

      32766:   from all lookup main

      32767:   from all lookup default


规则0,它是优先级别最高的规则,规则规定,所有的包,都必须首先使用local表(254)进行路由。本规则不能被更改和删除。

规则32766,规定所有的包,使用表main进行路由。本规则可以被更改和删除。

规则32767,规定所有的包,使用表default进行路由。本规则可以被更改和删除。


  在默认情况下进行路由时,首先会根据规则0在本地路由表里寻找路由,如果目的地址是本网络,或是广播地址的话,在这里就可以找到合适的路由;如果路由失败,就会匹配下一个不空的规则,在这里只有32766规则,在这里将会在主路由表里寻找路由;如果失败,就会匹配32767规则,即寻找默认路由表。如果失败,路由将失败。重这里可以看出,策略性路由是往前兼容的。




4.策略路由的应用


基于源地址选路( Source-Sensitive Routing

  如果一个网络通过两条线路接入互联网,一条是比较快的ADSL,另外一条是比较慢的普通的调制解调器。这样的话,网络管理员既可以提供无差别的路由服务,也可以根据源地址的不同,使一些特定的地址使用较快的线路,而普通用户则使用较慢的线路,即基于源址的选路。


根据服务级别选路( Quality of Service

  网络管理员可以根据IP报头的服务级别域,对于不同的服务要求可以分别对待对于传送速率、吞吐量以及可靠性的有不同要求的数据报根据网络的状况进行不同的路由。


节省费用的应用

  网络管理员可以根据通信的状况,让一些比较大的阵发性通信使用一些带宽比较高但是比较贵的路径一段短的时间,然后让基本的通信继续使用原来比较便宜的基本线路。例如,管理员知道,某一台主机与一个特定的地址通信通常是伴随着大量的阵发性通信的,那么网络管理员可以安排一些策略,使得这些主机使用特别的路由,这些路由是按需拨号,带宽比较高的线路,通信完成以后就停止使用,而普通的通信则不受影响。这样既提高网络的性能,又能节省费用。


负载平衡(Load Sharing

根据网络交通的特征,网络管理员可以在不同的路径之间分配负荷实现负载平衡。



5.linux下策略路由的实现



基于源地址选路       192.168.122.10/24  

Client --------------->  


Linux GW eth0 192.168.122.20/24-----------------  eth1  2.2.2.1/24   10M

                                         ------------------ eth2  3.3.3.1/24   2M                    


Client:

# ip route add 0/0 via 192.168.122.20


Linux GW:


自定义2个路由表,分别为test1test2

# vim /etc/iproute2/rt_tables

      255     local

      254     main

      253     default

      200     test2

    100     test1

      0       unspec


# ip route add default via 2.2.2.1 tabletest1

# ip route add default via 3.3.3.1 tabletest2

# ip route list table test1

default via 2.2.2.1 dev eth1

# ip route list table test2

default via 3.3.3.1 dev eth1


使用防火墙的mangle表对不同的源地址数据包打标记区分

# iptables -t mangle -A PREROUTING -miprange --src-range 192.168.122.1-192.168.122.100 -j MARK --set-mark 1

# iptables -t mangle -A PREROUTING -miprange --src-range 192.168.122.101-192.168.122.200 -j MARK --set-mark 2


ip命令中调用防火墙的标记,不同的标记使用不同的路由表

# ip rule add fwmark 1 table test1

# ip rule add fwmark 2 table test2



负载平衡



                                                                          /                                          

Client --------------------------->   Linux GW -------------------------    eth1  2.2.2.1/24 10M                      

192.168.122.10/24        eth0 192.168.122.254/24  ------------eth2  3.3.3.1/24   2M                    



Client:

# ip route add 0/0 via 1.1.1.2


Linux GW:

# ip route add default nexthop via 2.2.2.1dev eth1 nexthop via 3.3.3.1 dev eth2