ip rule命令

背景

  一般情况下的路由算法仅仅使用目的地址做出路由决策,在Linux操作系统提供了一种根据其他字段(源地址,协议,端口等等)进行路由决策的方案,成为“策略路由”,策略路由下,进入系统的数据先匹配策略表选择一个路由表,然后基于目的地址的路由系统(最长匹配规则)

在Linux启动时内核为策略路由数据库(RPDB)默认配置三个策略表

  1. 优先级:0,选择器:匹配任何内容,查找本地表local(ID 255),本地表是一种特殊的路由表,包含本地和广播地址的高优先级控制路由,该表不能被删除或者覆盖
  2. 优先级:32766,选择器:匹配任何内容,操作:查找路由表main(ID 254)。主表是包含所有非策略路由的常规路由表。此规则可以被删除和/或由其他规则覆盖管理员
  3. 优先级:32767,选择器:匹配任何内容,操作:查找路由表默认值(ID253)。默认表为空。如果没有先前的默认规则选择数据包,则它将保留用于某些后处理。这条规则也可能将被删除。

ip rule命令

ip rule的命令格式

Usage: ip rule { add | del } SELECTOR ACTION prio NUMBER
       ip rule { flush }
       ip rule [ list ]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] 
      [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] ACTION := [ table TABLE_ID ] [ nat ADDRESS ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] TABLE_ID := [ local | main | default | NUMBER ]

一些常用的选项

  • type TYPE (default):规则类型
  • from PREFIX:选择要匹配的源前缀
  • to PREFIX:选择要匹配的目的前缀
  • iif NAME:选择要匹配的传入设备。如果接口是环回,则该规则仅匹配源自此主机的数据包。这意味着您可以为转发的数据包和本地数据包创建单独的路由表,从而完全隔离它们。
  • oif NAME:选择要匹配的传出设备。传出接口仅适用于来自绑定到设备的本地套接字的数据包
  • tos TOS/dsfield TOS:选择要匹配的TOS值
  • fwmark MARK:选择要匹配的标记值
  • priority PREFERENCE:此规则的优先级。每个规则都应该有一个显式设置的唯一优先级值
  • table TABLEID:如果规则选择器匹配,则要查找的路由表标识符。也可以使用查找而不是表格

一开始学的时候经常分不清楚ip rule和ip route的区别,首先ip rule和ip route都是新型的IP配置命令,用于替换原来的ifconfig,route,arp等命令,下面是一个例子

在命令行下输入ip rule,如下:

最左边的数字是系统内策略数据库的三个表,数字最小优先级最高,在进行路由决策时,如果策略数据库匹配则会根据最右端的路由表进行路由查找

增加一个策略

ip rule add

如下图是创建一个策略表的例子

如图所述命令的意思是,创建一个策略表,规则是源地址为192.168.88/24网,如果一个数据包匹配这个策略表则查找路由表23进行路由处理,可以看到220的优先级大于main(在/etc/iproute2/rt_tables定义)路由表所在的优先级,如果路由表23里面有符合的路由规则可直接进行路由,

如果没有prio参数,系统会自动指定一个优先级,需要强调的是如果prio冲突仍然会添加成功。

删除一个策略

ip rule del proi

刷新路由规则

ip rule flush

列出路由规则

ip rule list

ip route命令

ip route用于替换route命令,参考ip rule我们知道,系统可以维护1-252个路由表,而route命令只能操作main路由表,如下图

 

 

posted on 2022-03-11 11:32  sudochen  阅读(2866)  评论(0编辑  收藏  举报

导航