Ⅰ、BGP协议基础知识
网关路由协议分类
一. IGP----internal gateway protocol--内部网关路由协议
代表协议:RIP、EIGRP、OSPF、ISIS
特性:运行在AS内部的
二. EGP----external gateway protocol--外部网关路由协议
代表协议:BGP
特性:运行在AS之间
BGP AS的范围:
1-65535(64512-65535是私有AS号码)
BGP AS号码需到IANA申请
BGP:路由向量路由协议
距离矢量路由协议----METRIC(HOP)
BGP的防环机制:
AS-PATH防环:收到的路由如果看到自己的AS号,则不接收
BGP特点:
1.BGP是可靠的更新---->端口号179
• 依靠TCP进行传递
• 建立邻居靠单播,可建立非直连邻居
2.更新方式:
• 增量更新---->只更新变化的部分
BGP的数据结构:
1)邻居表
2)BGP的转发表
3)路由表
建立看BGP的转发表:show ip bgp
BGP的报文:
1)Open---->相当于hello,用来建立邻居关系
2)Keeplive---->用来检测邻居存活状态
3)Update
4)Notification---->通告报文:用于终止BGP链接
Ⅱ、BGP邻居建立
一、EBGP
1.直连邻居
Router bgp xx
bgp router-id x.x.x.x
nei x.x.x.x(对端直连地址) remote-as yy(对端的AS号)
查看邻居表的命令:show ip bgp summary
查看转发表的命令:show ip bgp
默认情况下,EBGP邻居应当是直连的
宣告路由:
Router bgp xx
network x.x.x.0 mask 255.255.255.0(必须保证路由表中有该路由)
2.loopback口邻居
注意点:
1)loopback之间要有路由
配置静态路由
2)EBGP之间有直连检测,且默认只允许发一跳
• 配置多跳
Nei x.x.x.x ebgp-multihop [255]
3)源目地址不匹配(两端都要设置)
• 发包方需要修改自己的更新源:
Nei x.x.x.x update-source loopabck 0
对端地址 本地接口
二、IBGP
1.直连邻居
1)注意点:BGP的路由在传递的过程中不修改下一跳地址
解决方案:AS的边界设备,对内做下一跳自我
R1(config-router)#neighbor 2.2.2.2 next-hop-self
2)IBGP的防环规则:路由在IBGP邻居之间只传1跳邻居
所以:IBGP不能建立串行邻居
IBGP如果建立的是非直连邻居(跳着建邻居),则中间的路由器没有BGP的路由,会形成路由黑洞
所以:IBGP不能跳着建立邻居关系
总结:IBGP只能建立全互联结构
2.loopback邻居
1)路由
一般IBGP的loopback路由主要依赖IGP协议
2)修改更新源(发包源地址)
3)其他的与直连口配置一致
总结:
1. EBGP:3条命令
Nei x.x.x.x remote-as 123
Nei x.x.x.x ebgp
Nei x.x.x.x update-source loopback xx
2. IBGP:2-3条命令
非边界设备:
Nei x.x.x.x remote-as xx
Nei x.x.x.x update-source loopback 0
边界设备:
Nei x.x.x.x remote-as
Nei x.x.x.x next-hop-self
Nei x.x.x.x update-source loopback 0
EBGP路由:AD=20
IBGP路由:AD=200
三、Peer-group--------对等体组配置方式
neighbor aaa peer-group -------------建立名叫aaa模板
neighbor aaa remote-as 123
neighbor aaa update-source Loopback0
neighbor aaa next-hop-self
neighbor 2.2.2.2 peer-group aaa----调用模板
neighbor 3.3.3.3 peer-group aaa
四、BGP的同步概念
1. 从IBGP邻居学来的路由,IGP也同时能学习到,则该路由为同步状态
2. 如果1条路由没有同步,但是同步检测开启了,则该路由不能最优
Ⅲ、BGP选路原则
BGP选路原则
首先我们先要清楚什么样的路径不能参与比较,也就是无效的,如果它满足下面这些任意一个条件,那它就是无效的:
1 路径的下一跳不可达。
2 路径未同步,但同步功能被启用了。
3 路径被入境BGP策略所拒绝,并且路由器配置了入境温和重置(soft reset )。当配置了soft reset后,即使被BGP策略拒绝的路由也会保存在RIB中。
4 路由被惩罚(dampened)
只要一条路径不符合上面那些条件,那它就是有效的,就可以被列入最佳路径的候选者中。下面我们就来说明BGP最佳路径选择的步骤。
注意写ROUTE-MAP的时候一定要另外写一条空的条目 防止deny any的出现
―――――――――――――――――――――――――――――――――――
当前,cisco路径选择有13步。按照顺序每一步都依次进行评估直到找到一条最佳路径为止。
IGP路由选择标准:
RIP:HOP
eigrp:带宽、延迟、可靠性、负载、MTU
OSPF:带宽
BGP选路靠:属性
一、weight--权重值
思科私有参数
范围:0-65535,默认取大
本地产生的路由:32768,学习到的路由:0
不可传递,weight只能本地有效
WEIGHT值最高的路径优先。WEIGHT是CISCO专有的参数,且只对配置该参数的本地路由器有效,不能传递。缺省条件下,本地起源的路径具有相同的WEIGHT值(32768),所有其它的路径的WEIGHT值为0。
weight范围(0-65535)
想让某条路由在自己的路由表中优先,妄图直接修改weight的话 就在neighbour 加入一条neighbour xxxx weight 100 那么这个邻居传过来的路由直接改了,这样就可以直接保证它的优先级。
R4放路由,在R1观察
修改方案:
1、针对邻居发来的所有路由进行修改
Router bgp 123
nei 3.3.3.3 weight xxx
注意:所有的策略做完需要clear ip bgp * soft,让策略立即生效
2、针对邻居发来的特定路由进行修改
Access-list 1 permit 192.168.1.0
Route-map aaa permit 10
match ip address 1
set weight 999
route-map aaa permit 20
Router bgp 123
nei 3.3.3.3 route-map aaa in
二、LOCAL-PREF---本地优先级
LOCAL-PREF值(本地优先级)。CISCO IOS中,LOCAL-PREF缺省值为100。该属性只能在本AS内传递。(取大)
事实上如果你要影响一条路由本地路由器的选路,那么用route-map做in的策略,如果用out方向的策略,那么会影响本AS内部这个路由的local-prefence,导致做策略的那个路由器会成为优化的路径。
R4放路由,在R1观察(R3上做策略)
从IBGP邻居学来的路由默认:100
从EBGP邻居学来的路由默认:空(0)
路由在1个AS内传递时,才会有100的值
*可传递属性,只在AS内传递
取大
配置:
Access-list 1 permit 192.168.1.0
Route-map aaa permit 10
match ip address 1
set local-pre 555
Route-map aaa permit 20
Router bgp 123
nei x.x.x.x route-map aaa out
注意点:一般配置在出口设备上,对内做策略
三、本地起源优先
基于始发地(origination)评估路由,路由器本地始发的路径优先。--本地优先
R4、R1放路由,在R4观察
本地起源与学习来的路由:本地更优
四、AS-path
评估AS-PATH的长度,AS-PATH列表最短的路径优先。但可以通过配置 bgp bestpath as-path ignore (隐藏命令)来忽略这一步。
R1放路由,R4观察
选短的
注意点:该选项可以忽略,需要额外增加命令
隐藏命令:bgp bestpath as-path ignore
五、本地起源方式
Network>redistribute
评估路由的origin属性,origin属性值最低的路由优先。IGP:origin值=0; AS-PATH i
EGP:origin值=1;INCOMPLETE:origin值=3 AS-PATH ?
R1放路由,R1观察
Network优于重发布路由
六、MED(metric)
评估MED(metric)。MED值最小的路径胜出。该属性可以传递出AS。缺省条件下,只有在两条路径的第一个AS相同的情况下才会进行比较。如果配置了:bgp always-compare-med,那么对于所有路径都将比较MED,而不考虑它们是否来自于同一个AS。
R1放路由,R4观察(2,3上面操作)
没有值,相当于值是0
比较一下MED跟LOCAL-PRE属性:
默认值是0或者空
取小
*可传递属性,可以在EBG邻居间传递
七、EBGP>IBGP路由
EBGP路径优先于IBGP路径。
R1、R4放相同路由,R2观察
PS:忽略第4条选路
八、选BGP路由的下一跳地址的IGP路由metric
BGP优先选择到BGP下一跳的IGP度量最低的路径。(下一跳是IBGP邻居关系)
R4放路由,R1观察
九、负载均衡开关
默认关闭,如果打开,则选路结束,直接负载均衡
如果配置了maximum-paths[ibgp]n, n在2-6之间,并且存在多条等价成本的路径,那么BGP会在IP路由选择表中插入最多n条接收到的路径。这就激活了BGP多路径负载分担特性。如果没有使用可选关键字ibgp,则多路径特性就仅仅应用于ebgp路径。当不激活这一选项时,它的缺省值为1。(可选项)
R1放路由,R4观察
R4放路由,R1观察
十、EBGP邻居的路由,先到先得
当两条路由下一条是EBGP邻居,BGP将优先选择最先收到的路径(最老的路径)。
十一、IBGP邻居的路由,选取邻居router-id小的路由
BGP优先选择来自于最低的路由器ID的BGP路由器的路由(针对IBGP邻居的路由)。
十二、BGP将优选CLUSTER-LIST长度最短的路径
如果多条路径的始发路由器ID或路由器ID相同,那么BGP将优选CLUSTER-LIST长度最短的路径(路由反射器)。
十三、BGP优选来自于最低的邻居地址的路径
BGP优选来自于最低的邻居地址的路径。
Ⅳ、路由反射器
IBGP邻居应该建立什么结构?
全互联结构
MAN或者3层结构BGP,一般不采用全互联结构,而采用串联结构建立邻居
串联因为IBGP防环规则,导致路由只能传1跳,所以要结合路由反射器。
一、角色
反射器
反射客户端
反射器负责把路由发送给反射客户端
反射客户端也可以把路由反射给反射器
配置:在反射器上指定客户端的地址
R2(config-router)#neighbor 23.1.1.3 route-reflector-client
反射器打破的IBGP的防环规则,所以反射器怎么防环?
所有反射出去的路由包含2个参数:
1.起源者-ID
2.反射器-ID
可以有多个(记录所有反射器的ID)
BGP防环机制总结:
BGP防环种类:3种
1.EBGP
AS-path
2.IBGP
IBGP水平分割原则
3.反射器
Ⅴ、BGP联盟
联盟可以将1个AS拆分成多个小的AS
作用:
1)减少邻居配置
2)逻辑划分层次结构
注意点:联盟只在AS内有效,对外显示依然是1个AS
联盟的AS号一般都是私有AS号
配置:
Router bgp 64512(联盟AS)
bgp router-id x.x.x.x
bgp confederation identifier 100---------指定主号码
bgp confederation peers 64513--------------指定联盟中还有其他哪些AS
Ⅵ、BGP认证与汇总
认证:
BGP只支持MD5
Router bgp xxx
nei x.x.x.x password cisco
汇总:
1.利用配置静态路由的方式汇总
1)手工配置1条汇总的静态路由
Ip route 192.168.0.0 255.255.252.0 null 0
2)把静态路由宣告进BGP传递
Router bgp xx
network 192.168.0.0 mask 255.255.252.0
2.利用aggregate-address方式汇总
1)宣告明细路由
2)到BGP进程下利用aggregate-address汇总
Router bgp xx
aggregate-address 192.168.0.0 255.255.252.0
介绍aggregate-address的2个参数:
1.summary-only
抑制掉明细路由,只发汇总
Router bgp xx
aggregate-address 192.168.0.0 255.255.252.0 summary-only
2.as-set
让汇总路由保留明细路由AS-path属性,避免汇总路由发还给明细的起源自治系统
Router bgp xx
aggregate-address 192.168.0.0 255.255.252.0 summary-only as-set
七、BGP路由过滤
一、route-map
1.定义对象
Access-list 1 permit 192.168.1.0
2.抓出对象过滤
Route-map aaa deny 10
match ip address 1
Route-map aaa permit 20
3.调用在邻居上
Router bgp xxx
nei x.x.x.x route-map aaa out/in
二、distribute-list
*BGP过滤时只能针对邻居生效
1.定义需要放过或者过滤的对象
Access-lsit 1 deny 192.168.1.0
Access-list 1 permit any
2.调用
Router bgp xxx
nei 12.1.1.2 distribute-list 1 out/in
三、prefix-list
1.定义对象
Ip prefix-list aaa deny 192.168.1.0/24
Ip prefix-list aaa permit 0.0.0.0/0 le 32
2.调用
Router bgp xxx
nei 12.1.1.2 prefix-list aaa out/in
扩展prefix-list抓掩码的功能
抓掩码范围
Ip prefix-list aaa permit 1.0.0.0/8 ge 10
Ⅷ、BGP Community 属性
Community属性。这是不同于选路属性的一个属性。该属性具有以下几个特点;
1 Community是一个任选可透明传送属性,它可以简化策略的执行。
2 它是Cisco的一个专有属性,现在在RFC1997中已被标准化。
3 Commnity属性标明一个目的地作为一些目的地团体中的一个成员,这些目的地共享一个或多个共同的特性。
4 Community值可以自己定义,另外有几个已经定义好的团体属性:
NO_ADVERTISE: 表示携带该值的路由不能公布给EBGP和 IBGP邻居
NO_EXPORT:表示携带该值的路由不能公布给EBGP邻居
LOCAL_AS:(NO_EXPORT_SUBCONFED)携带该值的路由可以公布给联盟内的其它子自治系统但不能在构成联盟的AS以外进行公布。
试验步骤如下:
配置BGP,在本实验中要建立联邦 我们顺便学习一下联邦
配置团体属性,让2.2.2.0网络只被R2学习到
配置团体属性,让22.22.22.0网络只被R2,R3学习到
配置团体属性,让222.222.222.0网络只被R2,R3,R4学习到
配置团体属性,让R1不传递2.2.2.0 这条路由
二 试验配置
配置BGP
r1#sh run | b r b
router bgp 100
no synchronization
network 2.2.2.0 mask 255.255.255.0
network 22.22.22.0 mask 255.255.255.0
network 222.222.222.0
neighbor 12.0.0.2 remote-as 234
no auto-summary
r2#sh run | b r b
router bgp 64512
no synchronization
bgp confederation identifier 234 /指明联邦号是234
neighbor 12.0.0.1 remote-as 100
neighbor 23.0.0.3 remote-as 64512 /R3跟它处于联邦内同一个子AS中
neighbor 23.0.0.3 next-hop-self /指定下一跳是它自己
no auto-summary
r3#sh run | b r b
router bgp 64512
no synchronization
bgp confederation identifier 234
bgp confederation peers 64513 /指明该联邦内的另一个子AS
neighbor 23.0.0.2 remote-as 64512
neighbor 34.0.0.4 remote-as 64513 /R4跟它处于联邦内不同子AS之间
no auto-summary
r4#sh run | b r b
router bgp 64513
no synchronization
bgp confederation identifier 234
bgp confederation peers 64512
neighbor 34.0.0.3 remote-as 64512
neighbor 45.0.0.5 remote-as 500
no auto-summary
r5#sh run | b r b
router bgp 500
no synchronization
neighbor 45.0.0.4 remote-as 234
no auto-summary
查看网络
r2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 12.0.0.1 0 0 100 i
*> 22.22.22.0/24 12.0.0.1 0 0 100 i
*> 222.222.222.0 12.0.0.1 0 0 100 i
r3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i2.2.2.0/24 23.0.0.2 0 100 0 100 i
*>i22.22.22.0/24 23.0.0.2 0 100 0 100 i
*>i222.222.222.0 23.0.0.2 0 100 0 100 i
在R2上已经修改了下一跳,所以这时下一跳已经是R2自己了。
r4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
* 2.2.2.0/24 23.0.0.2 0 100 0 (64512) 100 i
* 22.22.22.0/24 23.0.0.2 0 100 0 (64512) 100 i
* 222.222.222.0 23.0.0.2 0 100 0 (64512) 100 i
注意:在R4上看,下一跳依然是R2;为什么不是R3呢?因为R3,R4虽然在同一联邦内,但它们在不同的子AS之间,应该是EBGP关系。EBGP之间传递路由时,下一跳因该是EBGP邻居。但这里为什么不是呢。这就是联邦内EBGP与联邦外EBGP的不同之处。所以现在这些路由的下一跳对于R4来说是不可达的,所以现在路由无法优化,也就无法向R5传递。现在在R3上修改下一跳
r3(config)#router bgp 64512
r3(config-router)#neighbor 34.0.0.4 next-hop-self
r4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 22.22.22.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 222.222.222.0 34.0.0.3 0 100 0 (64512) 100 i
这时,在R4上看,下一跳已经变成了R3,路由可以优化。注意在AS路径中可以看到路由经过了子AS 64512
r5#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 45.0.0.4 0 234 100 i
*> 22.22.22.0/24 45.0.0.4 0 234 100 i
*> 222.222.222.0 45.0.0.4 0 234 100 i
R5上也可以收到这些路由了,注意R5的AS路径看不到子AS ,只能看到联邦的总AS号。因此可以得出这样的结论:联邦内的子AS对于联邦外部来说是隐藏的,不可见的。
到现在为止,所有路由器都可以学习到路由,下面就要应用团体属性来控制路由的传递了。
三 配置团体属性,让2.2.2.0网络只被R2学习到
这里最合适的community属性应该是:no_advertise 因为它不会向任何EBGP IBGP邻居公布路由。
r1(config)#access-list 1 permit 2.2.2.0 0.0.0.255 /用ACL匹配该路由
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 1
r1(config-route-map)#set community no-advertise /设定团体属性
r1(config)#route-map WY permit 20 /与ACL一样 route-map最后也隐藏了一句deny any ,所以在这里要允许所有,要不然其它两条路由会因为匹配不上而无法从R1传递出去。
r1(config)#router bgp 100
r1(config-router)#neighbor 12.0.0.2 route-map WY out /在进程下出方向调用route-map
r1(config-router)#neighbor 12.0.0.2 send-community /让R2传递该社团属性
先在R2上进行查看;
r2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 12.0.0.1 0 0 100 i
*> 22.22.22.0/24 12.0.0.1 0 0 100 i
*> 222.222.222.0 12.0.0.1 0 0 100 i
R2可以学习到该路由
在R3上查看
r3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i22.22.22.0/24 23.0.0.2 0 100 0 100 i
*>i222.222.222.0 23.0.0.2 0 100 0 100 i
可以看到R3已经收不到2.2.2.0这个网络了,往后的路由器也无法收到了。所以社团属性
No_advertise 满足了只让R2学到该路由的需求。
四 配置团体属性,让22.22.22.0网络只被R2,R3学习到
因为R2,R3处于联邦内同一个子AS,意思是该路由不能传递出这个子AS,所以可以用community属性:LOCAL_AS
r1(config)#access-list 2 permit 22.22.22.0 0.0.0.255
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 2
r1(config-route-map)#set community local-AS
r1(config)#route-map WY permit 20
现在进行查看
r2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 12.0.0.1 0 0 100 i
*> 22.22.22.0/24 12.0.0.1 0 0 100 i
*> 222.222.222.0 12.0.0.1 0 0 100 i
R2可以学习到。
r3#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i2.2.2.0/24 23.0.0.2 0 100 0 100 i
*>i22.22.22.0/24 23.0.0.2 0 100 0 100 i
*>i222.222.222.0 23.0.0.2 0 100 0 100 i
R3也可以学到
r4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 22.22.22.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 222.222.222.0 34.0.0.3 0 100 0 (64512) 100 i
为什么R4依然可以学习到,难道属性没起作用吗?显然属性没有起作用,这是因为R2向R3传递该路由时没有让R3继承这个属性,所以R4依然可以学习到,现在必须在R2上配置让R3继承这个属性,这样R3向R4传递路由时团体属性才能生效。
r2(config)#router bgp 64512
r2(config-router)#neighbor 23.0.0.3 send-community
在R2上配置让R3继承该属性
r4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 222.222.222.0 34.0.0.3 0 100 0 (64512) 100 i
现在R4就收不到这条路由了,R5当然也收不到,LOCAL_AS团体属性满足了这个需求。
五 配置团体属性,让222.222.222.0网络只被R2,R3,R4学习到
这个需求意思是让这条路由不传到联邦外(大AS之外),所以要用NO_EXPORT属性
r1(config)#access-list 3 permit 222.222.222.0 0.0.0.255
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 3
r1(config-route-map)#set community no-export
r1(config)#route-map WY permit 20
为了让R4能继承到该属性,必须在R1,R2,R3都配置send-community以便让该属性进行传递。在配置了传递属性之后,现在进行查看
r4#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 22.22.22.0/24 34.0.0.3 0 100 0 (64512) 100 i
*> 222.222.222.0 34.0.0.3 0 100 0 (64512) 100 i
R4可以收到
r5#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 45.0.0.4 0 234 100 i
*> 22.22.22.0/24 45.0.0.4 0 234 100 i
R5已经学习不到222.222.222.0了。需求满足。
但上面的做法有一个明显的缺点就是要在R1,R2,R3上配置传递该属性,比较麻烦。
现在用另一种比较简单的方法。
在R4上直接进行配置。
r4(config)#access-list 1 permit 222.222.222.0 0.0.0.255
r4(config)#route-map WY permit 10
r4(config-route-map)#match ip add 1
r4(config-route-map)#set community no-export
r4(config)#route-map WY permit 20
r4(config)#router bgp 64513
r4(config-router)#neighbor 34.0.0.3 route-map WY in
指定R3向R4传递路由时应用该route-map,所以是in方向的。
现在在R5上进行查看
r5#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 45.0.0.4 0 234 100 i
*> 22.22.22.0/24 45.0.0.4 0 234 100 i
这时,R5已经学习不到这条路由了,可见这种做法也起了作用
六 配置团体属性,让R1不传递2.2.2.0 这条路由
这也是让该路由不传向EBGP邻居,所以也要用NO_EXPORT属性
r1(config)#route-map WY permit 10
r1(config-route-map)#match ip add 1
r1(config-route-map)#set community no-export
r1(config)#route-map WY permit 20
r1(config)#router bgp 100
r1(config-router)#network 2.2.2.0 mask 255.255.255.0 route-map WY /在宣告时调用该route-map
现在进行查看:
r1#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 2.2.2.0/24 0.0.0.0 0 32768 i
*> 22.22.22.0/24 0.0.0.0 0 32768 i
*> 222.222.222.0 0.0.0.0 0 32768 i
R1上可以看到这个网络。
r2#sh ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 22.22.22.0/24 12.0.0.1 0 0 100 i
*> 222.222.222.0 12.0.0.1 0 0 100 i
R2没有学习到这条路由,属性起了作用。
通过本试验,验证了几个定义好的团体属性。