基于FRR全面解析BGP协议(五):FRR的BGP路由策略

FRR的BGP路由策略

过滤器

FRR提供了基于IP,基于Community和基于AS-PATH的三种类型过滤器来匹配路由。

IP Access List

基于IP的路由ACL规则,比较少使用,通常是用IP Prefix List来设置策略。

access-list NAME [seq (1-4294967295)] permit IPV4-NETWORK
access-list NAME [seq (1-4294967295)] deny IPV4-NETWORK

#NAME:规则名称
#seq:规则序列号,不填则在上一个规则序列号基础上加5,若存在则加10,以此类推
#permit(deny):允许通过还是拒绝通过
#IPV4-NETWORK: ipv4网络

#example
access-list filter deny 10.0.0.0/9
access-list filter permit 10.0.0.0/8
access-list filter seq 13 permit 10.0.0.0/7

IP Prefix List

IP Prefix List提供了强大的基于IP前缀的过滤机制,除了access list之外,还能够基于ip掩码和ip掩码区间进行过滤。

ip prefix-list NAME (permit|deny) PREFIX [le LEN] [ge LEN]
ip prefix-list NAME seq NUMBER (permit|deny) PREFIX [le LEN] [ge LEN]
no ip prefix-list NAME #取消io前缀规则
show ip prefix-list NAME #显示ip前缀规则

#NAME:规则名称
#seq:规则序列号,不填则在上一个规则序列号基础上加5,若存在则加10,以此类推
#permit(deny):允许通过还是拒绝通过
#PREFIX: ip前缀
#le LEN:匹配小于LEN的ip前缀
#ge LEN:匹配大于LEN的ip前缀

#example
ip prefix-list pl-allowed-adv seq 5 permit 82.195.133.0/25
ip prefix-list pl-allowed-adv seq 10 deny any
基于FRR全面解析BGP协议(五):FRR的BGP路由策略_第1张图片

R2向R3通告BGP路由时,只过滤掉1.2.2.0/24路由,其他路由放行

#只列出和prefix-list相关命令
ip prefix-list 1 deny 1.2.2.0/24
ip prefix-list 1 permit any
router bgp 200
  peer 10.1.23.3 prefix-list 1 out	#out表示往外发送的方向;

Community-list

Community属性值是一种路由标记 ,FRR提供了基于Community的路由过滤方法。

bgp community-list [standard|expanded] NAME permit|deny COMMUNITY
no bgp community-list [standard|expanded] NAME
show bgp community-list [NAME detail]

#standard:COMMUNITY是一个确切值
#expanded:COMMUNITY可为正则表达式,都不填则由系统自动识别
#permit|deny:过滤规则

#example
bgp community-list 70 permit 7675:70
bgp community-list 70 deny

as-path access-list

as-path access-list是基于as-path的过滤规则,能够使用正则表达式对as-path进行过滤。

bgp as-path access-list WORD permit|deny LINE

#WORD:列表号
#LINE:正则表达式

#example
bgp as-path access-list 99 permit _0_
bgp as-path access-list 99 permit _23456_
bgp as-path access-list 99 permit _1310[0-6][0-9]_|_13107[0-1]_

路由策略

FRR的路由策略通过设置Route Maps来实现。Route Maps一共可分为五个模块,分别是Matching Conditions(条件匹配)、Set Actions(策略设置)、Matching Policy(条件策略)、Call Action(跳转)和Exit Policy(结束策略)。

route-map ROUTE-MAP-NAME (permit|deny) ORDER
#ROUTE-MAP-NAME: 策略名称
#permit|deny:条件策略Matching Policy
#ORDER:策略匹配排序

Matching Conditions

Matching Conditions主要是基于过滤器对策略的适用范围进行圈定,可过滤的命令包括

#匹配ACL
match ip|ipv6 address ACCESS_LIST
#匹配IP Prefix List
match ip|ipv6 address prefix-list PREFIX_LIST
#匹配Community-list
match community COMMUNITY_LIST
#匹配as-path access-list
match as-path ACCESS_LIST

#匹配其他路由参数
match ip|ipv6 address prefix-len 0-32
match ip|ipv6 next-hop address IPV4_ADDR|IPV6_ADDR
match metric METRIC
match local-preference METRIC
match peer IPV4_ADDR|IPV6_ADDR

#ZEBRA匹配
match source-protocol PROTOCOL_NAME
match source-instance NUMBER

