背景:在一个AS中的设备运行了BGP协议,那么正常应该都连接了其他的AS,存在EBGP邻居关系;又由于IBGP的水平分割规则,导致从外部学习到的路由传递给本地AS时,需要和本地AS中运行BGP协议都要建立IBGP邻居关系,就会导致建立数量成指数上升,配置起来很麻烦
所谓有条件的打破,是指在保障无环前提下消除IBGP水平分割机制;AS-BY-AS
1.路由反射器
角色:RR反射器 客户端 非客户端
无邻居; 由RR作为中心点与多个客户端、非客户端构成一个簇(组);在一个簇内存在一台RR和至少一台客户端;也可以一台RR和多个客户端、多个非客户端;或者一个RR与多个客户端,没有非客户端;
反射规则:不优路由不能被传递,自然也不能被反射;
1、 RR从一个EBGP邻居处学习到的路由,可以传输给客户端、非客户端,以及本地的其他EBGP邻居;
2、 RR从一个客户端学习到的路由,可以传递给本地其他的客户端、非客户端、其他的EBGP邻居;
3、 RR从一个非客户端学习到的路由,可以传递给本地的其他客户端、EBGP邻居;不能传递给其他的非客户端;(非非不传!!!)
[r3-bgp]peer 2.2.2.2 reflect-client 邻居2.2.2.2成为本地的客户端,同时本地成为RR
2.联邦
将一个AS,逻辑的分为多个小AS;对外依然遵循大AS号传递规则;
但小AS间为联邦内的EBGP邻居关系,可以像EBGP关系一样传递路由,但默认不对属性进行修改;
1) 所有操作基于小AS号进行;
2) AS内所有设备需要定义自己所在的大AS号
3) 小AS间的BGP设备需要告知对端的小AS号
[r3]bgp 64512
[r3-bgp]router-id 3.3.3.3
[r3-bgp]confederation id 2 申明本地的大AS号
[r3-bgp]confederation peer-as 64513 告知本地直连的其他小AS号,若没有直连到其他小
AS不用配置
[r3-bgp]peer 2.2.2.2 as-number 64512
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 as-number 64513
[r3-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r3-bgp]peer 4.4.4.4 ebgp-max-hop
相关实验
基本配置
如图:r1在AS1区域,R2-R7在AS2区域,R8在AS3区域
R2-R7在一个AS2区域,先通过ospf宣告,然后就搭BGP(搭地址这些在这里就不用多说了)
R1和R2 EBGP连接,R7和R8通过EBGP 连接,用的是实际接口地址
联邦
R2,R3,R4联邦,在同一个小号AS为64512
R2上:
r2]bgp 64512
[r2-bgp]router-id 2.2.2.2
[r2-bgp]confederation id 2 申明本地的大AS号为2
[r2-bgp]confederation peer-as 64513 告知本地直连的其他小AS号,若没有直连到其他小AS不用配置 ,R5和R2直连,R5的小号是64513,要宣告一下R5的小AS
[r2-bgp]peer 12.1.1.1 as-number 1
[r2-bgp]peer 172.16.1.3 as-number 64512 和R3的环回建,R3的小号也是64512
[r2-bgp]peer 172.16.1.3 connect-interface LoopBack 0 源地址是环回接口[r2-bgp]peer 172.16.1.5 as-number 64513 宣告一下R5的小AS
[r2-bgp]peer 172.16.1.5 connect-interface LoopBack 0 和R5的环回接口建
[r2-bgp]peer 172.16.1.5 ebgp-max-hop 2 环回建的,要改下一跳
为什么要改ebgp-max-hop?
通常情况下,EBGP对等体之间必须具有直连的物理链路,如果不满足这一要求,则必须使用 peer ebgp-max-hop 命令允许它们之间经过多跳建立TCP连接。 BGP使用Loopback口建立EBGP邻居时,必须配置命令 peer ebgp-max-hop (其中 hop-count ≥2),否则邻居无法建立
R3上
[r3]bgp 64512
[r3-bgp]router-id 3.3.3.3
[r3-bgp]confederation id 2 申明本地的大AS号为2
[r3-bgp]peer 172.16.1.2 as-number 64512 告知R2的小AS号
[r3-bgp]peer 172.16.1.2 connect-interface LoopBack 0 和R2的环回接口建
[r3-bgp]peer 172.16.1.4 as-number 64512 告知R3的小AS号
[r3-bgp]peer 172.16.1.4 connect-interface LoopBack 0 和R3的环回接口建
R4上
[r4]bgp 64512
[r4-bgp]router-id 4.4.4.4
[r4-bgp]confederation id 2
[r4-bgp]confederation peer-as 64513 R7在AS 64513,要宣告一下64513
[r4-bgp]peer 172.16.1.3 as-number 64512 告知R3的小AS号
[r4-bgp]peer 172.16.1.3 connect-interface LoopBack 0
[r4-bgp]peer 172.16.1.7 as-number 64513 告知R7的小AS号
[r4-bgp]peer 172.16.1.7 connect-interface LoopBack 0
[r4-bgp]peer 172.16.1.7 ebgp-max-hop 2 在不同的as,要改下一跳
同理,R5,R6,R7联邦,在同一个小号AS为64513,命令差不多,就不写出来了
修改下一跳操作
要想 R1的路由传给as2内部,还需要再AS边界如R2和R7上修改下一跳为本地
[r2]bgp 64512
[r2-bgp]peer 172.16.1.3 next-hop-local
[r2-bgp]peer 172.16.1.5 next-hop-local
[r7]bgp 64513
[r7-bgp]peer 172.16.1.4 next-hop-local
[r7-bgp]peer 172.16.1.6 next-hop-local
这样,R2可以传给R3,但R4还是学习不到,因为R4和R3在同一个as内,由于水平分割,R3不能发给R4,所以在这里让R3作为R4的路由发射器,RR,把R3学习到的传给R4
命令:
[r3]bgp 64512
[r3-bgp]peer 172.16.1.4 reflect-client
同理;R6也要做为RR
[r6]bgp 64513
[r6-bgp]peer 172.16.1.7 reflect-client
在R1和R8上宣告一下环回,as2内都能学习到
BGP汇总
方法一:NULL空接口防环
宣告R2-R7
[r2]ip route-static 172.16.0.0 21 NULL 0 空接口防环
[r2]bgp 64512
[r2-bgp]network 172.16.0.0 21 全部宣告
此时,R1和R8都能学习到AS2内部的路由
但是存在不好的地方,空接口写在R2上,如果R8访问一个AS内没有的地址如172.16.0.8(在172.16.0.0范围),会先去R7上查,有没有这个地址,R7一查路由表,发现R2有一个172.16.0.0的路由,R7就会把这个地址发给R2, 而不是丢弃,R2就会成为一个黑洞。
所以R7上也要汇总(这里记住,要重分布,所有边界都重分布,要汇总,所有边界都汇总)
方法二:在R7换一种明细路由配置
[r7]bgp 64513
[r7-bgp]network 172.16.2.0 24
[r7-bgp]network 172.16.3.0 24
[r7-bgp]network 172.16.4.0 24
[r7-bgp]network 172.16.5.0 24
[r7-bgp]network 172.16.6.0 24
[r7-bgp]network 172.16.7.0 24
[r7]bgp 64513
[r7-bgp]aggregate 172.16.0.0 21 detail-suppressed 仅传递聚合条目,所有明细路由被抑制,同时自动产生空接口防环路由
s> 表示被抑制了,转发出去的还是172.16.0.0 这条路由
内容有点长,希望对你有所帮助