0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于路由策略数据库(RPDB)

OSC开源社区 来源:OSC开源社区 作者:OSC开源社区 2022-10-12 09:50 次阅读

SIMPLE

Linux策略路由详解

概述

在Linux中,我们通常使用route 命令来做路由信息的管理。但是该命令仅仅只能用于基本路由信息的管理,面对功能更加强大的基于策略的路由机制,route 命令就显得捉襟见肘。在传统路由算法中,只能基于目的地址进行路由选择。但是如果对路由选择有更复杂的要求,比如针对不同源地址、传输层端口甚至是payload进行更细致的路由控制,传统的基于目的地址的路由表就无法满足需求了,需要使用功能更加强大的路由策略数据库routeing database: RPDB 来处理。

命令安装:

安装很简单,按照如下命令安装即可。

# 查看iproute是否安装
# 查看iproute版本
]# ip -V
ip utility, iproute2-ss170501

# 安装
yum install iproute -y

路由策略数据库(RPDB):

RPDB是存放策略的数据库,被策略匹配的数据包会执行相关的操作,可以通过ip rule 来管理。

在系统启动时,内核会配置三条默认策略:

# 通过ip rule show可以查看当前RPDB中的规则
]# ip rule show
0: from all lookup local # 优先级为0,匹配任意源地址,查询local路由表转发
32766: from all lookup main # 优先级为32766,匹配任意源地址,查询main路由表转发
32767: from all lookup default # 优先级为32767,匹配任意源地址,查询default路由表转发

1. local路由表是一个特殊的路由表,包含本地地址和广播地址的高优先级控制路由, 例如访问127.0.0.1就是参考的这条规则。
2. main路由表是一个通用路由表,正常通过route -n命令操作的就是这个路由表。
3. default路由表默认是一个空表,除非有特别的要求,否则保持为空即可。

每条策略路由的规则由一个选择器 和一个动作 组成,RPDB按照优先级顺序进行规则匹配,优先级数字越小越优先。被选择器 匹配的报文会执行对应的操作,操作如果成功,则根据指定的路由转发数据,之后终止RPDB匹配,如果执行失败,则报错并且终止RPDB匹配。否则RPDB将继续执行下一条规则。

ip rule命令说明

# 执行ip rule help可以查看帮助信息,如果需要更详细的帮助信息,可以执行man ip-rule
]# ip rule help
Usage: ip rule { add | del } SELECTOR ACTION
ip rule { flush | save | restore }
ip rule [ list [ SELECTOR ]]
SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
[ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ]
[ uidrange NUMBER-NUMBER ]
ACTION := [ table TABLE_ID ]
[ nat ADDRESS ]
[ realms [SRCREALM/]DSTREALM ]
[ goto NUMBER ]
SUPPRESSOR
SUPPRESSOR := [ suppress_prefixlength NUMBER ]
[ suppress_ifgroup DEVGROUP ]
TABLE_ID := [ local | main | default | NUMBER ]

选择器(SELECTOR)

from PREFIX: 根据源地址前缀匹配
to PREFIX: 根据目的地址前缀匹配
tos TOS: 根据ip包头TOS字段的值进行匹配
fwmark FWMARK[/MASK]: 配合iptables -t mangle 打标记,根据标记进行匹配
iif STRING: 选择要匹配的数据包的输入接口
oif STRING: 选择要匹配的出接口设备。只对来自本地套接字并与设备绑定的报文有效
pref NUMBER: 规则的优先级。这里的pref可以替换成priority或者order,效果是一样的。

动作(ACTION)

table TABLE_ID: 在规则匹配的时候,指定使用的路由表,被匹配的数据包将按照指定的路由表进行路由。此处的table也可以替换为lookup,效果是一样的。
blackhole: 丢弃匹配的数据包。
unreachable: 丢弃匹配的数据包,并生成"Network is unreachable"错误。
prohibit: 丢弃匹配的数据包,并生成"Communication is administratively prohibited"错误。

查看策略:

]# ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

添加策略:

# 来自192.168.22.3的数据包,都参考id为10的路由表进行转发
ip rule add from 192.168.22.3 table 10

# 设置规则的优先级为100,发往192.168.23.0/24的数据包,都参考id为100的路由表进行转发
ip rule add to 192.168.23.0/24 table 20 pref 100

# 给协议是tcp,源地址是192.168.24.0/24,目的端口是80的数据包,在路由前打上1的标记
iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80 -s 192.168.24.0/24 -j MARK --set-mark 1
# 将标记为1的数据包,参考id为iptables_table的路由表进行转发
ip rule add fwmark 1 table iptables_table

# 来自192.168.25.0/24的数据包都将丢弃
ip rule add from 192.168.25.0/24 blackhole
ip rule add from 192.168.26.0/24 unreachable
ip rule add from 192.168.27.0/24 prohibit

注意,添加动作是table TABLE_ID时,默认情况下,只能添加数字,如果添加的是字符的话,会有如下报错。

]# ip rule add from 192.168.22.3 table iptables_table
Error: argument "iptables_table" is wrong: invalid table ID

这就带来一个问题,如果时间久了,就不知道自己当时添加的这个路由表是啥意思了。所以需要有一个数字和字符的对应关系。这个对应关系,就保存在/etc/iproute2/rt_tables 这个文件里。

