BGP详解

BGP概述

  • BGP为BorderGateway Protgcol边界网关路由协议(路径矢量)
  • 主要作用是在AS之间传递路由信息
  • 目前BGR有4个版本:V1、V2、V4、V4+(即MBGP)
  • 企业连接到SP
    • 连接到两家或是多家ISP,提供链路的可靠性,连接方式如下
    • 1.Single homed单宿:只连接到一家ISP且没有冗余链路
    • 2.Dualhomed双宿:只连接到一家ISP,使用两条链路来提供冗余
    • 3.Multihomed多宿:连接到多家ISP
    • 4.DualMultihomed双多宿:连接到多家ISP,同时使用两条链路

使用BGP的三大理由

  • 大量路由需要承载,IGP只能容纳千条,而BGP可以容纳上万
  • 支撑MPLS/VPN的应用,传递客户VPN路由
  • 策略能力强,可以很好的实现路由决策与数据控制

IGP具有以下某些特性或者全部特性

  • 执行拓扑发现
  • 尽力完成快速收敛
  • 需要周期性的更新来确保路由选择信息的精准性
  • 受同一个管理机构的控制
  • 采取共同的路由选择策略
  • 提供了优先的策略控制能力

关于BGP

  • AS:autonomoussystem自治系统,指的是在同一个组织管理下使用相同策略的设备的集合
  • 不同AS通过AS号区分,AS号取值范围1-65535,其中64512-65535是私有AS号。IANA负责AS号的分发。
  • 中国电信163 AS号:4134
  • 中国电信CN2 AS号:4809
  • 中国网通 AS号:9929

BGP的矢量特征

  • 路径矢量信息中包含一个BGP自治系统列表
  • BGP路由器不接受路径列表中包含其AS号的路由更新,是无环路
  • BGP支持对BGP自治系统路径应用路由策略
  • BGP路由器只能将其使用的路由通告给邻接自治系统中的对等体

BGP特征

  • BGP使用TCP为输出层协议,TCP端口号为179
  • BGP路由器之间建立TCP连接,这些路由器称为BGP对等体也叫BGP邻居:**EBGP、IBGP**
  • 对等体之间交换整个BGP路由表
  • BGP路由器只发送增量更新或者触发更新(不会周期性更新)
  • 具有丰富的路径属性
  • BGP通告成千上万的路由,可采用TCP滑动窗口的机制,停止并等待确认前,可以发送65576个字节

BGP packets

报文类型

报文名称作用是什么什么时候发包
OPEN协商BGP邻居的各项参数,建立邻居关系通过TCP建立BGP连接,发送open报文
UPDATE进行路由信息的交换连接建立后,有路由需要发送或路由变化时,发送UPDATE通告对端路由信息
NOTIFICATION报告错误,终止邻居关系当BGP在运行时发现错误时,要发送NOTIFICATION报文通报BGP对端
KEEPALIVE维持邻居关系定时发送KEEPALIVE报文以保持BGP邻居关系的有效性
Route-refresh为保证网络稳定,触发更新路由的机制当路由策略发生变化时,触发请求邻居重新通告路由

BGP的有限状态机

Peer状态名称发什么包在做什么
Idle尝试建立TCP连接准备开始TCP的连接并监视远程peer启动TCP连接,启用BGP时,要准备足够的资源
Connect发TCP包正在进行TCP连接,等待完成中,认证都在TCP建立期间完成的。如果TCP连接不上则进入Active状态,反复尝试连接
Active发TCP包TCP连接没建立成功,反复尝试TCP连接
OpenSent发Open包TCP连接建立已经成功,开始发送Open包,Open包携带参数协商对等体的建立
OpenConfim发Keepalive包参数、能力特性协商成功,开始自己发送Keepalive包
Established发Update包已经收到对方的Keepalive包,双方能力特性一致,开始使用Update通告路由信息

BGP Peer

  • 运行BGP的路由器被称为BGP speaker
  • BGP对等体也叫BGP邻居,建立基于TCP的关系
  • EBGP:BGP位于不同自治相同的路由器之间,称为EBGP
  • 建立EBGP邻接关系,必须满足三个条件
    • EBGP之间自治系统号不同
    • 定义邻居建立TCP会话
    • neighbor中指定的IP地址要可达

中转AS中的IBGP路由传递

全互联IBGP邻居关系

  • IBGP全互联虽然能解决transit AS内的路由黑洞问题,但是却造成BGP路由器需要耗费大量资源维护大量BGP连接的新问题
    • 路由反射器
    • 联邦

