实验拓扑
实验需求
R1、R2、R3属于AS123,R4属于AS 400;
AS123内的R1、R2、R3运行OSPF,通告各自直连接口,注意OSPF域的工作范围;
R3-R4之间建立eBGP邻居关系,R2暂时不运行BGP,R1-R3之间建立iBGP邻居关系,所有的BGP邻居关系基于直连接口建立;在R4上创建Loopback0接口并将接口IP地址设置为4.4.4.4/32,同时将该条直连路由通告到BGP,要求R1的路由表中能看到4.4.4.4/32;
修改BGP配置,使得R1、R3基于Loopback接口建立iBGP邻居关系,R1、R3的Loopback接口地址分别为1.1.1.1/32及3.3.3.3/32;
要求R1能够ping通4.4.4.4。
实验步骤及配置
所有设备完成接口IP地址的配置(这部分配置不再贴出)
R1、R2、R3运行OSPF;R1、R3建立IBGP邻居关系,R3、R4建立EBGP邻居关系
R1的配置如下
[R1]ospf1router-id1.1.1.1 [R1-ospf-1]area0 [R1-ospf-1-area-0.0.0.0]network10.1.12.00.0.0.255 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit [R1]bgp123#进入BGP进程,AS号为123 [R1-bgp]router-id1.1.1.1#配置BGProuterID [R1-bgp]peer10.1.23.3as-number123#配置BGP邻居,由于邻居的AS号与本地一致,因此两者之间为iBGP邻居关系
R2的配置如下(R2先不运行BGP)
[R2]ospf1router-id2.2.2.2 [R2-ospf-1]area0 [R2-ospf-1-area-0.0.0.0]network10.1.12.00.0.0.255 [R2-ospf-1-area-0.0.0.0]network10.1.23.00.0.0.255 [R2-ospf-1-area-0.0.0.0]quit [R2-ospf-1]quit
R3的配置如下:
[R3]ospf1router-id3.3.3.3 [R3-ospf-1]area0 [R3-ospf-1-area-0.0.0.0]network10.1.23.00.0.0.255 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit [R3]bgp123 [R3-bgp]router-id3.3.3.3 [R3-bgp]peer10.1.34.4as-number400#配置eBGP邻居R4 [R3-bgp]peer10.1.12.1as-number123#配置iBGP邻居R1
R4的配置如下:
[R4]interfaceloopback0 [R4-loopback0]ipaddress4.4.4.432 [R4]bgp400 [R4-bgp]router-id4.4.4.4 [R4-bgp]peer10.1.34.3as-number123 [R4-bgp]network4.4.4.432#把本地直连路由network进BGP
[R3]displaybgprouting-table BGPLocalrouterIDis10.1.23.3 Statuscodes:*-valid,>-best,d-damped, h-history,i-internal,s-suppressed,S-Stale Origin:i-IGP,e-EGP,?-incomplete TotalNumberofRoutes:1 NetworkNextHopMEDLocPrfPrefValPath/Ogn *>4.4.4.4/3210.1.34.400400i
我们看到R3已经学习到了R4传递过来的BGP路由4.4.4.4/32。并且该条BGP路由的NextHop属性值为10.1.34.4,这个下一跳是可达的,因此该条路由在R3的BGP表里有标记“* >”,其中“*”号表示这条路由是可用(Valid)的,而“>”则表示这条路由是去往该目的地最优(Best)的路由。再到在R3上查看路由表:
[R3]displayiprouting-tableprotocolbgp Destination/MaskProtoPreCostFlagsNextHopInterface 4.4.4.4/32EBGP2550D10.1.34.4GigabitEthernet0/0/1
该条BGP路由由于是best,因此被装载进了路由表。那么,既然在R3上,这条BGP路由是best的,它就会传递给自己的iBGP邻居R1,在R1上查看BGP表。
[R1]displaybgprouting-table NetworkNextHopMEDLocPrfPrefValPath/Ogn i4.4.4.4/3210.1.34.401000400i
我们看到,R1的BGP表里,已经有4.4.4.4/32的路由,而这条路由NextHop属性值是10.1.34.4,但是R1在本地路由表中没有到达10.1.34.0/24的路由,因此此时BGP路由4.4.4.4/32的下一跳不可达,该BGP条目则不可用(在BGP表中没有“ * ”星号标记),既然不可用,自然就不能装载进路由表中使用。那么怎么解决这个问题呢?一个最简单的方法是,为R1配置一条静态路由,ip route-static 10.1.34.0 24 10.1.23.3,这样一来R1的路由表里就有了到达10.1.34.0/24网段的路由,那么BGP路由4.4.4.4/32的下一跳就可达了,路由自然也就可用了。但是这种方法有点钻空子、取巧。另一种方法是,在R3上OSPF进程中将10.1.34.0/24网段也注入到OSPF,使得R1能够通过OSPF学习到10.1.34.0/24网段的路由,但是由于R3-R4之间的互联链路被视为AS外部链路,因此10.1.34.0/24作为外部网段往往不会被宣告进AS内的IGP。那么还有什么其他办法能解决这个问题?
修改下一跳为自身
BGP是AS-by-AS的路由协议,而不是router-by-router的路由协议。在BGP中,next-hop并不意味着是下一台路由器,而是到达下一个AS的IP地址。当一台BGP路由器将路由传递给自己的eBGP邻居时,该路由的NextHop属性值为其BGP更新源地址。如下图,R4将4.4.4.4/24传递给R3时,下一跳为10.1.34.4,也就是R4的GE0/0/0口地址。
当一台BGP路由器将eBGP路由传递给自己的iBGP邻居时,默认情况下这些eBGP路由的NextHop属性值保持不变。因此R3收到R4传递过来的eBGP路由,下一跳属性值为10.1.34.4,那么它将该条路由传递给iBGP邻居R1的时候,路由的下一跳属性值不会发生改变,仍然为10.1.34.4。
这就造成了我们上面所述的问题,R1由于没有到达10.1.34.0/24的路由,因此下一跳地址10.1.34.4不可达,从而导致BGP路由4.4.4.4/32不可用。
有一个方法可以解决这个问题:在R3上使用next-hop-local命令,可修改BGP路由的下一跳属性值为自身。在下图中,我们在R3上增加了peer 10.1.12.1 next-hop-local命令,这样一来当R3再更新eBGP路由给R1的时候,这些路由的下一跳属性值就会被修改为R3自己的更新源地址,而这个地址,R1能够通过OSPF学习到,因此是可达的。
完成配置后,我们在R1上查看BGP表:
[R1]displaybgprouting-table NetworkNextHopMEDLocPrfPrefValPath/Ogn *>i4.4.4.4/3210.1.23.301000400i
R3将EBGP路由4.4.4.4/32传递给R1时,将路由的下一跳属性值改成了自身的IP(10.1.23.3),而这个IP对于R1来说是路由可达的,因此路由优化了,并被装载进了路由表。
指定更新源IP
内部网关协议例如RIP、OSPF等,能够自动在接口上发现直连邻居,但是BGP在这点上却大不相同,BGP无法自动发现邻居,必须手工使用peer命令指定邻居。BGP路由器之间交互BGP报文时,报文的目的地址就是peer命令所配置的地址,而源地址默认则是数据包出接口的地址。iBGP邻居在一个AS内部被部署,一般而言,AS内部的网络是具有一定冗余性的,例如下图所示,我们在本实验拓扑的基础上做了一点小小的修改,在AS123中增加了一台路由器:R5。R1、R2、R3、R5运行了OSPF。现在设想一下,如果R1与R3之间的iBGP邻居关系使用物理接口来建,例如R1使用GE0/0/0接口,R3使用GE0/0/0接口的话,则一旦R2发生故障,R1、R3的GE0/0/0接口都会DOWN掉,于此同时R1、R3的BGP邻居也就DOWN掉了。但是仔细观察我们就会发现,其实R1、R3之间的IP连通性其实还是存在的,经过R5的这条冗余路径完全可以在R2发生故障时实现R1、R3之间的数据互通。因此为了保障iBGP邻居关系的稳定性,我们提倡在建立iBGP邻居关系时,使用Loopback来建立,而不是物理接口。
思路很简单,就是在R1及R3上各开设一个Loopback接口并为这个接口配置IP地址,然后在各自的Loopback接口上激活OSPF,使得OSPF域能够获知这两条Loopback路由。接下来R1、R3之间部署iBGP邻居时,使用Loopback地址来建,如此一来,即使R2发生故障,由于R1、R3双方依然可以通过OSPF学习到对端的Loopback路由,所以故障发生时,R1、R3的BGP邻居关系不会DOWN。
回到本实验,在上文的配置中,我们在R1-R3之间建立iBGP邻居关系时,使用的就是物理接口,现在我们将配置做些修改:
在R1及R3上创建loopback0,地址分别为1.1.1.1/32及3.3.3.3/32,然后各自将loopback0宣告进OSPF,使得彼此都能通过OSPF学习到对方的Loopback0路由,再修改BGP的配置,使得R1-R3之间的iBGP邻居关系基于Loopback0来建立。
peerx.x.x.xconnect-interfaceintf[ipv4-src-address]
上面这条命令用于指定BGP的更新源地址或接口。
R1增加的配置如下:
[R1]interfaceloopback0 [R1-LoopBack0]ipaddress1.1.1.132 [R1-LoopBack0]quit [R1]ospf1 [R1-ospf-1]area0 [R1-ospf-1-area-0.0.0.0]network1.1.1.10.0.0.0 [R1-ospf-1-area-0.0.0.0]quit [R1-ospf-1]quit [R1]bgp123 [R1-bgp]undopeer10.1.23.3 [R1-bgp]peer3.3.3.3as-number123 [R1-bgp]peer3.3.3.3connect-interfaceLoopBack0
由于R1、R3现在是使用Loopback接口来建立邻居关系,因此在R1上使用peer命令指定邻居的时候,必须使用R3的Loopback地址作为邻居IP。同时使用connect-interface关键字指定本设备用于和对端建立邻居关系的接口,这个接口的地址将作为更新源。
R3的关键性配置如下:
[R3]interfaceloopback0 [R3-LoopBack0]ipaddress3.3.3.332 [R3-LoopBack0]quit [R3]ospf1 [R3-ospf-1]area0 [R3-ospf-1-area-0.0.0.0]network3.3.3.30.0.0.0 [R3-ospf-1-area-0.0.0.0]quit [R3-ospf-1]quit [R3]bgp123 [R3-bgp]undopeer10.1.12.1 [R3-bgp]peer1.1.1.1as-number123 [R3-bgp]peer1.1.1.1connect-interfaceLoopBack0 [R3-bgp]peer1.1.1.1next-hop-local
完成上述配置后,R1与R3即会基于Loopback0接口建立邻居关系。
完成这个实验
经过前面的讲解,我们的环境现在是这样的:R1-R3之间建立基于Loopback的iBGP邻居关系;R3对R1配置了next-hop-local;R3与R4之间仍然是建立基于直连的eBGP邻居关系;R4在BGP中network本地的4.4.4.4/32路由。
现在R1是能够学习到BGP路由4.4.4.4/32的,并且该路由在BGP表中也是优化的,这条路由就会被装载进R1的路由表。那么是不是意味着R1就能够ping通4.4.4.4了呢?经过测试你可能会发现,R1虽然有了4.4.4.4/32网段的路由,但是无法ping通,为什么?因为数据包在R2这里就被丢弃了,还记得么,R2并没有运行BGP,因此它无法学习到BGP路由4.4.4.4/32,现在问题来了,怎么让R1 ping通R4呢?方法之一是在R3上将BGP路由重发布进OSPF,使得R2能够通过OSPF学习到BGP路由,但是这种方法存在一定的风险,因为我们知道BGP承载的前缀数量往往是非常庞大的;另一种方法是,让R2也运行BGP,并与R3建立iBGP邻居关系,这样一来问题就解决了。那么BGP邻居关系就变成了这样:
R3增加如下配置:
[R3]bgp123 [R3-bgp]peer2.2.2.2as-number123 [R3-bgp]peer2.2.2.2connect-interfaceLoopBack0
R2增加如下配置:
[R2]interfaceloopback0 [R2-LoopBack0]ipaddress2.2.2.232 [R2-LoopBack0]quit [R2]ospf1router-id2.2.2.2 [R2-ospf-1]area0 [R2-ospf-1-area-0.0.0.0]network2.2.2.20.0.0.0 [R2-ospf-1-area-0.0.0.0]quit [R2-ospf-1]quit [R2]bgp123 [R2-bgp]peer3.3.3.3as-number123 [R2-bgp]peer3.3.3.3connect-interfaceLoopBack0
完成上述配置后,R1、R2和R3就都学习到了4.4.4.4/32的BGP路由。最后要实现R1能够ping通4.4.4.4,则要求R4的路由表中也有10.1.12.0/24的路由,以保证数据包的回程。因此在R1上增加如下配置:
[R1]bgp123 [R1-bgp]network10.1.12.024
也就是将10.1.12.0/24这条路由注入到BGP,如此一来R4就能通过BGP学习到这条哦路由,那么当R1去ping 4.4.4.4时,报文能够顺利到达4.4.4.4,并且回程的报文能顺利地回来。
学会看三张表
查看BGP邻居表:
查看BGP表:
查看BGP路由条目的详细信息:
审核编辑:汤梓红
-
接口
+关注
关注
33文章
8575浏览量
151014 -
BGP
+关注
关注
0文章
83浏览量
15327
原文标题:BGP进阶:BGP 基础实验配置
文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论