策略路由是一种比基于目标网络进行路由更加灵活的数据包路由转发机制。html
Linux最多能够支持255张路由表,其中有3张表是内置的:存在文件/etc/iproute2/rt_tables中网络
表255 本地路由表(Local table) 本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。并发
表254 主路由表(Main table) 若是没有指明路由所属的表,全部的路由都默认都放在这个表里,通常来讲,旧的路由工具(如route)所添加的路由都会加到这个表。通常是普通的路由。app
表253 默认路由表(Default table)通常来讲默认的路由都放在这张表,可是若是特别指明放的也能够是全部的网关路由。工具
表0 保留spa
Usage: ip route list SELECTORrouter
ip route { change | del | add | append | replace | monitor } ROUTEhtm
若是想查看路由表的内容,能够经过命令:对象
ip route list table <table_number>blog
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)进行操做。而在单表体系里,路由的操做是不用指明路由表的。
在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信息
不要混淆路由表(route)和规则(rule):规则指向路由表,多个规则能够引用一个路由表,并且某些路由表能够没有策略指向它。若是系统管理员删除了指向某个路由表的全部规则,这个表就没有用了,可是仍然存在,直到里面的全部路由都被删除,它才会消失。
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