IBGP水平分割原则

  • BGP防环是通过AS_PATH实现的,而AS_PATH仅仅实在路由离开后AS才会被更改,因此再AS内,IBGP就没有EBGP的防环能力,为了防止环路的出现,BGP路由器不会将从IBGP邻居学习过来的路由再通告给自己其他IBGP邻居
  • 由于水平分割原则存在,BGP要求AS内,需保证IBGP全互联(neighbor命令 指定)
  • (根本原因是在AS内部,AS_PATH不会改变,无法使用AS_PATH防环,因此很容易出现环路)

BGP路由通告规则

  • 当存在多条路径时,BGP router只选取最优的路由(BEST)来使用(没有负载的情况下)
  • BGP只把自己使用的路由,也就是自己认为Best的路由传递给BGP Peer
  • BGP Speaker从EBGP获得的路由会向它所有的BGP相邻体通告(包括EBGP和IBGP)
  • BGP Speaker从IBGP获得的路由不向它的IBGP相邻体通告(避免循环,水平分割;存在路由RR的情况下除外)
  • BGP Speaker从IBGP获得的路由是否通告给它的EBGP Peer要视IGP和BGP同步的情况来决定

BGP同步

  • BGP同步规则指出,BGP路由器不应使用通过IBGP获悉的路由或将其通告给外部邻居,除非该路由是本地或者通过IGP获悉的
  • 思科Cisco IOS默认关闭同步
  • 同步关闭,则BGP可以将使用这样的路由,并将其通告给外部BGP邻居:从IBGP邻居那里获悉的且没有出现在本地路由表中的路由
  • 同步开启,则路由器通过IBGP获悉路由后,将等待IGP将该路由传遍整个自治系统,然后再将其通告给外部对等体

Tables

  • BGP邻居表:邻居列表
  • BGP表:包含了从邻居学习的所有路由,以及到达目的网段的多个路径和属性
  • 路由表:列出了到达目的网段的最佳路径,EBGP路由AD为20,IBGP路由AD为200

Next-Hop

  • BGP是AS·by-AS的路由协议,而不是router-by-router的路由协议
  • 在BGP中,next-hop并不意味着是下一台路由器,而是到达下一个AS的IP地址
  • EBGP中,默认next-hop为发送更新的邻居路由器的IP地址
  • IBGP中,从EBGP传来的next-hop属性在IBGP中保持不变的被传递

修改next-hop

  • 为了防止路由黑洞问题,R1、R2、R3建立IBGP全互联且均用各自的LOOPBACK接口建立IBGP关系

配置BGP

基础配置

**Router(config)# router bgp** _autonomous-system_

  • 仅仅执行router bgp不能再路由器上激活BGP,必须执行至少一个子命令才能再路由器激活BGP进程
  • 在路由器上职能配置一个BGP实例

指定BGP邻居及激活BGP会话

Router(config-router)# neighbor {ip-address | peer-group-name } remote-as autonomous-system

  • 邻居指定的ip地址必须路由可达
  • BGP路由都需手工指定,不能像IGP那样通过协议自动发现
  • AS决定与邻居建立的是EBGP还是IBGP会话

指定BGP将通告的网络

Router(config-router)#network network-number [mask network-mask] [route-map map-tag]

  • network命今与IGP不同,BGP命令network为通告哪些IP路由进BGP进程,而不是在接口上启用BGP
  • network支持无类前缀,前缀必须与路由表中的条目完全匹配
  • 如果不指定mask,只通告主类网络号,而且仅当主类网络中至少有一个子网出现在IP路由表中,BGP才会将该主类网络作为一条BGP路由通告
  • 指定了mask,则仅当路由选择表中有与该网络完全匹配的条目时才被通告出去

BGP同步

Router(config-router)# no synchronization

  • 关闭同步(默认关闭)

Router(config-router)# synchronization

  • 开启同步

BGP router-id

Router(config-router)# bgp router-id x.x.x.x

  • 手工设置BGP routerlD

示例1

指定更新源

BGP身份验证

Router(config-router)# neighbor {ip-address | peer-group-name} password string

  • BGP支持MD5邻居身份验证
  • 启用身份验证后,将对通过的对等体之间的TCP连接传输所有的数据等进行验证
  • 认证都是在TCP建立连接的时候完成的

维护BGP

  • 重置BGP会话
  • 将新策略应用于所有路由,必须触发一个更新

三种触发更新的方式

  • 硬重置
  • 软重置
  • 路由刷新

