在IBGP中对等体之间需要建立全互连关系,所以假设一个as内有n台路由器,建立的IBGP连接数就有n(n-1)/2。当IBGP对等体数目很多时候,很消耗设备的资源。

    利用路由反射器可以缓解这一问题。客户端只需要和反射器建立IBGP连接即可。反射器会在客户端之间反射路由信息,客户端之间不需要建立IBGP连接。只有非客户端和非客户端之间不能传递BGP路由

BGP-17 配置BGP反射器_第1张图片

    参考Juniper官方文档我们来做这个实验。我觉得有点小问题,还希望老司机指正。


    A是反射器,BC是A的客户端,DE位于cluster以外,所以是非客户端。按照前面介绍的,B和C作为A的客户端,只需要和A建立IBGP连接,不需要再和DE建立IBGP连接。同理,E只需要建立和D,A的IBGP连接即可。

1.A是反射器,所以需要在BGP里面指定所有的IBGP对等体,同时配置自己的cluster-id(本例使用A的lo0口):

BGP-17 配置BGP反射器_第2张图片

2.B和C作为客户端,只需要在BGP里面指定反射器A的对等体。

BGP-17 配置BGP反射器_第3张图片

BGP-17 配置BGP反射器_第4张图片

3.D和E作为非客户端,同样也不需要指定客户端B和C的对等体。

BGP-17 配置BGP反射器_第5张图片


BGP-17 配置BGP反射器_第6张图片

4.以A为例子,配置IGP,并把OSPF路由重分布进IBGP。

配置IGP:

BGP-17 配置BGP反射器_第7张图片
配置重分布:

A POPO.png

5.直连接口和ROUTER-ID以及AS号:

A as号.png

BGP-17 配置BGP反射器_第8张图片

6.检查BGP的邻居:

D也变成了客户端.png

我发现D的状态里面是ROUTE REFLECTOR CLIENT。D不是应该非客户端吗?

我试着在cluster id后面配置neither 发现cluster是group全局的。

所以我修改了配置,BGP的进程一台设备只能起一个,但是group可以建立很多个:

BGP-17 配置BGP反射器_第9张图片

BGP-17 配置BGP反射器_第10张图片

然后我再查看bgp的邻居:

D依旧建立起了邻居。但是状态没有了 客户端选项。

D 不在是客户端.png

B的邻居中依旧显示 客户端。

B 客户端.png


接下来查看BGP group,因为我修改了配置,输出可能会和官方的文档有些出入:

BGP-17 配置BGP反射器_第11张图片

继续查看BGP summary:

BGP-17 配置BGP反射器_第12张图片

最后查看路由:

屏幕快照 2018-04-10 11.33.01.png


实验的最后,可以看到在BC上收到了DE的IBGP路由,也在DE上看到BC的IBGP路由。唯一的问题就是 既然DE是非客户端,为什么文档里要把他俩也配置在cluster id下面变成客户端呢?还是我理解错了