#编辑/etc/iproute2/rt_tables,添加iptables_table表的id为100
]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#自定义路由表
100 iptables_table
#
# local
#
#1 inr.ruhep

添加之后,就可以正常执行ip rule add from 192.168.22.3 table iptables_table 了。并且执行ip rule show的时候,路由表也是按照定义的字符显示。

删除策略:

# 根据路由表删除
ip rule del table iptables_table

# 根据来源地址删除
ip rule del from 192.168.22.0/24

# 根据优先级删除
ip rule del pref 100

# 根据标记删除
ip rule del fwmark 100

路由表管理:

目前看,通过ip rule命令,可以根据不同的规则,选择不同的路由表来转发数据。那么如何对不同的路由表做管理呢? 很简单,只要在正常执行的命令之后,加上table TABLE_ID 即可。

查看路由表路由条目:

# ip route show等价于ip route show table main,也就是查的是默认的main路由表
ip route show

#查看指定目标的路由
ip route show 192.168.22.0/24

#查看指定路由表iptables_table中的路由
ip route show table iptables_table
ip route show table 100


添加路由:

# 向iptables_table中添加默认路由
ip route add default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_table

]# ip route show table 100
default via 192.168.22.1 dev eth1 src 192.168.22.3


删除路由:

# 删除iptables_table路由表中的路由
ip route del default via 192.168.22.1 dev eth1 src 192.168.22.3 table iptables_tabl

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63380
  • 路由
    +关注

    关注

    0

    文章

    266

    浏览量

    41515

原文标题:Linux策略路由详解

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于SQL Server 2000数据库的安全性策略的研究

    基于SQL Server 2000数据库的安全性策略的研究
    发表于 10-10 15:07

    关于labview与access数据库的问题

    本帖最后由 王文斌104 于 2013-1-23 22:28 编辑 本人着急做一个labview连接的access数据库数据库已经建好,数据也会存入数据库里,我用的LABSQL
    发表于 01-23 22:25

    求助关于labview查询access数据库的问题

    初学者,想学习链接数据库方面的知识,遇到不少问题,下面求助各位大神,关于查询数据库的问题问题:如何通过“零部件名称”“故障模式”查询数据库,现在能实现两个输入控件都赋值查找
    发表于 03-14 21:18

    关于LabSQL数据库

    我想在LabSQL数据库中添加用户,该怎么操作啊,跪求指导
    发表于 04-19 12:43

    数据库连接

    在利用 LabVIEW数据库工具包操作数据库之前,需要先连接数据库,这就像操作文件之前,先要打开文件一样。在这里我们利用UDL连接数据库。Microsoft设计的ODBC标准只能访问关
    发表于 06-29 21:29

    数据库管理

    如题:用labview操作access数据库做公司测试流程管控。因测试数据量大,数据生成多,现在accdb文件已经有50M了,现在发现数据库在本地操作都很快,但是放在远端服务器后操作就
    发表于 11-08 16:58

    LABVIEW对数据库的操作

    关于数据库,只要知道简单的SQL语言,就可以轻松的进行操作。有些复杂的测试数据,非常适合用数据库存储。附件是我编写的吉时利2400测***曲线的例子,标准件的波形图保存在了
    发表于 12-10 21:23

    AD数据库攻略手册

    策略与OU中的组没有关系,不要混淆了。系统管理员可利用组策略来管理AD数据库中的计算机与用户。例如:用户桌面环境、计算机启动/关机所执行脚本文件,用户登录/注销所执行的脚本文件、文件重定向、软件安装等。
    发表于 07-18 06:21

    LabVIEW登录程序(数据库版)

    的程序讲解。附带不同类别下功能使用情况不同。下面是简单的程序截图。备注:1、数据库是其他数据库或者连接不上的可以看我以前的经验贴关于各种数据库连接方式及常见问题处理帖子。2、没有lab
    发表于 07-19 09:34

    关于Labview数据库操作的内存问题

    Labview频繁对数据库进行操作,关闭连接放在最后会对内存有影响吗?如图中的A和B两种方式,事件结构中每个分支都是对数据库进行操作,图中A和B哪一种方式更好或者都可以?
    发表于 10-12 15:27

    MySQL数据库使用

    关于MySQL数据库的简单操作
    发表于 10-24 14:32

    关于时序数据库的内容

    简介: 这是一篇无法一口气读完的、文字过万[正文字数14390]的长文,这是一个无法中途不上厕所就看完的、关于时序数据库的视频[时长111分钟]分享的文字整理..大家好,很开心能够和大家一起交流时序数据库
    发表于 07-12 08:00

    最新国产数据库排名

    最新国产数据库排名,本篇文章约14000字,包含如下5部分内容:1.开篇2.国产数据库产品清单,包括产品名称,产品类别及厂商名称;3.国产数据库各产品概述,产品基本介绍、应用场景等;4.国产
    发表于 07-28 08:06

    关于波形存储至Access数据库和从数据库调用数据的几个问题

    VI"(图2)将其转换为2进制流后存入数据库。但我在做从数据库调用数据(图3)时会比较慢,比如我存储的数据总量为大概80万条,那么我从数据库
    发表于 09-22 17:21

    什么是数据库

    什么是数据库数据库的主要特点有哪些?数据库的基本结构是由哪几部分组成的?
    发表于 09-23 09:09