硬重置

  • 断开相应TCP连接,通过这些会话收到的所有信息都将失效,并从BGP中删除
  • (不建议优先使用硬路由,谨慎!这将删除数据,请三思而后行!!!!)
    • clear ip bgp {neighbor-address}
    • clear ip bgp *

软重置

  • 不拆除并重建TCP或者BGP连接,而是仅出发更新操作以便让新的路由策略生效
  • 软重置可以仅由于出站或入站策略,也可同时用于出入站策略

出站软重置

  • 不会拆除TCP连接,不会重置BGP会话,仅促发更新操作以便让新的路由策略生效(发送update消息)
  • 需要修改出站策略时,建议使用该命令
  • clear ip bgp soft out

入站软重置

  • 本地发送route-refresh给所有的BGP邻居
  • clear ip bgp soft in

注:CISCOIOS 12.1开始全面支持入站路由的动态软重配置,但在之前的版本在使用入站软重配置之前必须首先在BGP进程中增加如下配置:neighbor x.x.x.x soft-reconfiguration inbound然后再使用clear ip bgp soft in命令这条命令会将x.x.x.x邻居发送过来的BGP路由存储在内存中,当配置入站软重置后,路由器不再向邻居发送更新请求,而是直接在内存中存储的路由中执行新配置的入站策略,以此来防止触发大批量的路由更新而造成资源的浪费,但是这种操作仍会耗费内存,因此在使用的时候要非常慎重。

BGP属性

公认属性
(Well-known)
公认必遵
(Well-known mandatory)
BGP 必须都能识别,且在更新消息必须包含Origin
AS-Path
Next hop
公认自决
(Well-known discretionary)
BGP 必须都能识别,更新消息可包含可不包含Local-Preference
ATOMIC_Aggregate
可选属性
(Optional)
可选传递
(Optional transitive)
可以不支持该属性,但即使不支持也应当接受包含该属性的路由并传递给其他邻居Community
Aggregator
可选非传递
(Opinional non-transitive)
可以不支持该属性,不识别的BGP进程可以忽略包含这个属性的更新消息,并且不传递给其他BGP邻居MED
Originator_ID
Cluster_list
*Weight

WEIGHT

  • 在路由器本地配置,只提供本地路由策略,不会传播给任何BGP邻居
  • 范围:0~65535;越大越优先
  • 路由器本地始发的路径默认权重是32768,从其他BGP邻居学到的为0

LOCAL PREFERENCE

  • 公认自由决定属性
  • 告诉AS中的路由器,哪条路径是离开AS的首选路径
  • LP越高路径越优
  • 只发送给IBGP邻居,而不能传给EBGP邻居
  • 默认本地优先级为100

AS-Path(公认强制属性)

  • 是前往目标网络的路由经过的自治系统号列表,通告该路由的自治系统号位于列表末尾
  • 作用:确认无环,通告时给EBGP时会加上自己的AS号;通告给IBGP时不修改AS-Path

四种类型

  • **AS_SET**:一个去往特定目的地所经路径上的无序AS列表
  • **AS_SEQENCE**:一个有序的AS号列表
  • **AS_CONFED_SEQUENCE**:一个去往特地目的地所经路径上的有序AS号列表,其用法与AS_SEQENCE完全一样,区别于该列表的AS号属于本地联邦中的AS
  • **AS_CONFED_SET**:一个去往特定目的地上的无序AS号列表,其用法与AS_SET一样,区别在于列表中的AS号属于本地联邦中的AA

Origin(公认强制属性)

  • 标识路由的起源,有下列三种可能:
    • i 通过BGP network,也就是起源于IGP,因为BGP network必须保证该网络在路由表中
    • e 是由EGP这种早期协议重发布而来
    • ? Incomplete,从其他渠道学习到的,路由来源不完全(确认该路由来源的信息不完全)。(重发布的路由)
  • 路由优选顺序:lowest origin code(IGP>EGP>Incomplete)

MED(可选非传递属性)

  • 是一种度量值,用于外部邻居指出进入AS的首选路径,即当入口有多个时,自治系统可以使用MED动态的影响其他AS如何选择进入路径
  • 度量值越小路径越优
  • MED是在AS之间切换,MED发送给EBGP对等体。这些路由器在AS内传播MED,不传递给下一个AS
  • 默认情况下,仅当路径来自同一个AS中的不同EBGP邻居时,路由器才比较他们的MED属性
  • MED影响进入AS的数据流:LP影响离开AS的数据流

