基于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
1591756378442

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 <egp|igp|incomplete>
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属性
1591771891405
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的路由。
1591776209606
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支持对路由条目进行汇总,并将汇总后的路由发送给其他对等体

1591780273667

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

缺省方式

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

as-set
1591780774706

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只会通告汇总路由,并不会对外通告更具体的路由。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,我们可以了解到BGP是一种路由协议,而静态路由则是手动配置的路由。因此,FRR BGP配置静态路由需要先配置静态路由,然后再将其与BGP协议结合起来。具体步骤如下: 1. 配置静态路由。可以使用以下命令配置静态路由: ```shell ip route add <destination_network>/<netmask> via <next_hop_ip_address> ``` 其中,`<destination_network>/<netmask>`表示目标网络和子网掩码,`<next_hop_ip_address>`表示下一跳IP地址。例如,要将目标网络`192.168.1.0/24`的流量发送到下一跳IP地址`10.0.0.1`,可以使用以下命令: ```shell ip route add 192.168.1.0/24 via 10.0.0.1 ``` 2. 配置BGP协议。可以使用以下命令配置BGP协议: ```shell router bgp <local_as_number> neighbor <neighbor_ip_address> remote-as <remote_as_number> network <local_network> ``` 其中,`<local_as_number>`表示本地AS号,`<neighbor_ip_address>`表示******本地网络设置为`192.168.1.0/24`,可以使用以下命令: ```shell router bgp 65001 neighbor 10.0.0.2 remote-as 65002 network 192.168.1.0/24 ``` 3. 将静态路由BGP协议结合起来。可以使用以下命令将静态路由BGP协议结合起来: ```shell router bgp <local_as_number> network <destination_network>/<netmask> route-map <route_map_name> out ``` 其中,`<destination_network>/<netmask>`表示目标网络和子网掩码,`<route_map_name>`表示路由映射名称。例如,要将目标网络`192.168.1.0/24`的流量发送到BGP邻居,可以使用以下命令: ```shell router bgp 65001 network 192.168.1.0/24 route-map static-to-bgp out ``` 在这个例子中,`static-to-bgp`是一个路由映射名称,它将静态路由转换为BGP路由

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codemillion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值