我们都知道BGP路由防环主要分为:
ebgp防环:通过as-path,收到含有我本as号的路由就丢弃。
ibgp防环:BGP speaker 从IBGP获得的路由不会通告给它的IBGP邻居。(水平分割)
接下来,我们通过实验来了解一下ibgp防环机制会带来什么问题?怎么解决。
一、实验拓扑
(看不清,可单击放大)
二、配置思路
1、根据拓扑图,在ensp模拟器上搭好环境;2、完成设备的基础配置(设备名、直连ip地址、loopback接口);
3、配置IBGP路由,在AS200内配置OSPF,都在area0里;在AS100,配置默认路由;4、配置BGP路由协议,R1与R2形成ebgp邻居关系,R2与R3形成ibgp邻居关系。
5、在R1创建loopbakc 10,ip为10.10.10.10/24,并宣告到bgp中。
6、查看BGP路由。7、在AS200配置BGP联盟,并分析、查看BGP路由。
三、配置过程
01
搭建实验环境
略。(参考拓扑图)
02
基础配置
以R2为例,如下,其他设备参考如下及拓扑图信息进行配置,这里不再一一展示。
<Huawei>sys
[Huawei]sys R2
[R2]int lo 0
[R2-LoopBack0]ip add 2.2.2.2 32
[R2-LoopBack0]qu
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.1.1.2 24
[R2-GigabitEthernet0/0/0]undo shut
[R2-GigabitEthernet0/0/0]qu
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 23.1.1.2 24
[R2-GigabitEthernet0/0/1]undo shut
[R2-GigabitEthernet0/0/1]qu
[R2]
03
配置IGP路由、默认路由
配置IBGP路由,在AS200内配置OSPF,都在area0里;在AS100,配置默认路由;
在R1配置默认路由:(因为AS100就一台路由器,所以我就简单配置默认路由)
[R1]ip route-static 0.0.0.0 0.0.0.0 12.1.1.2
R2的OSPF路由协议配置如下:
[R2]ospf
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]net 2.2.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]net 23.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]
[R2-ospf-1-area-0.0.0.0]quit
[R2-ospf-1]quit
[R2]
R3的OSPF路由协议配置如下:
[R3]ospf
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]net 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.0]net 23.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net 35.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
[R3-ospf-1]quit
[R3]
R4的OSPF路由协议配置如下:
[R4]ospf
[R4-ospf-1]area 0
[R4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0
[R4-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255
[R4-ospf-1-area-0.0.0.0]quit
[R4-ospf-1]quit
[R4]
R5的OSPF路由协议配置如下:
[R5]ospf
[R5-ospf-1]area 0
[R5-ospf-1-area-0.0.0.0]net 5.5.5.5 0.0.0.0
[R5-ospf-1-area-0.0.0.0]net 35.1.1.0 0.0.0.255
[R5-ospf-1-area-0.0.0.0]net 56.1.1.0 0.0.0.255
[R5-ospf-1-area-0.0.0.0]quit
[R5-ospf-1]quit
[R5]
R6的OSPF路由协议配置如下:
[R6]ospf
[R6-ospf-1]area 0
[R6-ospf-1-area-0.0.0.0]net 6.6.6.6 0.0.0.0
[R6-ospf-1-area-0.0.0.0]net 56.1.1.0 0.0.0.255
[R6-ospf-1-area-0.0.0.0]quit
[R6-ospf-1]quit
[R6]
配置完OSPF后,可以检查一下邻居状态是否都full了?
以R3为例,使用如下命令查看:
04
配置BGP路由
配置BGP路由协议,R1与R2形成ebgp邻居关系,R2与R3形成ibgp邻居关系。
在R1配置BGP:
[R1]bgp 100
[R1-bgp]peer 12.1.1.2 as-number 200
[R1-bgp]quit
[R1]
在R2配置BGP:
[R2]bgp 200
[R2-bgp]peer 12.1.1.1 as-number 100
[R2-bgp]peer 3.3.3.3 as-number 200
[R2-bgp]peer 3.3.3.3 connect-interface lo 0
[R2-bgp]
在R3配置BGP:
[R3]bgp 200
[R3-bgp]peer 2.2.2.2 as-number 200
[R3-bgp]peer 2.2.2.2 connect-interface lo 0
[R3-bgp]qu
[R3]
在R2查看一下bgp邻居关系是否都建立了:
05
R1上新增路由,宣告BGP
在R1创建loopbakc 10,ip为10.10.10.10/24,并宣告到bgp中。
[R1]int lo 10
[R1-LoopBack10]ip add 10.10.10.10 24
[R1-LoopBack10]qu
[R1]bgp 100
[R1-bgp]net 10.10.10.0 24
[R1-bgp]quit
[R1]
06
查看BGP路由
接下来,我们在AS200里的路由器上查看R1发布的那条BGP路由(10.10.10.0/24)
R2查看,确认收到该路由了:
R3查看,也确认收到该路由了:
R3去ping一下连通性,也能通:
在R4、R5、R6查看bgp路由:
会发现R4、R5、R6均没有收到R1发布的BGP路由,原因我们开头也提到了,这是BGP的ibgp防环机制水平分割导致的,BGP speaker 从IBGP获得的路由不会通告给它的IBGP邻居。本例就是R2从R1收到ebgp路由,可以传给R3,但是当R3从R2这个IBGP邻居关系收到的路由,它不会再传递给R4、R5了。
怎么解决呢?
1、最笨的方法就是AS200内的路由器,两两之间建立ibgp邻居关系。这样有n路由器,就有n(n-1)/2的ibgp邻居关系了。(我们都知道BGP是基于TCP的)
如本例有5台路由器:
5(5-1)/2=10 (可数一下,下图有几根线?是不是也等于10)
2、可以使用BGP反射器(后续分享)
3、使用BGP联盟。(本期分享配置)
这里简单说一下我对BGP联盟的简单理解:
1、联盟机制就是把大的AS切成若干个小AS,在大的AS内部下,传递会携带小AS,用于防环。
2、出来了大AS号,就会剥离掉小AS号,这样ebgp邻居看来,就如同透明一样,没察觉到。
注:本来大AS号就是AS 200 。
07
配置BGP联盟
提醒:现网中配置BGP联盟需谨慎,因为要删除当前的BGP配置,重新配置。
配置BGP联盟,先来规划一下AS200内的小as号:
规划后,可知:在AS200下,
R2与R3形成ebgp邻居关系,
R3与R4形成ibgp邻居关系,R3与R5形成ebgp邻居关系。
R5与R6形成ibgp邻居关系。
R2的BGP联盟配置如下:
[R2]undo bgp 200
Warning: All BGP configurations will be deleted. Continue? [Y/N]: y
[R2]bgp 65501
[R2-bgp]confederation id 200 //原本的AS号
[R2-bgp]confederation peer-as 65502
[R2-bgp]peer 3.3.3.3 as-number 65502
[R2-bgp]peer 3.3.3.3 connect-interface lo 0
[R2-bgp]peer 3.3.3.3 ebgp-max-hop
[R2-bgp]peer 12.1.1.1 as-number 100
[R2-bgp]
R3的BGP联盟配置如下:
[R3]undo bgp 200
Warning: All BGP configurations will be deleted. Continue? [Y/N]: y
[R3]
[R3]bgp 65502
[R3-bgp]confederation id 200
[R3-bgp]confederation peer-as 65501 65503
[R3-bgp]peer 2.2.2.2 as-number 65501
[R3-bgp]peer 2.2.2.2 connect-interface lo 0
[R3-bgp]peer 2.2.2.2 ebgp-max-hop
[R3-bgp]peer 4.4.4.4 as-number 65502
[R3-bgp]peer 4.4.4.4 connect-interface lo 0
[R3-bgp]peer 5.5.5.5 as-number 65503
[R3-bgp]peer 5.5.5.5 connect-interface lo0
[R3-bgp]peer 5.5.5.5 ebgp-max-hop
[R3-bgp]
R4的BGP联盟配置如下:
[R4]bgp 65502
[R4-bgp]confederation id 200
[R4-bgp]peer 3.3.3.3 as-number 65502
[R4-bgp]peer 3.3.3.3 connect-interface lo 0
[R4-bgp]
R5的BGP联盟配置如下:
[R5]bgp 65503
[R5-bgp]confederation id 200
[R5-bgp]confederation peer-as 65502
[R5-bgp]peer 3.3.3.3 as-number 65502
[R5-bgp]peer 3.3.3.3 connect-interface lo 0
[R5-bgp]peer 3.3.3.3 ebgp-max-hop
[R5-bgp]peer 6.6.6.6 as-number 65503
[R5-bgp]peer 6.6.6.6 connect-interface lo 0
[R5-bgp]
R6的BGP联盟配置如下:
[R6]bgp 65503
[R6-bgp]confederation id 200
[R6-bgp]peer 5.5.5.5 as-number 65503
[R6-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[R6-bgp]
配置完后先看看bgp邻居是否已建立?
是不是简洁很多了,配置完联盟,AS200内只需4条bgp邻居关系,原本需要10条。
现在,我们到R3、R4、R5、R6上查看R1发布的那条bgp路由(10.10.10.0/24)是否可以收到了?
你会发现,他们均收到R1发布的bgp路由,不过属性里多了括号和新增的AS号,用来防环的。
现在我们可以再R6也发布一条bgp路由,然后再R2、R1上查看,同时也可以抓包看看。
在R6进行如下配置:
[R6]int lo 60
[R6-LoopBack60]ip add 60.60.60.60 24
[R6-LoopBack60]qu
[R6]bgp 65503
[R6-bgp]net 60.60.60.0 24
[R6-bgp]quit
[R6]
在R1、R2上查看bgp路由:
R1上查看:
R2上查看:
在R2的两个接口抓包:
在R6重新发布一些,这样抓包才能抓到R6发布的这条bgp路由:
[R6]bgp 65503
[R6-bgp]undo net 60.60.60.0 24
[R6-bgp]net 60.60.60.0 24
[R6-bgp]
R2发给R1的ebgp路由,发现as-path只有200:
R3发给R2的ibgp路由,发现as-path携带是括号+新增的as号:
所以,得出结论:
联盟新增的as号,只会在本AS(200)内传递使用,用于防环。出了AS200,就把联盟新增的as号剥离了,添加AS200。