比较原则及配置注意事项

  • 本地在将一条BGP路由通告给EBGP Peer时,是否携带MED值,需要根据以下条件进行判断(不对EBGP Peer使用Route-map的情况下)
    • 如果该BGP路由是本地始发(network或redistribute)的,则携带MED值发送给EBGP Peer(如果MED为空,则设置为0)
    • 如果该BGP路由是从其他BGP Peer学习过来的,那么将该路由通告给EBGPPeer时不携带MED
  • 本地在将一条BGP路由通告给IBGPPeer时,一定会携带MED值
    • 如果接收或产生的路由的MED为空,那么在向IBGP Peer通告时,将MED设置为0
  • 总结1、2两点就是MED在IBGP之间传递没有问题(不会丢失),但是在EBGP之间传递要看路由是否起源于自己。

NEXT_HOP(公认强制属性)2

  • 如果路由传递自EBGP peer

  • 如果路由传递自IBGP邻居,并描述的是AS外的目的地

  • 如果路由传递自IBGP邻居,并由AS内BGP路由器引入

Tips:如果IBGP peer使用network或重发布的方式引入IGP路由,那么通告者将使用这些路由的IGP下一跳作为NH;如果这些路由是该IBGP peer配置的BGP汇总路由,则NH为其更新源IP。

On Shared Media

  • RouterB将路由100.100.100.0/24传递给A,NEXT_HOP为10.1.123.2
  • RouterA将路由100.100.100.0/24传递给C,此时NEXT_HOP保持不变
  • 如果路由器收到某条BGP路由,该路由的NEXT_HOP地址值与EBGP邻居(更新对象)同属一个网段,那么该条路由的NEXTHOP地址将保持不变并传递给它的BGP邻居

On NBMA

  • 如果中间的多路访问不是Ethernet,而是帧中继(NBMA)呢?

COMMUNITY

  • 可选传递属性
  • 一种标记,用于简化路由策略的执行
  • 可以将某些路由分配一个特定的COMMUNITY属性,之后就可以基于COMMUNITY值而不是每条路由进行BGP属性的设置了

几个众所周知的值

1
2
3
4
5
6
7
8
9
10
route-map test permit 10
set community ?
<1-4294967295> community number
aa:nn community number in aa:nn format
additive Add to the existing community
internet Internet (well-known community)
local-AS Do not send outside local AS (well-known community)
no-advertise Do not advertise to any peer (well-known community)
no-export Do not export to next AS (well-known community)
none No community attribute

Route

Community=no-adv

R2不会将该路由再通告给任何BGP peer

Atomi_Aggregate及aggregator

172.16.0.0/16

汇总路由丢失明确路由的路径属性

需要给下游邻居告警,并提示“汇总点”及汇总地AS

aggregate-address 172.16.0.0 255.255.0.0 summary-only

