FRR提供了基于IP,基于Community和基于AS-PATH的三种类型过滤器来匹配路由。
基于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前缀的过滤机制,除了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
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属性值是一种路由标记 ,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的过滤规则,能够使用正则表达式对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主要是基于过滤器对策略的适用范围进行圈定,可过滤的命令包括
#匹配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 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包括permit和deny
permit表示如果路由条目匹配(Matching Conditions来判断),则执行Set Actions,然后接收该路由或者执行Exit Policy。
deny表示如果路由条目匹配(Matching Conditions来判断),则拒绝接收该条路由。
注意:route-map默认Matching Policy是deny,也就是说如果Matching Conditions没有匹配到,那么路由默认将会被拒绝,因此在设置route-map时,一般会在最后加入一条permit规则
Call Action由Set Action调用,表示调用其他RouteMap策略。如果返回deny,则拒绝接收;返回permit则继续往下执行Matching Policy和Exit Policy,一般用于配置多个route-map。
Exit Policy由next和goto N两个语法组成,next执行下一条规则,goto是跳到规则N后顺序执行。
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
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支持对路由条目进行汇总,并将汇总后的路由发送给其他对等体
上图R3将多条172.16段的路由汇总成一条新的路由172.16.0.0/16发送给R4,以减少路由条目的交互。FRR对汇总路由的支持方式有三种,缺省方式、as-set和summary-only。
缺省方式直接通告汇总路由以及明细路由。由于汇总路由丢失明细路由的路径属性,有可能导致路由环路。
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只会通告汇总路由,并不会对外通告更具体的路由。