在IBGP中對等體之間需要建立全互連關係,所以假設一個as內有n臺路由器,建立的IBGP連接數就有n(n-1)/2。當IBGP對等體數目很多時候,很消耗設備的資源。
利用路由反射器可以緩解這一問題。客戶端只需要和反射器建立IBGP連接即可。反射器會在客戶端之間反射路由信息,客戶端之間不需要建立IBGP連接。只有非客戶端和非客戶端之間不能傳遞BGP路由
參考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口):
2.B和C作爲客戶端,只需要在BGP裏面指定反射器A的對等體。
3.D和E作爲非客戶端,同樣也不需要指定客戶端B和C的對等體。
4.以A爲例子,配置IGP,並把OSPF路由重分佈進IBGP。
配置IGP:
配置重分佈:
5.直連接口和ROUTER-ID以及AS號:
6.檢查BGP的鄰居:
我發現D的狀態裏面是ROUTE REFLECTOR CLIENT。D不是應該非客戶端嗎?
我試着在cluster id後面配置neither 發現cluster是group全局的。
所以我修改了配置,BGP的進程一臺設備只能起一個,但是group可以建立很多個:
然後我再查看bgp的鄰居:
D依舊建立起了鄰居。但是狀態沒有了 客戶端選項。
B的鄰居中依舊顯示 客戶端。
接下來查看BGP group,因爲我修改了配置,輸出可能會和官方的文檔有些出入:
繼續查看BGP summary:
最後查看路由:
實驗的最後,可以看到在BC上收到了DE的IBGP路由,也在DE上看到BC的IBGP路由。唯一的問題就是 既然DE是非客戶端,爲什麼文檔裏要把他倆也配置在cluster id下面變成客戶端呢?還是我理解錯了