1
2
3
4
5
6
7
8
R4# show ip bgp 172.16.0.0
BGP routing table entry for 172.16.0.0/16, version 4
Paths:(1 available, best #1, table Default-lP-Routing-Table)
Flag:0x820
Not advertised to any peer
300,(aggregated by 300 3.3.3.3)
10.1.34.3 from 10.1.34.3 (3.3.3.3)
Origin lGP, metric 0, localpref 100, valid, external,atomic-aggregate, best

报文案例

BGP自动汇总

  • 若R1开启auto-summary,并用重发布直连的方式引入1.1.1.0/24,则该子网会被汇总
  • 若R1开启auto-summary,且network1.1.1.0 mask 255.255.255.0,则仍以明细更新
  • 若R1开启auto-summary,且network1.0.0.0 mask 255.0.0.0,则该子网会被汇总
  • 上面这条network等同于network 1.0.0.0(network的有类宣告)

因此BGP自动汇总(auto-summary)只汇总重发布引入的路由,以及使用network命令有类宣告方式引入的路由。目前CISCO IOS默认关闭自动汇总。

BGP手动汇总

  • 可以考虑在R3上创建静态的汇总路由

ip route 172.16.0.0 255.255.0.0 null0

  • 然后再将汇总路由network进BGP
  • 不推荐此方法

针对特定邻居取消抑制

1
2
3
4
5
6
access-ist 1 permit 172.16.1.0
route-map unsupp permit 10
match ip address 11
router bgp 300
neighbor 10.1.35.5 unsuppress-map unsupp
aggregate-address 172.16.0.0 255.255.0.0 as-set summary-only

1
2
3
4
5
ip prefix-list list1 permit 172.16.1.0/24
ip prefix-list list1 permit 172.16.2.0/24
route-map adv permit 10
match ip address prefix-list list1
aggregate-address 172.16.0.0 255.255.0.0 summary-only as-set advertise-map adv

attrubute-map

1
2
3
route-map attr permit 10
set ?
aggregate-address 172.16.0.0 255.255.0.0 summary-only as-set attribute-map attr

终方案

1
aggregate-address 172.16.0.0 255.255.0.0 summary-only as-set

1
2
3
4
5
access-list 1 permit 172.16.2.0
access-list 1 permit 172.16.11.0
route-map suppmap permit 10
match ip address 1
aggregate-address 172.16.0.0 255.255.0.0 suppress-map suppmap

正则表达式

  • 正则表达式(regular expresion)是按照一定的模板来匹配字符串的公式。

原子字符

示例

乘法字符

示例

  • 一个乘法字符可以应用于一个单字符或多个字符,如果用于多字符,需将字符串放入( )中

范围字符

示例

使用正则表达式匹配AS_PATH

  • AS_PATH可以当作字符串并使用正则表达式进行匹配
  • String中的 “__” 为空格,这也是一个字符,也有可能被匹配

示例

  • 注意as-path access-list也是默认含隐拒绝所有

使用as-path access-list 匹配路由

示例1 搭配filter-list

  • 在R3上可做策略
1
2
3
4
ip as-path access-ist 1deny _600$
ip as-path access-list 1 permit .*
router bgp 300
neighbor 10.1.23.2 filter-list 1 in

示例2 搭配route-map

  • R3可做策略
1
2
3
4
5
6
7
8
ip as-path access-ist 1 permit _600$
route-map setCommu permit 10
match as-path 1
set community no-advertise
route-map setCommu permit 10

router bgp 300
neighbor 10.1.23.2 route-map setcommu in

配置命令

Router(config)# ip as-path access-list num {permit|deny} regexp

  • 配置as-path access-list

Router(config-router)# neighbor x.x.x.x filter-list as-path-filter {inlout}

  • 关联as-path access-list到filter-list,起到路由过滤作用

验证及查看

Router# show ip as-path-access-list

  • 查看配置的 as-path access-list

Router# show ip bgp regexp xx

  • 显示BGP表中所有被该正则表达式匹配上的路由,这是一个非常不错的工具

Router# show ip bgp filter-list access-list-num

  • 显示BGP表中所有被该filter-list匹配的路由

通告community操控路由

BGP Communities

  • BGP communities是一种路由标记方法,用于确保路由过滤和选择的连续性
  • 可选传递属性,不支持该属性的BGP router原封不动的将community值传递给下游BGP邻居

Community

  • 使用全局配置命令切换:

ip bgp-community new-format

BGP路径操纵

设置Community

1
2
3
4
5
6
7
8
9
10
route-map test permit 10
set community ?
<1-4294967295> community number
aa:nn community number in aa:nn format
additive Add to the existing community
internet Internet(well-known community)
local-AS Do not send outside local AS (well-known community)
no-advertise Do not advertise to any peer (well-known community)
no-export Do not export to next AS (well-known community)
none No community attribute

总所周知的值

Route

  • Community=local-as
  • 该路由只能在本AS内传递(如果定义了联邦,则为只在联邦成员AS传递)

为路由前缀分配Community

  • R1配置如下:
1
2
3
4
5
6
7
8
9
10
ip prefix-ist 11 permit 11.11.11.0/24
route-map test permit 10
match ip address prefix-list 11
set community 100:11

router bgp 100
network 11.11.11.0 mask 255.255.255.0
neighbor 10.1.12.2 remote-as 200
neighbor 10.1.12.2 send-community
neighbor 10.1.12.2 route-map test out

为路由前缀分配多个Community

  • R2的配置如下:
1
2
3
4
5
6
7
8
9
10
ip community-ist 11 permit 100:11
route-map test permit 10
match community 11
set community no-export additive

router bgp 200
neighbor 10.1.12.1 remote-as 100
neighbor 10.1.23.3 remote-as 300
neighbor 10.1.23.3 send-community
neighbor 10.1.23.3 route-map test out

为路由前缀分配多个Community(cont.)

  • R3上查看11.11.11.0的BGP路由:
1
2
3
4
5
6
7
8
9
10
R3#sh ip b 11.11.11.0
BGP routing table entry for 11.11.11.0/24,version 5
Paths:(1 available, best #1, table Default-P-Routing-Table, not advertised
to EBGP peer)
Flag:0x820
Not advertised to any peer
200 100
10.1.23.2 from 10.1.23.2 10.1.23.2)
Origin lGP, localpref 100, valid, external, best
Community:100:11 no-export

用community-list匹配团体属性

lp community-list 1 permit 100:11

  • 匹配。匹配community中包含100:11的路由

