ip rule命令用于路由策略数据库管理,操纵路由策略数据库中的规则,控制路由选择算法。该命令的用法如下:
ip [ OPTIONS ] rule { COMMAND | help }ip rule
[ list [ SELECTOR ]]ip rule { add | del } SELECTOR ACTIONip rule { flush | save | restore }SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] [ iif STRING ] [ oif STRING ] [ pref NUMBER ] [ l3mdev ] [ uidrange NUMBER-NUMBER ] [ ipproto PROTOCOL ] [ sport [ NUMBER | NUMBER-NUMBER ] ] [ dport [ NUMBER | NUMBER-NUMBER ] ] [ tun_id TUN_ID ]ACTION := [ table TABLE_ID ] [ protocol PROTO ] [ nat ADDRESS ] [ realms [SRCREALM/]DSTREALM ] [ goto NUMBER ] SUPPRESSORSUPPRESSOR := [ suppress_prefixlength NUMBER ] [ suppress_ifgroup GROUP ]TABLE_ID := [ local | main | default | NUMBER ]
互联网中使用的经典路由算法仅根据数据包的目的地址做出路由决策(理论上,但实际上,是根据TOS字段)。
在某些情况下,我们希望不仅根据目的地址,而且根据其他数据包字段(源地址、IP协议、传输协议端口甚至数据包有效载荷)对数据包进行不同的路由转发。此任务称为“策略路由(Policy Routing)”。
为了解决这个问题,传统的基于目的地址的路由表(根据最长匹配规则排序)被替换为“路由策略数据库(Routing Policy DataBase)”(或RPDB),该数据库通过执行一组规则来选择路由。
每个策略路由规则都由一个selector选择器和一个action动作谓词组成。RPDB按照优先级递减的顺序进行扫描(请注意,数字越低意味着优先级越高,请参阅下面的PREFERENCE首选项描述)。每个规则的选择器应用于{源地址、目的地址、传入接口、tos、fwmark},如果选择器与数据包匹配,则执行操作。动作谓词可能返回成功。在这种情况下,它将给出路由或故障指示,RPDB查找终止。否则,RPDB程序将继续执行下一个规则。
从语义上讲,自然的动作是选择下一跳和输出设备。
在启动时,内核配置由三条规则组成的默认RPDB:
1、Priority优先级:0,Selector选择器:匹配任何内容,Action操作:查找路由表local(ID 255)。local路由表是一个特殊的路由表,包含本地和广播地址的高优先级控制路由。
2、Priority优先级:32766,Selector选择器:匹配任何内容,Action操作:查找路由表main(ID 254)。main路由表是包含所有非策略路由的正常路由表。管理员可以删除此规则和/或用其他规则覆盖此规则。
3. Priority优先级:32767,Selector选择器:匹配任何内容,Action操作:查找路由表default(ID 253)。default路由表是空的。如果之前没有选择数据包的默认规则,则保留用于某些后处理。此规则也可以删除。
每个RPDB条目都有其他属性。例如,每个规则都有一个指向某个路由表的指针。NAT和伪装规则具有选择新IP地址进行转换/伪装的属性。除此之外,规则还有一些可选属性,路由具有这些属性,即realms区域。这些值不会覆盖路由表中包含的值。仅当路由未选择任何属性时,才使用它们。
RPDB可能包含以下类型的规则:
unicast:单播,该规则规定返回在规则引用的路由表中找到的路由。
blackhole:黑洞,该规则规定要默默地丢弃数据包。
unreachable:不可达,该规则规定生成“网络不可达”错误。
prohibit:禁止,该规则规定产生“通信被管理者禁止”错误。
nat:地址转换,该规则规定将IP数据包的源地址转换为其他值。
ip rule add/delete
ip rule add:插入新规则
ip rule delete:删除规则
type TYPE (default)
此规则的类型。上一小节给出了有效类型的列表。
from PREFIX
选择要匹配的源地址前缀。
to PREFIX
选择要匹配的目的地址前缀。
iif NAME
选择要匹配的传入设备。如果接口是环回接口,则该规则只匹配来自此主机的数据包。这意味着您可以为转发和本地数据包创建单独的路由表,从而完全隔离它们。
oif NAME
选择要匹配的输出设备。传出接口仅适用于来自绑定到设备的本地套接字的数据包。
tos TOSdsfield TOS
选择要匹配的TOS值。
fwmark MARK
选择要匹配的fwmark值。
uidrange NUMBER-NUMBER
选择要匹配的uid值。
ipproto PROTOCOL
选择要匹配的ip协议值。
sport NUMBER | NUMBER-NUMBER
选择要匹配的源端口值。支持端口范围。
dport NUMBER | NUMBER-NUMBER
选择要匹配的目的地址端口值。支持端口范围。
priority PREFERENCE
这条规则的优先级。PREFERENCE是一个无符号整数值,数字越大表示优先级越低,规则按数字递增的顺序进行处理。每个规则都应该有一个明确设置的唯一优先级值。选项preference和order是priority的同义词。
table TABLEID
如果规则选择器匹配,则查找路由表标识符。也可以使用lookup而不是table。
protocol PROTO
安装了所讨论规则的路由协议。例如,当zebra安装规则时,它将获得RTPROT_ZEBRA作为安装协议。
suppress_prefixlength NUMBER
拒绝前缀长度为NUMBER或更短的路由决策。
suppress_ifgroup GROUP
拒绝使用属于接口组GROUP的设备的路由决策。
realms FROM/TO
当规则匹配成功以及路由表查找成功时选择的区域。仅当路由未选择任何区域时,才使用Realm TO选项。
nat ADDRESS
要转换的IP地址块的集合(用于源地址)。ADDRESS可以是NAT地址块的起始地址(由NAT路由选择)或本地主机地址(甚至为空)。在最后一种情况下,路由器不会转换数据包,而是将它们伪装成这个地址。使用map-to而不是nat意味着同样的事情。
警告:使用这些命令对RPDB所做的更改不会立即生效。假设脚本完成一批更新后,会用ip route flush cache刷新路由缓存。
ip rule flush
ip规则刷新,同时还转储所有删除的规则。
protocol PROTO
选择发起协议。
ip rule show
以列表形式显示ip规则。此命令没有参数。选项list或lst是show的同义词。
ip rule save
protocol PROTO
选择发起协议。
将规则表信息保存到stdout。
此命令的行为类似于ip rule show,除了输出是适合传递给ip rule restore的原始数据。
ip rule restore
从stdin还原规则表信息。
此命令预期读取从ip rule save返回的数据流。它将尝试还原规则表信息,使其与保存时完全相同。表中已有的任何规则都保持不变,重复的规则也不会被忽略。
操作示例
添加基于源IP的路由规则,对于源地址是192.168.1.0/24的报文,查找路由表100,并将此规则的优先级设置为1000。
ip rule add from 192.168.1.0/24 lookup 100 pref 1000
基于防火墙标记的流量分流,对于目标端口是TCP端口80的报文,设置标记为1,设置路由策略,将标记后的流量查找路右边200进行转发。
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
ip rule add fwmark 1 lookup 200
对于不同的源IP地址,添加路由策略,分别分流到电信/联通双线进行转发。
ip rule add from 192.168.1.100 lookup ct
ip rule add from 192.168.1.101 lookup cu
刷新路由缓存使新规则立即生效。
ip route flush cache
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/11314.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~