扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
有关路由策略管理和多播地址管理的部分
路由策略数据库管理命令
8.1.缩写
rule、ru
8.2.对象
路由策略数据库的规则用于控制选择路由的算法。
Internet上采用的路由算法一般是基于数据包目的地址的。理论上,也可以由TOS域决定,不过这没有实际应用。要了解经典路由算法的详细情况请参考RFC-1812。
而在某些情况下,我们不只是需要通过数据包的目的地址决定路由,可能还需要通过其他一些域:源地址、IP协议、传输层端口甚至数据包的负载。这就叫做:策略路由(policy routing)。
注意:策略路由(policy routing)不等于路由策略(rouing policy)。
在这种情况下,传统的基于目的地址的路由表就无法满足要求了,需要使用路由策略数据库(routing policy database,RPDB)代替,通过它选择执行某些路由。这些规则可以由很多不同的状态,而且它们没有天生的次序,要由系统管理员决定。RPDB可以匹配以下的域:
数据包的源地址;
数据包的目的地址;
服务类型(Type of Service);
进入的网络接口;
匹配IP协议和传输层端口也是可能的,不过这要依靠iptables或者ipchains通过fwmark为某些数据包做标记,并重定向。
每个路由策略由一个选择符(selector)和一个操作(action)组成。系统按照顺序搜索路由策略数据库,把选择符和{源地址、目的地址、进入接口、tos、fwmark}等关键词进行匹配,如果匹配成功,就执行action定义的操作。操作或者成功返回,或者失败并且中止对路由策略。否则,系统继续查询路由策略数据库。
操作如何定义?最原始的操作是选择下一跳(nexthop)和输出设备(output device)。Cisco IOS使用这种方式,我们姑且把这叫做匹配并设置(match &set)。而Linux的方式则更为灵活,Linux允许的操作包括:基于目的地址的路由表查询以及按照最长匹配的原则从路由表中选择路由。因此,匹配并设置(match &set)的方式只是一个最简单的特例而已。
再系统启动时,内核会为路由策略数据库配置三条缺省的规则:
不要混淆路由表和策略:规则指向路由表,多个规则可以引用一个路由表,而且某些路由表可以没有策略指向它。如果系统管理员删除了指向某个路由表的所有规则,这个表就没有用了,但是仍然存在,直到里面的所有路由都被删除,它才会消失。
8.3.规则类型
路由策略规则数据库可以包括如下类型的规则:
8.4.命令
add、delete、show(或者list)
8.5.ip rule add -- 插入新的规则
ip rule delete -- 删除规则
缩写:add、a;delete、del、d
参数
警告
使用上面两个命令对路由策略数据库进行的任何修改都不会马上生效。只有使用ip route flush cach命令刷新路由缓存之后才会生效。
示例
8.7.ip rule show -- 列出路由规则
缩写:show、list、sh、ls、l
参数
好消息,这个命令没有参数。
输出格式
每行第一部分的数字是规则的优先级,接着是选择符。
关键词lookup后面接着路由表识别符。
如果规则要进行网络地址转换,还需要一个关键词map-to设置转换以后的地址。
上面的示例非常简单,192.203.80.0/24和193.233.7.0/24组成内部网络,但是它们向外发送数据包要通过不同的路由。主机193.233.7.83和外界会话时,地址需要转换为192.203.80.144。
9.ip maddress -- 多播地址管理
9.1.对象
这个命令管理的对象是多播地址。
9.2.命令
add、delete、show(或者list)
9.3.ip maddress show -- 列出多播地址
缩写:show、list、sh、ls、l
参数
dev NAME(defautl) 设备名
输出格式
kuznet@alisa:~ $ ip maddr ls dummy
2: dummy
link 33:33:00:00:00:01
link 01:00:5e:00:00:01
inet 224.0.0.1 users 2
inet6 ff02::1
kuznet@alisa:~ $
输出的第一行是设备的索引和设备名。后面几行是多播地址,每行由协议识别符开头。关键词link表示这是链路层多播地址。
如果一个多播地址有几个用户,那么用户数就在users关键词之后列出。上面的例子没有出现关键词static,它表示这个地址是由ip maddr add命令加入的。
9.4.ip maddress add -- 加入多播地址
ip maddress delete -- 删除多播地址
缩写:add、a;delete、del、d
简介
使用这两个命令,我们可以添加/删除在网络接口上监听的链路层多播地址。这个命令只能管理链路层地址。
参数
address LLADDRESS(default) 链路层多播地址
dev NAME 加入/脱离这个多播地址的设备
示例
让我们继续上一小节的例子
netadm@alisa:~ # ip maddr add 33:33:00:00:00:01 dev dummy
netadm@alisa:~ # ip -O maddr ls dummy
2: dummy
link 33:33:00:00:00:01 users 2 static
netadm@alisa:~ # ip maddr del 33:33:00:00:00:01 dev dummy
注意:ip命令和内核都不会检查多播地址的有效性。这意味着你可以使用unicast地址代替多播地址。大多数驱动都会忽略unicast地址,但是有些驱动(例如:tulip)会把这个unicast地址加入其过滤器。这样作的效果有些奇怪,如果你使用了别的主机或者路由器的地址作为多播地址,你就可以收到发送到它们的数据包。不过,这并非一个bug,而是内核的一个功能。它可以用于网络监视。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者