lp community-list 1 permit 100:11 no-adv

  • 不匹配。要求100:11及no-adv两者都有才匹配成立

lp community-list 1 permit 100:11

Ip community-list 1 permit no-export(或将no-export换成no-adv)

  • 匹配。只要community中包含100:11或no-export

用community-list匹配团体属性(cont.)

ip community-list 12 permit internet

  • 所有路由默认都属于internet

用community-list匹配团体属性 严格匹配

1
2
3
4
5
6
7
lp community-list 11 permit no-export
route-map test permit 10
match community 11 exact-match // 严格匹配
严格匹配community属性为no-export的路由,多一点,少一点都不行

Show lp community-ist 1 [exact-match]
查看community-list 1

删除某个或多个community值

  • 一条路由,允许携带多个community值,构成一个community列表,那么如何删除某个或者某几个community值?譬如只想删除11路由的no-export属性
1
2
3
ip community-list standard del permit no-export		// 匹配要删除的commu值
route-map test permit 10
set comm-list del delete // 用这条命令删除

删除多个community值

1
2
3
4
ip community-list standard del permit no-export		// 用多行community-list
ip community-list standard del permit 100:11 // 用多行community-list
route-map test permit 10
set comm-list del delete

配置community-list

lp community-list 1-99 permit|deny value [value...]

定义标准的community-list,使用internet关键字匹配任何community

lp community-list 100-199 permit|deny regexp

定义扩展的community-list,可使用正则表达式匹配community

show ip community-list

查看配置的community-list

show ip bgp x.x.x.x

查看BGP路由的详细信息,包括community

Prefix-list

配置实例

  • R2上,过滤掉12.12.12.0/24路由,其他放行
1
2
3
4
R2(config)# ip prefix-list 12 deny 12.12.12.0/24
R2(config)# ip prefix-list 12 permit 0.0.0.0/0 le 32
R2(config)# router bgp 12
R2(config-router)# neighbor 10.1.23.3 prefix-list 12 out

distribute-list

配置实例

  • R2上,过滤掉12.12.12.0/24路由,其他放行
1
2
3
4
R2(config)# access-ist 1 deny 12.12.12.0
R2(config)# access-list 1 permit any
R2(config)# router bgp 12
R2(config-router)# neighbor 10.1.23.3 distribute-list 1 out

Route-map

可以在以下的BGP命令中使用route-map关键字

  • neighbor
  • bgp dampening
  • network
  • redistribute

可以为特定的目的在不同的命令中调用定义好的route-map

  • suppress-map
  • unsuppress-map
  • advertise-map
  • inject-map
  • exist-map
  • non-exist-map
  • tabel-map

match语句能匹配

  • Access-list
  • Ip prefix-list
  • Ip next-hop
  • local-preference
  • metric
  • Tag
  • AS PATH
  • BGP community
  • IGP route-type(internal/external)

set语句能设置

  • Origin
  • Weight
  • BGP community
  • LOCAL PREFERENCE
  • MED

配置实例 关联network 执行策略

  • R1上,network引入路由时设置路径属性
1
2
3
4
5
6
7
8
9
10
ip prefix-list 11 permit 11.11.11.0/24
ip prefix-ist 12 permit 12.12.12.0/24
route-map RP1 permit 10
set community 100:11
route-map RP2 permit 20
set community 100:12
router bgp 100
network 11.11.11.0 mask 255.255.255.0 route-map RP1
network 12.12.12.0 mask 255.255.255.0 route-map RP2
neighbor 10.1.12.2 send-community
  • 该策略对所有BGP邻居有效

关联neighbor,针对特定邻居执行策略

R1上,对R2传递路由时,设定MED属性值

1
2
3
4
5
6
7
8
9
10
ip prefix-list 11 permit 11.11.11.0/24
ip prefix-list 12 permit 12.12.12.0/24
route-map RP permit 10
match ip address 11
set metric 1000
route-map RP permit 20
match ip address 12
set metric 2000
router bgp 100
neighbor 10.1.12.2 route-map RP out

配置实例 重发布关联route-map

R2上,将OSPF路由重发布进BGP

1
2
3
4
router bgp 200
redistribute ospf 1 route-map RP match ?
neighbor 10.1.12.1 remote-as 100
no auto-summary

redistribute ospf 1

  • 默认只重发布Intra-Area及Inter-Area路由
  • match extemnal只重发布E1及E2
  • match external 1只重发布E1;external 2只重发布E2
  • match nssa-external 只重发布NSSA外部路由

