ip rule命令
背景
一般情况下的路由算法仅仅使用目的地址做出路由决策,在Linux操作系统提供了一种根据其他字段(源地址,协议,端口等等)进行路由决策的方案,成为“策略路由”,策略路由下,进入系统的数据先匹配策略表选择一个路由表,然后基于目的地址的路由系统(最长匹配规则)
在Linux启动时内核为策略路由数据库(RPDB)默认配置三个策略表
- 优先级:0,选择器:匹配任何内容,查找本地表local(ID 255),本地表是一种特殊的路由表,包含本地和广播地址的高优先级控制路由,该表不能被删除或者覆盖
- 优先级:32766,选择器:匹配任何内容,操作:查找路由表main(ID 254)。主表是包含所有非策略路由的常规路由表。此规则可以被删除和/或由其他规则覆盖管理员
- 优先级: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路由表,如下图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律