Fork me on GitHub

路由详解

1. 策略路由

  1) 介绍

  策略路由是一种比基于目标网络进行路由更加灵活的数据包路由转发机制。

  Linux最多可以支持255张路由表,其中有3张表是内置的:存在文件/etc/iproute2/rt_tables中

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

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

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

  表0 保留

  2) 路由配置命令 IP Route

  Usage: ip route list SELECTOR

       ip route { change | del | add | append | replace | monitor } ROUTE

  如果想查看路由表的内容,可以通过命令:

  ip route list table <table_number>

  ip -6 route list table <table_number> (对于IPv6)

  对于路由的操作包括change、del、add 、append 、replace 、 monitor这些。例如添加路由可以用:

  ip route add 0/0 via 192.168.0.4 table main

  ip route add 192.168.3.0/24 via192.168.0.3 table 1

  第一条命令是向主路由表(main table)即表254添加一条路由(而不是添加一条规则),路由的内容是设置192.168.0.4成为网关。

  第二条命令代表向路由表1添加一条路由,子网192.168.3.0(子网掩码是255.255.255.0)的网关是192.168.0.3.

  在多路由表的路由体系里,所有的路由的操作,例如往路由表添加路由,或者在路由表里寻找特定的路由,需要指明要操作的路由表,所有没有指明路由表,默认是对主路由表(表254)进行操作。而在单表体系里,路由的操作是不用指明路由表的。

  3) 规则的配置 IP Rule

  在Linux里,总共可以定义232个优先级的规则,一个优先级别只能有一条规则,即理论上总共可以有232条规则。其中有3个规则是默认的。命令用法如下:

  Usage: ip rule [ list | add | del ] SELECTOR ACTION

  SELECTOR := [ from PREFIX ] [ to PREFIX ] [tos TOS ] [ dev STRING ] [ pref NUMBER ]

  ACTION := [ table TABLE_ID ] [ nat ADDRESS ] [ prohibit | reject | unreachable ] [ flowid CLASSID ]

  TABLE_ID := [ local | main | default | new | NUMBER ]

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

  root@netmonster# 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规则,即寻找默认路由表。如果失败,路由将失败。 从这里可以看出,策略路由是往前兼容的。

  还可以添加规则:

    ip rule add [from 0/0] table 1 pref 32800

  ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500 prohibit

  第一条命令将向规则链增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由,这条规则的优先级是32800.

  第二条命令将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112, tos等于0x10的包,使用路由表2,这条规则的优先级是1500,动作是丢弃。

  添加以后,我们可以看看系统规则的变化。

  router># ip rule

  0: from all lookup local

  1500 from 192.168.3.112/32 [tos 0x10] lookup 2

  32766: from all lookup main

  32767: from all lookup default

  32800: from all lookup 1

  上面的规则是以源地址为关键字,作为是否匹配的依据的。除了源地址外,还可以用以下的信息:

  From -- 源地址

  To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)

  Tos -- IP包头的TOS(type of sevice)域

  Dev -- 物理接口

  Fwmark -- 防火墙参数

  采取的动作除了指定表,还可以指定下面的动作:

  Table 指明所使用的表

  Nat 透明网关

  Action:

  prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息

  Reject 单纯丢弃该包

  Unreachable丢弃该包,并发送 NET UNREACHABLE的ICMP信息

  4)IP Rule 与 IP Route 的区别

  不要混淆路由表(route)和规则(rule):规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。

   5)例子

Destination    Netmask    Gateway     Interface      Metric
0.0.0.0   0.0.0.0   192.168.123.254   192.168.123.88    1 #缺省路由,目的地址不在本路由表中的数据包,经过本机的 192.168.123.88 接口发到下一个路由器 192.168.123.254
127.0.0.0   255.0.0.0   127.0.0.1    127.0.0.1    1        #发给本机的网络包
192.168.123.0    255.255.255.0    192.168.123.68    192.168.123.68    1 #直连路由。目的地址为 192.168.123.0/24 的包发到本机 192.168.123.88 接口
192.168.123.88    255.255.255.255    127.0.0.1    127.0.0.1    1        #目的地址为 192.168.123.88的包是发给本机的包
192.168.123.255    255.255.255.255    192.168.123.88    192.168.123.88    1 #广播包的网段是 192.168.123.0/24,经过 192.168.123.88 接口发出去
224.0.0.0    224.0.0.0    192.168.123.88    192.168.123.88    1             #多播包,经过 192.168.123.88 接口发出去
255.255.255.255    255.255.255.255    192.168.123.68    192.168.123.68    1 #全网广播包
Default Gateway: 192.168.123.254

  各字段说明:

  destination:目的网段

  mask:子网掩码。子网掩码对于 IP 网络地址可以是一适当的子网掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255。定义路由时由于目标地址和子网掩码之间的关系,目标地址不能比它对应的子网掩码更为详细。换句话说,如果子网掩码的一位是 0,则目标地址中的对应位就不能设置为 1。

  interface:到达该目的地的本路由器的出口ip

  gateway: 下一跳路由器入口的 ip,路由器通过 interface 和 gateway 定义调到下一个路由器的链路(所以网关地址不一定在本机上或本路由器上)。通常情况下,interface 和 gateway 是同一网段的metric跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。

  http://www.cnblogs.com/sammyliu/p/4713562.html

  

 

posted @ 2015-10-07 13:53  落崖惊风  阅读(4991)  评论(0编辑  收藏  举报