Linux最多可以支持255张路由表,其中有3张表是内置的:
表255 本地路由表(Local table)本地接口地址,广播地址,已及NAT地址都放在这个表。该路由表由系统自动维护,管理员不能直接修改。
表254 主路由表(Main table)如果没有指明路由所属的表,所有的路由都默认都放在这个表里,一般来说,旧的路由工具(如route)所添加的路由都会加到这个表。一般是普通的路由。
表253 默认路由表(Default table)一般来说默认的路由都放在这张表,但是如果特别指明放的也可以是所有的网关路由。
表 0 保留
路由配置命令的格式如下:
ip route list ( table 【 main | local | default | route_id数字 】 ) 查看路由表
ip route 【 change | del | add | append | replace | monitor 】 ROUTE (table 【 main | local | default | route_id数字 】) 增删改
ip route add 192.168.3.0/24 via 192.168.0.3 table 1
--向路由表1添加一条路由,子网192.168.3.0(子网掩码是255.255.255.0)的网关是192.168.0.3。
Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了上面的多路由表以及规则的概念。
要配置一个策略路由有2步:
1、在自定义路由表中添加要走的路由 ip route add xxx table table_num
2、增加策略,使得符合该策略的流量走第一步所定义的路由表 ip rule add 策略 【table tablenum 或 动作】
在Linux里,总共可以定义232个优先级的规则,一个优先级别只能有一条规则,其中有3个规则是默认的,优先级别越高的规则越先匹配(数值越小优先级别越高)。
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 】
例子:
# ip rule list 【系统默认的三条路由策略】
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
ip rule add from 0/0 table 1 pref 32800 --向规则链增加一条规则,规则匹配的对象是所有的数据包,动作是选用路由表1的路由,这条规则的优先级是32800。
ip rule add from 192.168.3.112/32 tos 0x10 table 2 pref 1500 将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,动作是使用路由表2,这条规则的优先级是1500
ip rule add from 192.168.3.112/32 tos 0x10 prohibit pref 1500 将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,动作是丢弃报文并发送 COMM.ADM.PROHIITED的ICMP信息,这条规则的优先级是1500
ip rule add from 192.168.3.112/32 tos 0x10 reject pref 1500 将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,动作是单纯丢弃报文,这条规则的优先级是1500
ip rule add from 192.168.3.112/32 tos 0x10 unreachable pref 1500 将向规则链增加一条规则,规则匹配的对象是IP为192.168.3.112,tos等于0x10的包,动作是丢弃该包并发送 NET UNREACHABLE的ICMP信息,这条规则的优先级是1500