IBGP的水平分隔原则(Split Horizon Rule):
IBGP的水平分割原则:by default,routes learned via IBGP are never propagated to othe IBGP peers;默认情况下对于一个BGP路由器R1来说,从一个IBGP邻居R3那里学到的BGP路由,是不会传递给另外的一个IBGP邻居R2的。(提醒:EBGP是没有这种规则的!!!)
BGP路由反射器RR(Route Reflector):
事实证明:路由反射器就是搞传销地!!!
第一种:来自同一AS内的下线的路由,会反射给所有BGP session:
第二种:非下线的路由会发给自己的下线而不会发送给非下线,但可以发送给其他AS:
第三种:外部来的EBGP路由,可以发给所有本区内的下线和非下线:
LAB8:Part-Mesh IBGP +RR(Router-REfilector):
Step1:
删除R2-R3IBGP Session
删除之前:R2有105.5.0.0/16路由
R3(config-router)#no neighbor 2.2.2.2
R2(config-router)#no neighbor 3.3.3.3
删除之后
IBGP Split Horizon Rule:/IBGP的水平分割原则:
(已完成实验)
IBGP的水平分割原则,
by default,routes learned via IBGP are never propagated to othe IBGP peers.
默认情况下:
对于一个BGP路由器R1来说,从一个IBGP邻居R3那里学到的BGP路由,
是不是传递给另外的一个IBGP邻居R2的
提醒:EBGP是没有这种规则的!!
Step2:解决方法:BGP Route Reflector /RR
在R1上, 定义R2/R3为自己的"路由反射器的客户端"
2-1:
如果使用Peer-group:
R1#neighbor R1-PG route-reflecgtor-client
2-2:
如果没有使用peer-group:
R1(router bgp 123)#
neighbor 2.2.2.2 route-reflector-client
neighbor 3.3.3.3 route-reflector-client
Step3:查看:
问题:在R1上,定义R2为自己的"路由反射器的客户端",但R3不是.
R4能收到105的路由吗?
能!R5能收到114的路由吗?能!
LAB9:联邦(Confederation):
假定:子AS65003/AS65012之间是不运行IGP的、AS65012内部运行的IGP是RIP.
STEP1:删除原来的AS123.重新建AS123
R1/2/3#no router bgp 123
R1#(R2,R3建立IGP)
router rip
version 2
network 1.0.0.0
network 12.0.0.0
no auto-summary
step2:启动新的子AS:
R1/R2#
router bgp 65012
R3#
router bgp 65003
step3:R1/R2/R3指定自己是属于AS123这个联邦
r1/2/3(config-router)#
bgp confederation identifier 123
step4:在两个子AS相邻的边界路由器上,互相指定对方的子AS号
R1(config-router)#bgp confederation peers 65003
R3(config-router)#bgp confederation peers 65012
step5:在联邦中,互相BGP邻居
构建R3-R5之间的EBGP:
R5(config-router)#neighbor 35.0.0.3 remote-as 123
R3(config-router)#neighbor 35.0.0.5 remote-as 150
构建R2-R4之间的EBGP:
R2(config-router)#neighbor 24.0.0.4 remote-as 140
R4(config-router)#neighbor 24.0.0.2 remote-as 123
提醒:在 联邦以外的EBGP邻居,它们能查看到的是联邦的大AS号,而不是子AS号。
R1-R3的联邦EBGP:(联邦子AS间有IGP)
R3:
nei 1.1.1.1 remote-as 65012
nei 1.1.1.1 upd lo 3
nei 1.1.1.1 ebgp-multihop
R1:
nei 3.3.3.3 remote-as 65012
nei 3.3.3.3 upd lo 1
nei 3.3.3.3 ebgp-multihop
R1-R2的联邦IBGP
R1#
nei 2.2.2.2 remote-as 65012
nei 2.2.2.2 upda lo 1
R2#
nei 1.1.1.1 remote-as 65012
nei 1.1.1.1 upda lo 2
step6:宣告BGP路由
宣告104和105进BGP
step7:观察一下BGP的路由的传递
R3上有优化路由
*> 105 5.5.0/24 35.0.0.5
但是由于R1无法通过IGP获得到达35.0.0.0这个网络的路由,所以R1到此路由的 下一跳不可达,从而无法优化。
R1
* 105 5.5.0/24 13.0.0.3
解决办法:
R3(config-router)#neighbor 13.0.0.1 next-hop-self
R1# *>105.5.0.0/16 13.0.0.3
step8:联邦EBGP和普通EBGP的异同点(观察105.5.5.0)
下一跳:
在联邦的子AS中,所有路由器看到的BGP下一跳,都是相邻大AS的边缘节点,而不是本联邦内子AS的下一跳,这是区别与普通EBGP的.
同步:
联邦EBGP和普通EBGP一样,无需考察同步问题.
step9:联邦内的IBGP:(R1-R2)(观察105和104)
R2# *i105.5.0.0/16 13.0.0.3
R1#(config-router)#neighbor 2.2.2.2 next-hop-self
R2
*>i105.5.5.0/24 12.0.0.1 0 100 0 (65003) 150 i
R4#*> 105.5.0.0/16 24.0.0.2
结论:
联邦子AS之间的EBGP的下一跳,不像普通EBGP那样每经过一个AS,都发生改变.
而保留原始的BGP下一跳.
下一跳:
可达,因为两个AS间运行了RIP
同步:
原因是R2从IBGP学到的路由,默认要检查同步
但现在R2不可能通过RIP学到此BGP的路由(指这条路由:i105.1.0.0/16)
Step10:联邦内的同步问题:
R2/R3# no sy
R1(config-router-65012)#sy
R1#show ip bgp (当R1启动"同步")
* i104.4.4.0/24 2.2.2.2 (来自联邦IBGP)
* >105.5.0.0/16 13.0.0.3(来自联邦EBGP)
R2#sh ip bgp
R2#(config-router)#sync
结论:
联邦子AS之间的同步问题:
如果路由来自联邦IBGP,则需要审查同步条件.
如果路由来自联邦EBGP,则不需要审查同步条件.
step11:在两个AS间,无IGP的情况
R3(config)#no router rip
R1(config)#router rip
R1(config-router)#no net 13.0.0.0
手工建立到达对方环回口的静态路由;
R1:ip route 3.3.3.0 255.255.255.0 13.0.0.3
R3:ip route 1.1.1.0 255.255.255.0 13.0.0.1
到此,R1-R3之间的联邦EBGP关系,可以成功建立
但,R2无法通过IGP学到3.3.3.3的路由,所以下一跳不可达.需在R1指next-hop-self
以下是观察BGP的路由的传递:
LAB10:团体(Community)
(相当于一种BGP路由的标识位,常用于标识这条BGP路由应该传播的范围)
step1:通过prefix,定义出特定的BGP路由
R4:
ip prefix-list B-1 seq 5 permit 104.4.0.0/24
ip prefix-list B-2 seq 10 permit 104.4.1.0/24
ip prefix-list B-3 seq 15 permit 104.4.2.0/24
step2:通过route-map,调用前缀列表设定每类路由的community种类
route-map T-R2 permit 10
match ip add prefix B-1
set community no-advertise (do not advertise to any peer/R4通知R2,不要发给任何BGP邻居)
!
route-map T-R2 permit 20
match ip add prefix B-2
set community local-as(Do not send outside local AS/联邦的子AS/小AS)
!
route-map T-R2 permit 30
match ip add prefix B-3
set community no-export(do not export to next AS/联邦的大AS)
!
route-map T-R2 permit 40(match any,set nothing!)
!
step3:在R4上,对R2的BGP路由策略发生,"出方向"的改变
R4(config)#router bgp 140
R4(config-router)#nei 24.0.0.2 route-map T-R2 out
step4:每个BGP路由器,将conmmunity这些标签发送给下一个BGP路由器
每向前走一个BGP Router,就要"send-community"推一下。
在BGP进程中
R4#nei 24.0.0.2 send-community
R2#nei 1.1.1.1 send-community
R1#nei 3.3.3.3 send-community
clear ip bgp *
R2#sh ip bgp community
sh ip bgp community no-advertise
................... local-as
................... no-export
......... 104.4.3.0/24
step5:
如果route-map中,没有最后的那句空的route-map"route-map T-R2 permit 40",
R4向R2通告的bgp路由只有3条:
R4#sh ip bgp neigh 24.0.0.2 advertised-routes
*>104.4.0.0/24
*>104.4.1.0/24
*>104.4.3.0/24
BGP-Summarization
LAB11:非专业汇总(network命令,是不需要宣告明细路由的.)
step1:手工生成一条需要汇总的,静态的,空接口的路由:
R4指4条环回: 104.4.1.0/24
104.4.2.4/24
104.4.3.4/24
104.4.0.4/24
R4(config)#ip route 104.4.0.0 255.255.252.0 null 0 <---指这条静态的原因是为了network的时候能在路由
表里发现这条指向null 0 且22位的路由存在,才
能network成功
step2:将上述路由,宣告到BGP进程里
R4(config)#router b 140
R4(config-router)#net 104.4.0.0 mask 255.255.252.0
在R5上,可以查看到明细路由/汇总路由,
实际上,明细路由是不需要的:
Step3:删除原明细BGP路由的宣告:
R4(config-router)#
router bgp 140
no net 104.4.0.0 mask 255.255.255.0
no net 104.4.1.0 mask 255.255.255.0
no net 104.4.2.0 mask 255.255.255.0
no net 104.4.3.0 mask 255.255.255.0
step4:
R5#show ip bgp
*>104.4.0.0/22
step5:
R4(config)#no ip route 140.4.0.0 255.255.252.0 null 0 - 汇总不成功
R4在BGP表中都无法优化,更加不会传给别地BGP路由器了.
也可以由IGP自动生成
LAB12:BGP的专业汇总(推荐的方法)
step1:准确地宣告每一条BGP明细路由
net 104.4.0.0 ma 255.255.255.0
net 104.4.1.0 ma 255.255.255.0
net 104.4.2.0 ma 255.255.255.0
net 104.4.3.0 ma 255.255.255.0
(不要用network宣告汇总路由)
no net 140.4.0.0 ma 255.255.252.0
step2:使用aggregate命令,实现BGP路由的汇总(aggregate-address命令是不需要实现配置汇总路由的):
R4(config-router-BGP)#aggregate-address 104.4.0.0 255.255.252.0
此时,在BGP路由器上,都接收到了明细和汇总的路由.
step3:为了不让明细路由传播出去,启用summary-only参数.
R4(config-router-BGP)#aggregate-address 104.4.0.0 255.255.252.0 summary-only
此时的R4抑制了所有的明细路由,只发送了汇总路给R3,实现了BGP路由的汇总
step4:R4的BGP进程,自动生成了一条用于汇总的空接口路由
r4#show ip route
B 104.4.0.0/22[200/0]via 0.0.0.0