新闻  |   论坛  |   博客  |   在线研讨会
linux: ip rule 用法详解
电子禅石 | 2024-11-12 09:40:19    阅读:892   发布文章

策略路由

我们不仅要根据目的地地址,还要根据其他数据包字段(源地址、IP 协议、传输协议端口甚至

数据包有效负载)来不同地路由数据包。此任务称为策略路由。Linux 策略路由是一种基于

策略的路由机制,相对于传统的基于目的地址的路由机制,它可以提供更灵活和强大的路由

控制能力。


在 Linux 中,策略路由通过使用路由策略数据库(RPDB)来实现,它可以根据不同的源地址、

传输层端口和 payload 等条件进行更细致的路由控制。


每条策略路由的规则由一个选择器和一个动作组成,RPDB 按照优先级顺序进行规则匹配,

优先级数字越小越优先。被选择器匹配的报文会执行对应的操作,操作如果成功,

则根据指定的路由转发数据,之后终止 RPDB 匹配;如果执行失败,则报错并且终止 

RPDB 匹配。否则 RPDB 将继续执行下一条规则。


在启动时,内核配置默认的 RPDB,包括三个规则:


优先级:0,选择器:匹配任何内容,操作:查找路由表本地(ID 255)。

本地表是一种特殊的路由表,包含本地和广播地址的高优先级控制路由

优先级:32766,选择器:匹配任何内容,操作:查找路由表main(ID 254)。

主表是包含所有非策略路由的常规路由表。此规则可以被删除和/或由其他规则覆盖管理员

优先级:32767,选择器:匹配任何内容,操作:查找路由表default(ID 253)。

默认表为空。如果没有先前的默认规则选择数据包,则它将保留用于某些后处理。

这条规则也可能将被删除

**注:**不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,

而且某些路由表可以策略指向它。如果系统管理员删除了指向某个路由表的所有规则,

这个表没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。


linux 系统中,可以自定义从 1-252个路由表,其中,linux 系统维护了4个路由表:


0#表: 系统保留表


253#表: default table 没特别指定的默认路由都放在该表


254#表: main table 没指明路由表的所有路由放在该表


255#表: local table 保存本地接口地址,广播地址、NAT地址 由系统维护,

用户不得更改

每个 RPDB 条目都有附加属性。每个规则都有一个指向某个路由表的指针。

NAT 和伪装规则有一个属性来选择要翻译/伪装的新 IP 地址。除此之外,

规则还有一些可选的路由拥有的属性,即领域。这些值不会覆盖路由表中包含的值。

它们仅在路由未选择任何属性时使用。


RPDB 可能包含以下类型的规则:


unicast:规则规定返回在规则引用的路由表中找到的路由

blackhole:规则规定悄悄地丢弃数据包

unreachable:规则规定生成“网络不可达”错误

prohibit:规则规定生成“管理禁止通信”错误

nat:规则规定将IP数据包的源地址转换为其他值

————————————————


                        




                        

                        

原文链接:https://blog.csdn.net/qq_36803941/article/details/135534711


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客