- 在复杂的数据通信网络中,根据实际组网需求,往往需要实施一些路由策略对路由信息进行过滤、属性设置等操作,通过对路由的控制,可以影响数据流量转发。
- 路由策略并非单一的技术或者协议,而是一个技术专题或方法论,里面包含了多种工具及方法。
- R1上将业务A、B、C的网段路由引入时希望不引入业务C网段路由,同时R3上将OSPF路由引入到IS-IS中时,同样只希望引入B业务网段路由。
- 此时需要一个工具在引入路由时进行限制。
- 通配符掩码匹配规则
不要把通配符当作掩码来开,当作一个匹配的值 0是严格匹配不能改变,1是可以改变
路由匹配工具:ACL
ACL根据匹配信息不同,最终隐含规则也不同
1.如果ACL匹配的是流量,则默认是允许所有
2.如果ACL匹配的是路由,则默认是拒绝所
执行工具:filer-policy、filter、filter
路由策略:
1.filer-policy
2.filter
3.route-policy
流量策略:
1.traffic-fliter
2.traffic-policy
traffic-filter 流过滤:对于ACL的permit是允许流量通过
对于ACL的deny 是禁止流量通过
路由策略:执行路由过滤
流量策略:执行流量过滤
数据信息管控:
1.要存在匹配工具
1.ACL(可以匹配流量、可以匹配路由)
ACL匹配路由时,执行对路由的网段做匹配,不能对路由的掩码做匹配
ACL只能匹配路由的前缀,不能匹配路由的网络掩码。
说人话:
1.1.1.1/32
1.1.1.2/32
1.1.1.3/32 可以直接匹配成1.1.1.0/30
但是ACL不能,ACL只能精确匹配
1.1.1.1/32
1.1.1.1/31
1.1.1.1/30
1.1.1.1/29 类似地址ACL要配置4个条目
控制平面:AR1的路由表中存在3.3.3.3的路由信息 (路由表项)
转发平面:AR1ping 3.3.3.3发出的数据流量 (转发信息表项)
AR1的路由表中存在3.3.3.3/32路由信息 (控制平面学习了路由 --路由表项) dis ip rou
AR1去ping 3.3.3.3 发出数据流量 (转发平面发送了流量 --转发信息表项)dis fib
匹配工具2 :前缀匹配列表
ip-prefix list:前缀列表
只能匹配路由信息(不能匹配流量)
匹配路由信息时,可以对路由的网段 和 掩码同时做匹配
默认存在规则是拒绝所有
1.1.1.1 29to32 :类似网段可以直接匹配成一条
前缀列表实现方法:
[AR1]ip ip-prefix AR3-route index 1 deny 3.3.3.2 32
[AR1]ip ip-prefix AR3-route index 2 deny 3.3.3.3 32 进程 掩码
[AR1]ip ip-prefix AR3-route index 3 permit 3.3.3.1 32 index相当于ACL中的rule 因为是默认拒绝所有所以要permit允许放行想要放行的流量
[AR1-ospf-1]filter-policy ip-prefix AR3-route import 在OSPF进程中启用
如果这4条外部路由书写拒绝:
ACL 就要写4个条目
ip-prefix 只需要写1个条目
配置了前缀匹配列表之后,在AR3上引入外部路由之后在AR1上也是没有对应的路由条目,因为配置的前缀匹配列表没有允许放行
[AR3]ip rou 192.168.1.101 32 n 0
[AR3]ip rou 192.168.1.1 32 n 0
[AR3]ip rou 192.168.1.0 31 n 0
[AR3]ip rou 192.168.1.0 30 n 0
[AR3]ip rou 192.168.1.0 29 n 0
引入外部路由
[AR4-ospf-1]import-route static OSPF进程视图下执行引入操作
[AR4]dis ospf lsdb router IP地址 查看设备路由描述
假设AR1要学习AR3的内部路由,不学习AR3的外部路由且AR3存在100条内部路由,存在4条外部路由?
通过前缀列表实现,要拒绝4条外部路由,允许所有内部路由
[AR1]ip ip-prefix D_E deny 192.168.1.0 24 greater-equal 29 less-equal 32 拒绝外部路由信息 匹配24位掩码以上的,大于29小于32,匹配上面的外部路由条目,如果不加后面的greater-equal(大于)less-equal(小于)则只匹配192.168.1.0这个网段的路由条目
[AR1]ip ip-prefix D_E permit 0.0.0.0 0 less-equal 32 允许所有路由信息 缺省路由 0.0.0.0 0-32
缺省路由实现:写了一个允许最大的网段,写了一个小于等于0大于等于32的范围
greater-equal(大于)
less-equal(小于)
匹配路由信息时:
1.可以只设置匹配的路由网段(ip ip-prefix D_E deny 192.168.1.0 24
匹配192.168.1.0/24这个路由条目
2.可以设置匹配路由网段内的路由条目(ip ip-prefix D_E deny 192.168.1.0 24 g 29 l 32
匹配192.168.1.0/24网段内 掩码大于等于29 小于等于32的所有路由条目
- IP前缀列表(IP-Prefix List)是将路由条目的网络地址、掩码长度作为匹配条件的过滤器,可在各路由协议发布和接收路由时使用。
不同于ACL,IP-Prefix List能够同时匹配IP地址前缀长度以及掩码长度,增强了匹配的精确度
1、ip-prefix-name:地址前缀列表名称
2、序号:本匹配项在地址前缀列表中的序号,匹配时根据序号从小到大进行顺序匹配
3、动作:permit/deny,地址前缀列表的匹配模式为允许/拒绝,表示匹配/不匹配
4、IP网段与掩码:匹配路由的网络地址,以及限定网络地址的前多少位需严格匹配
5、掩码范围:匹配路由前缀长度,掩码长度的匹配范围 mask-length<=greater-equal-value<=less-equal-value<=32
匹配机制
IP-Prefix的基础配置命令
- ip-prefix-name:指定地址前缀列表的名称。
- index index-number:指定本匹配项在地址前缀列表中的序号。
- permit:指定地址前缀列表的匹配模式为允许。
- deny:指定地址前缀列表的匹配模式为拒绝。
- ipv4-address mask-length:指定IP地址和指定掩码长度。
- greater-equal greater-equal-value:指定掩码长度匹配范围的下限。
- less-equal less-equal-value:指定掩码长度匹配范围的上限。
X>=8 <=32 X=掩码
一些示例
没有执行匹配多行流量的工具,我不需要或者不想到达的网络我直接过滤路由了,不可能说通过路由学习到了再把流量过滤掉
执行工具
Router-policy:路由策略
route-policy:路由策略
由一系列的条目节点组成,每一个节点内可以设置多个语句(分为条件语句和执行语句),可以自己匹配路由,不用通过ACL和ip-prefix来匹配
#
[AR1]route-policy test(name) permit node 1 (节点)
匹配了什么内容1 如果你是OSPF 或者XXX
匹配了什么内容2 如果你是外部路由
需要执行什么样的操作1 设置你的优先级多少
需要执行什么样的操作2 设置你的开销多少 可以匹配得很精确
匹配内容可以匹配的很精确:(匹配内容1)比如说你的目标地址是192.168.1.0,(匹配内容2)你的下一跳必须是10.1.12.1 (操作1)我把你的开销值设置为50 (操作2)优先级设置为100 根据路由本身带有的内容进行匹配,可以配合ACL 前缀列表使用
#
route-policy test permit node 2
匹配了什么内容
需要执行什么样的操作
#
route-policy test deny node 3
#
每一个节点之间是 或 的关系 :逻辑语言:与或非 说人话:就是你匹配第一个就不用匹配第二个匹配第二个就不用匹配第三个
每一个节点内设置的语句分类:
1.条件语句 if-match
多个条件语句之间是 与 的关系
可以匹配ACL 、前缀列表
可以匹配路由本身携带的相关参数(cost、接口、下一跳)
用法
一个节点可以匹配很多信息,执行很多语句
多个节点匹配多个语句
2.执行语句 apply
多个执行语句之间是 与 的关系
存在默认节点,动作为deny
操作 | 命令 |
设置路由信息的开销值 | apply cost { [ + | - ] cost | inherit | none } |
设置AS_Path属性 | apply as-path as-path-value &<1-128> { additive | overwrite | delete } apply as-path asValues { additive | overwrite | delete } |
设置清空原有AS_Path属性 | apply as-path none overwrite |
设置路由最近AS_Path值添加次数 | apply as-path most-recent most-recent-value |
在本地AS号前附加AS号 | apply as-path prepend asValues |
设置路由信息的开销类型 | apply cost-type { external | internal | type-1 | type-2 | internal-inc-ibgp | med-plus-igp } |
设置EBGP路由的衰减参数 | apply dampening half-life-reach reuse suppress ceiling |
根据团体属性过滤器中指定的值删除BGP路由团体属性 | apply comm-filter { basIndex | advIndex } delete |
设置BGP团体属性 | apply community { cmntyValue | cmntyNum | internet | no-advertise | no-export | no-export-subconfed } &<1-32> [ additive ] apply community community-list community-list-name [ additive ] 说明: 该配置仅S5735-L-V2、S5735-S-V2、S5735I-S-V2、S5735I-L-V2、S5735I-H-V2、S5735S-L3、S1730S-S3、S5735S-S3、S5735R-L-V2产品支持。 |
删除BGP团体属性 | apply community { cmntyValue | cmntyNum | internet | no-advertise | no-export | no-export-subconfed } &<1-32> delete |
根据扩展团体属性过滤器中指定的值删除BGP扩展团体属性 | apply extcommunity-filter rt filter-name delete |
清空路由中已有的扩展团体属性 | apply extcommunity rt none |
设置BGP路由信息的路由源 | apply origin { egp { egpVal } | igp | incomplete } |
设置BGP路由信息的本地优先级 | apply local-preference [ + | - ] preference |
设置BGP Large-community属性 | apply large-community-list large-community-list-name { additive | overwrite | delete } apply large-community { aa:bb:cc } &<1-16> { additive | overwrite | delete } |
设置BGP路由的VPN-Target扩展团体属性 | apply extcommunity { rt extCmntyValue } &<1-16> [ additive ] |
删除BGP路由的VPN-Target扩展团体属性 | apply extcommunity { rt extCmntyValue } &<1-16> delete |
设置BGP路由的SoO(Site of Origin)扩展团体属性 | apply extcommunity soo { site-of-origin } &<1-16> additive |
设置BGP路由的首选值 | apply preferred-value preferredVal |
设置BGP ADD-PATH优选路由的数量 | apply add-path path-number path-number-value |
设置本地QoS ID值 | apply qos-local-id qos-local-id |
设置IPv4路由信息的下一跳地址 | apply ip-address next-hop { address | peer-address | blackhole } |
设置IPv6路由信息的下一跳地址 | apply ipv6 next-hop { address | peer-address | blackhole } |
设置IS-IS的路由级别 | apply isis { level-1 | level-1-2 | level-2 } |
设置引入路由到OSPF的特定区域 | apply ospf { backbone | stub-area } |
设置IS-IS的路由级别 | apply isis { level-1 | level-1-2 | level-2 } |
设置路由协议的优先级 | apply preference preference |
设置路由信息的标记域 | apply tag tag |
设置路由的网关IP地址 | apply gateway-ip { origin-nexthop | address } |
设置路由的网关IPv6地址 | apply ipv6 gateway-ip { origin-nexthop | address } |
来自 <https://support.huawei.com/enterprise/zh/doc/EDOC1100411518/5a34b001>
使用router-policy拒绝192.168.1.3 的路由
使用过程
#
acl number 2000
rule 5 deny source 192.168.1.3 0 ACL匹配语句
rule 10 permit
#
[AR1]route-policy abc permit node 10 创建节点10
if-match acl 2000 在router-policy接口试图引入
#
ospf 1 router-id 10.3.3.3 import-route static route-policy abc OSPF接口视图下引入
匹配工具 permit deny : ACL的
执行工具 permit deny : router-policy的
有什么关系?
1. acl-deny 和route-policy permit 最终的结果 不在该节点通过,继续下一个节点的匹配 ACL拒绝了就拒绝通过
2. acl-permit 和route-policy permit 最终的结果 在该节点通过,不进行下一个节点匹配 ACL通过了这里也通过就通过
3. acl-deny 和route-policy deny 最终的结果 不在该节点通过,继续下一个节点的匹配 ACL拒绝,我这里也拒绝 那就拒绝
4. acl-permit 和route-policy deny 最终的结果 不在该节点通过,不进行下一个节点匹配 ACL通过 我这里不通过
所有的视角都是盯着路由来看的,不要盯着ACL和什么前缀匹配来看
下图去192.168.1.1的匹配过程以及输出,路由策略
下图去192.168.1.2的匹配过程以及输出,路由策略
下图去192.168.1.3的匹配过程以及输出,路由策略
只要有一个是deny那就不通过 匹配下一条
配置ACL
acl 2000
rule 5 deny source 192.168.1.1 0 拒绝192.168.1.1
rule 10 permit source 192.168.1.2 0 允许192.168.1.2
配置前缀访问控制列表
ip ip-prefix 1 deny 192.168.1.3 32 拒绝192.168.1.3 32
节点10中引入ACL 2000
route-policy abc permit node 10
if-match acl 2000
节点20中引入
route-policy abc deny node 20
if-match ip-prefix 1
route-policy abc permit node 30
没有任何匹配条目语句,待指匹配所有
- 命令:[Huawei-ospf-100] filter-policy { acl-number | acl-name acl-name | ip-prefix ip-prefix-name | route-policy route-policy-name [ secondary ] } import
- acl-number:指定基本访问控制列表号。整数形式,取值范围是2000~2999。
- acl-name acl-name:指定访问控制列表名称。字符串形式,不支持空格,区分大小写,长度范围是1~32,以英文字母a~z或A~Z开始。
- ip-prefix ip-prefix-name:指定地址前缀列表名称。字符串形式,长度范围是1~169,不支持空格,区分大小写。当输入的字符串两端使用双引号时,可在字符串中输入空格。
- route-policy route-policy-name:指定路由策略名称。字符串形式,区分大小写,不支持空格,长度范围是1~40。当输入的字符串两端使用双引号时,可在字符串中输入空格。
- secondary:设置优选次优路由。
- 命令:[Huawei-ospf-100] filter-policy { acl-number | acl-name acl-name | ip-prefix ip-prefix-name | route-policy route-policy-name } export [ protocol [ process-id ] ]
- protocol process-id:指定需要对引入的特定的路由协议进行过滤。目前的协议包括direct、isis、bgp、ospf、unr和static。当指定路由协议为RIP、IS-IS、OSPF时,还可以指定进程号。整数类型,取值范围是1~65535,缺省值是1。
策略工具2:Route-Policy
Route-Policy的匹配顺序