Policy-list

  • 可预先将包含一组match语句的route-map定义成一个命令列表,这个列表称为policy-list
  • 这些policy-list可以在route-map中被调用
  • 一个policy-list就像个只包含match语句的route-map当route-map被执行,被其调用的policy-list中所包含的match语句将一并被遍历且执行match动作
  • 这是一种在大中型网络中运用、使得配置“模块化”的特性

特性

  • Ipv6不支持
  • 12.0(22)S 和12.2(15)T之前的CISCOIOS版本不支持该特性,另外更老的IOS版本的路由器重启存在路由策略配置丢失的风险
  • Policy-list中不能包含set语句,但是它被route-map调用后,该route-map中可以包含set语句
  • Policy-list只在BGP中支持,其他的IP路由协议并不支持这个特性

配置

1
2
3
ip policy-list as100 permit
match as-path 1
match community 1
  • 上述命令创建一个policy-list
  • Policy-list只能包含match语句
1
2
3
4
route-map RP permit 10
match policy-list as100
match ip address prefix-list 100
set local-preference 300
  • 上述命令在route-map中调用定义好的policy-list
  • 一个route-map中可调用多个policy-list

ORF

配置

  • R2的配置(sender)
1
2
3
4
5
6
7
router bgp 12
address-family ipv4 unicast
neighbor 10.1.12.1 capability orf prefix-ist send
neighbor 10.1.12.1 prefix-list FILTER in

ip prefix-ist FlLTER deny 1.1.1.0/24
ip prefix-list FlLTER permit
  • R1的配置(receiver)
1
2
3
router bgp 12
address-family ipv4 unicast
neighbor 10.1.12.2 capability orf prefix-list receive
  • 注意:省去基本配置,如手工指定BGP邻居

一些

  • ORF消息包含以下内容
    • AFl/SAFlipv4 unicast
    • ORF TYPE
    • When to refresh
    • List of ORF entries
  • ORF类型不同,ORFentries也不尽相同
  • 每种ORF类型都需要进行ORF能力的协商

路由拆分 BGP Deaggregation

背景

配置

  • Conditional inject的配置如下(BGP路由选择进程模式下)

bgp inject-map map1 exist-map map2 [copy attributes]

  • 上述命令的意思是当map2所匹配的汇总路由正常时,在本地BGP RIB中注入map1中定义的明细路由。
  • 当汇总路由挂掉,这条明细也就跟着消失,这就是所谓的条件注入-conditional injection。
  • 下面我们在看来一下这两个route-map的详细内容,这些是需要格外注意的。
  • exist-map使用的route-map最少具有以下两个match语句

match ip address prefix-list

  • 上面这条match语句用来匹配汇总路由

match ip route-source

  • 上面这条match语句用来匹配发送该汇总路由的邻居IP。如果指定了copyattributes选项,那么被inject的明细路由会继承汇总路由的路径属性,否则明细将被当成本地生成的路由。
  • Inject-map使用的route-map中

Set ip address prefix-list

  • 上面的这条set命令用来定义将被注入到本地BGPRIB的明细路由。被注入的前缀可以使用

Show ip bgpinjected-path

  • 来显示

路由反射器

中转AS中的IBGP问题

  • AS内要求IBGP全互联(IBGP水平分割)
  • BGP routers
    • 需维护大量的TCP和BGP链接
    • 网络中充斥着BGP路由信息
  • 解决方案
    • 路由反射器
    • BGP联邦

背景

  • 因为IBGP水平分割原则,导致AS内部需要维护大量的BGP链接(要求IBGP全互联),从而影响网络性能,路由反射器可以“放宽”水平分割原则,缓解该问题

  • Route Reflector
  • Client

联邦内的BGP路由路径属性

  • 在联邦内部保留外部路由的NEXT_HOP属性
  • 公布给联邦的路由的MED属性在整个联邦范围内予以保留
  • 路由的LP属性在整个联邦范围内予以保留
  • 在联邦范围内,将成员AS号压入AS PATH,但不公布到联邦外,并且使用TYPE3、4的AS PATH
  • AS PATH中的联邦成员AS号用于在联邦内部避免环路;联邦内成员AS号不参与AS PATH长度计算

路由反射原则

  • 如果路由学习自非client IBGP对等体,则反射给所有client
  • 如果路由学习自—client,则反射给所有非client IBGP邻居和除了该client以外的所有client
  • 如果路由学习自EBGP邻居,则发送给所有的client和非client IBGP邻居

实例1

  • 如果路由学习自一client,则反射给所有非client IBGP邻居和除了该client以外的所有client

  • 如果路由学习至自client IBG对等体,则反射给所有的client

