"); //-->
策略路由
我们不仅要根据目的地地址,还要根据其他数据包字段(源地址、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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。