Set Actions

Set Actions决定策略的生效方式,通过修改路由属性来影响路由策略,可设置的路由属性包括

#设置路由参数
set ip next-hop IPV4_ADDRESS
set ip next-hop peer-address
set ip next-hop unchanged
set ipv6 next-hop peer-address
set ipv6 next-hop prefer-global
set ipv6 next-hop global IPV6_ADDRESS
set ipv6 next-hop local IPV6_ADDRESS
[no] set distance DISTANCE
set weight WEIGHT

#设置BGP协议属性
set local-preference LOCAL_PREF
set local-preference +LOCAL_PREF
set local-preference -LOCAL_PREF
set as-path prepend AS_PATH
set community COMMUNITY
set origin ORIGIN 
set metric METRIC #即MED

#设置路由写入哪个路由表
set table (1-4294967295)

#设置标签(相当于Linux的域reaml)
set tag TAG

Matching Policy

Matching Policy包括permit和deny

permit表示如果路由条目匹配(Matching Conditions来判断),则执行Set Actions,然后接收该路由或者执行Exit Policy。

deny表示如果路由条目匹配(Matching Conditions来判断),则拒绝接收该条路由。

注意:route-map默认Matching Policy是deny,也就是说如果Matching Conditions没有匹配到,那么路由默认将会被拒绝,因此在设置route-map时,一般会在最后加入一条permit规则

Call Action

Call Action由Set Action调用,表示调用其他RouteMap策略。如果返回deny,则拒绝接收;返回permit则继续往下执行Matching Policy和Exit Policy,一般用于配置多个route-map。

Exit Policy

Exit Policy由next和goto N两个语法组成,next执行下一条规则,goto是跳到规则N后顺序执行。

举例

  1. 在R1上部署路由策略,当其通告1.1.1.0/24及1.2.2.0/24路由时携带Community属性
基于FRR全面解析BGP协议(五):FRR的BGP路由策略_第2张图片
ip prefix-list 1 permit 1.1.1.0/24
ip prefix-list 2 permit 1.2.2.0/24

route-map add_community_out permit 10
	match ip address prefix-list 1
	#additive:若已经有community属性,追加100:1
	set community 100:1 additive 
route-map add_community_out permit 20
	match ip address prefix-list 2
	set community 100:2 additive
route-map add_community_out permit 30

router bgp 100
 neighbor 10.1.12.2 route-map add_community_out out
 
  1. R2传递EBGP路由给R3,其中部分路由为R2本地始发,另一部分为AS600传递给R2再由R2更新给R3。 现在R3上部署路由策略,过滤掉始发于AS600的路由,R1将不会从R3收到始发于AS600的路由。
基于FRR全面解析BGP协议(五):FRR的BGP路由策略_第3张图片
bgp as-path access-list permit-600 permit _600$
route-map ban-AS600 permit 10
  match as-path permit-600
  #将community标记为no-export发给R3
  set community no-export
route-map ban-AS600 permit 20
router bgp 300
 neighbor 10.1.23.3 route-map ban-AS600 out

路由汇总

BGP支持对路由条目进行汇总,并将汇总后的路由发送给其他对等体

基于FRR全面解析BGP协议(五):FRR的BGP路由策略_第4张图片

上图R3将多条172.16段的路由汇总成一条新的路由172.16.0.0/16发送给R4,以减少路由条目的交互。FRR对汇总路由的支持方式有三种,缺省方式、as-set和summary-only。

缺省方式

缺省方式直接通告汇总路由以及明细路由。由于汇总路由丢失明细路由的路径属性,有可能导致路由环路。

as-set

基于FRR全面解析BGP协议(五):FRR的BGP路由策略_第5张图片

R3所产生的汇总路由,继承了明细路由的AS_Path属性。本例的环境比较特殊,由于明细路由来自于不同的AS,因此BGP使用一个特殊的AS_Path类型AS-SET(详见AS_Path类型)来描述它们,也就是300 {100,200}中大括号表示的部分。 这样的好处是R3所产生的汇总路由,除了通告给R4,还会通告给R1及R2,由于该汇总路由的AS_Path中存在R1及R2所处的AS号,因此它们忽略R3关于这条汇总路由的更新。这样便可避免出现环路问题。

summary-only

summary-only只会通告汇总路由,并不会对外通告更具体的路由。

你可能感兴趣的:(FRR)