路由反射器下的防环

  • 由于AS PATH属性在AS内部不会发生变化(仅当路由离开本AS才会被更新),因此AS内才有水平分割的机制用于防止环路,而路由反射器实际上是放宽了水平分割原则,这个就会给环路带来一定的隐患,因此路由反射器需使用以下两个属性防止环路ORIGINATOR ID和CLUSTER LIST是路由反射器使用的可选非传递属性,用来防止环路。

Originator_ID、Cluster_list

Originator_ID

  • 每当一条路由被路由反射器反射时,该路由的始发IBGP路由器的Router-ID将会被存在路由的originator_ID属性中
  • 当一台路由器收到IBGP路由且其originatorID与该路由器的RouterID相同,则路由器忽略该条路由
  • Originator_ID及Cluster-list属性将会影响BGP路径决策

Originator_ID的值

路由反射原则

  • 如果路由学习自非client lBGP对等体,则反射给所有client
  • 如果路由学习自一client,则反射给所有非ctientIBGP邻居和除了该client以外的所有client
  • 如果路由学习自EBGP邻居,则发送给所有client和非clientIBGP邻居

路由反射簇

  • 路由反射簇包括反射器及其Client
  • 每一个簇都有唯一的簇ID
  • 每当一条路由被反射器反射后,该反射器(该簇)的ClusterID就会被添加至路由的Cluster list属性中
  • 每当反射器收到一条Cluster list属性已经包含该簇的ClusterID的路由时,该路由基于防环的目的将不被反射

路由反射器冗余

  • 冗余RR增加了网络的健壮性
  • 使用Originator IDCluster_list属性来在冗余RR环境中避免路由环路。
  • 例如将两个RR 的Cluster_ID配置为一样,那么可以起到进一步的防环作用
  • 所有的RR之间建议采用IBGP全互联
  • Client会收到来自两个RR反射的路由,如何决策 ?

BGP选路规则

  1. 优选具有最大Weight值的路由
  2. 优选具有最大Local Pref值的路由
  3. 优选起源于本地的路由(如本地networkaggregate或redistribute的)即下一跳是0.0.0.0(在BGP 表中,当前路由器通告的路由的下一跳为0.0.0.0)
  4. 优选AS-Path最短的路由
  5. Origin(IGP >EGP>Incomplete )
  6. 优选MED最小的路由,默认情况下仅有当所有的备选路由来自同一AS才会比较MED
  7. 优选EBGP邻居发来的路由(相对于IBGP邻居学过来的),在联邦EBGP和IBGP中首选联邦EBGP 路由
  8. 优选到BGP NEXT HOP最近的邻居
  9. 如果有多条来自相同相邻AS的路由并通过Maximum-paths 使多条路径可用,则将所有开销相同的路由放入Loc-RIB
  10. 优选最老的EBGP路由,降低滚翻的影响(此条主要对EBGP路由起效,但是现在基本不用该条,因不确定性太大)
  11. BGP 邻居的RID越小越优先
  12. 优选Cluster-List 最短的路由
  13. 选择邻居ip地址(BGP的neighbor配置中的那个地址)最小的路由

优选MED最小的路由

MED属性设置方法

  • 将IGP路由引入BGP时关联Route-map进行设置
  • 对BGP Peer应用IN/OUT方向的Route-map进行设置
  • 非Route-map(自动)方式
    • 使用network或redistribute方式将IGP路由引入BGP时,MED将继承IGP路由的Metric(直联路由及静态路由的Metric为0)
    • 使用aggregate-address方式引入路由,则MED为空

MED注意事项

  • 默认情况下,只比较来自同一邻居AS的BGP路由的MED值,就是说如果同一个目的地的两条路由来自不同的AS,则不进行MED值的比较。如果仍然希望比较来自不同邻接AS的路由,可使用如下命令
  • bgp always-compare-med
  • MED只是在直接相连的自治系统间影响业务量,而不会跨AS传递

BGP负载均衡

  • 当前面的8条选路原则都无法优选出最优路由时,并且在BGP进程下面配置了maximum-paths[ibgp]n,n的取值为2-6,那么将执行等价负载均衡,也就是将这些等代价的BGP路径都放进IP路由表使用,但是要注意,虽然这些路径在本地都用了,最终却只有一条BGP路径是best最优的。具备等价负载均衡条件的候选路径需满足如下条件:
    • 必须有相同的路径属性,如weight、LP、AS PATH(不仅是长度,整个AS PATH包括AS号都要相同)、origincode、MED及IGP的Distance值
    • 每一条路径的下一跳都不相同

__