RGSE-Routing and Switching | BGP高级特性(2)
文章目录一、BGP路由黑洞BGP路由黑洞的产生原因IBGP全互联中的水平分割原则二、BGP联盟BGP联盟是什么BGP联盟特性BGP联盟中的下一跳不可达问题BGP联盟实验三、BGP对等体组BGP对等体组RR四、BGP路由汇总为什么需要路由汇总BGP路由汇总的方式通过network方式进行路由汇总NULL 0的应用通过aggregate-address的方式进行BGP路由汇总一、BGP路由黑洞BGP路由黑洞的产生原因当跨设备进行IBGP Peer建立时由于中间设备未运行BGP。数据包传递到这些未运行BGP设备的时候这些设备上查看路由表后发现并没有BGP设备传来的路由条目后就自动将这条路由信息丢弃从而产生路由黑洞。究其原因还是因为这些设备没有运行BGP不会收到通过BGP传递来的路由信息。如图1-1当R6想要访问1.1.1.1/32时在BGP路由表中告诉R6向自己的EBGP发送数据包。数据包传递到R5的时候则会继续向R2发送数据包。但是在向R2发送数据包的过程中必须要经过R3/R4但是R3/R4并未运行BGP查看路由表后发现并没有后1.1.1.1/32路由条目所以果断将数据包丢弃。图1-1 ## 避免路由黑洞的方法建立IBGP全互联架构其中IBGP的全互联架构包括三点①全互联结构如图1-2建立物理邻居上的全互联结构N个IBGP对等体就需要建立N(N-1)/2对IBGP邻居关系加大了维护量特别不推荐。图1-2②路由反射器如图1-3路由反射器建立了逻辑上的IBGP全互联比起IBGP全互联推荐使用。图1-3③BGP联盟也是建立逻辑上的IBGP全互联同样比IBGP全互联推荐使用。图1-3BGP重分布进IGP 如图1-4在既运行了BGP和IGP的路由器上如R2/R5让中间没有运行BGP的设备也能通过IGP获取到BGP 的路由条目。缺点是由于BGP的路由信息非常地大IGP是无法承载像BGP那么大的路由信息举个例子若是BGP能够承载几万条路由条目但是像OSPF这样的IGP就只能承载几千条路由条目。图1-4MPLS通过标签进行转发是VPN的一种类型不是本章BGP高级特性的特点。IBGP全互联中的水平分割原则在建立全互联IBGP Peer中存在一个致命的问题那就是水平分割原则情况出现所谓水平分割原则是在BGP网络中为了防止环路而设置的一种机制但是对于路由的传输来说却有着重大的影响。BGP 水平分割原则会导致IBGP 全互联的情况下从IBGP Peer学习到的路由不会传递给下一个IBGP Peer即路由信息只能传递一跳。如图 1-5R2传递一条路由信息给R3后由于水平分割原则R3是无法再次传递给R5的。图1-5二、BGP联盟BGP联盟是什么让我们来回顾一下水平分割原则产生的问题在于多个IBGP Peer建立起来导致路由只能传递一跳。但是如果将IBGP Peer之间的关系通过某些方式变成EBGP Peer之间的关系的呢BGP 联盟的做法就是这样。BGP联盟定义如图2-1BGP联盟将一个大的AS分成多个小的AS这些小的AS被我们称作子AS大的AS被我们称作联盟AS。子AS与子AS之间的关系为EBGP以每两个BGP设备建立一个子AS的方式来打破水平分割原则有效避免了路由黑洞减少了AS内部IBGP邻居过多而导致网络连接激增的问题。但是对于联盟之外的AS来说是不存在BGP联盟这个概念的。在联盟内IBGP每遇到一跳就可以建立子AS。图2-1如图2-3对于AS 65530来说他是不知道 AS 65531中还有子AS100等。图2-2BGP联盟特性在联盟内部BGP路由路径属性有如下两个类别一、与在原本IBGP中属性保持不变的。Next-HopLocal PreferenceMulti_exit_disc二、与在原本IBGP中属性发生改变的。AS-Path①联盟内AS-Path只在联盟内有效不会传出联盟。联盟AS-Path在联盟中只起到防止路由环路的功能不能起到选路的功能这点是与IBGP中AS-Path不同的。三、在联盟自定义的属性传出联盟后就会被删除掉。BGP联盟中的下一跳不可达问题如图2-3如过程①中由于next-hop属性的原因即从EBGP传来的next-hop属性在IBGP中传递保持不变联盟中子AS 100和子 AS 300虽然是EBGP关系但是依然会造成下一跳不可达问题。同理因为子AS 200和子 AS 100是EBGP的关系所以过程②也有下一跳不可达的问题。因此我们需要在不同的地方为不同的路由器配置next-hop-self命令。过程①在R1上针对R2配置next-hop-self命令。过程②在R3上针对R1配置next-hop-self命令。图2-3BGP联盟实验如图2-4按照IBGP每遇到一跳就建立一个子AS的原则进行配置图2-4 **AS 65530配置**R6Routeren Router#conf Enter configuration commands, one per line. End with CNTL/Z. Router(config)#hos R6 R6(config)#int g0/0 R6(config-if-GigabitEthernet 0/0)#ip add 15.1.1.6 24 R6(config-if-GigabitEthernet 0/0)#ex R6(config)#int lo0 R6(config-if-Loopback 0)#ip add 6.6.6.6 32 R6(config-if-Loopback 0)#ex R6(config)#router bgp 65530 //创建BGP进程 R6(config-router)#bgp router-id 6.6.6.6 R6(config-router)#nei 15.1.1.1 remote-as 65531 //配置EBGP邻居 R6(config-router)#netw 6.6.6.6 mask 255.255.255.255 //宣告用来测试的lo地址 R6(config-router)#ex联盟内子AS 300配置R1Routeren Router#conf Router(config)#hos R1 R1(config)#int lo0 ip add 1.1.1.1 32 R1(config-if-Loopback 0)#ex R1(config)#int g0/0 R1(config-if-GigabitEthernet 0/0)#ip add 15.1.1.1 24 R1(config-if-GigabitEthernet 0/0)#ex R1(config)#int g0/1 R1(config-if-GigabitEthernet 0/1)#ip add 11.1.1.1 24 R1(config-if-GigabitEthernet 0/1)#ex R1(config)#int g0/2 R1(config-if-GigabitEthernet 0/2)#ip add 13.1.1.3 24 R1(config-if-GigabitEthernet 0/2)#ex R1(config)#router bgp 300 R1(config-router)#bgp router-id 1.1.1.1 R1(config-router)#bgp confeder identi 65531 //指定联盟AS号 R1(config-router)#bgp confeder peers 100 200 //指定子AS邻居 R1(config-router)#nei 11.1.1.2 remote-as 100 R1(config-router)#nei 13.1.1.3 remote-as 200 R1(config-router)#neighbor 15.1.1.6 remote-as 65530 R1(config-router)#nei 11.1.1.2 next-hop-self R1(config-router)#nei 13.1.1.3 next-hop-self R1(config-router)#ex联盟内子AS 100配置R2Routeren Router#conf Router(config)#hos R2 R2(config)#int lo0 R2(config-if-Loopback 0)#ip add 2.2.2.2 32 R2(config-if-Loopback 0)#ex R2(config-if-Loopback 0)#ex^MR2(config)#int g0/0 R2(config-if-GigabitEthernet 0/0)#ip add 11.1.1.2 24 R2(config-if-GigabitEthernet 0/0)#ex R2(config)#int g0/1 R2(config-if-GigabitEthernet 0/1)#ip add 12.1.1.2 24 R2(config-if-GigabitEthernet 0/1)#ex R2(config)#router ospf 10 R2(config-router)#router-id 2.2.2.2 Change router-id and update OSPF process! [yes/no]:yes R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0 R2(config-router)#netw 12.1.1.0 0.0.0.255 area 0 R2(config-router)#ex R2(config)#router bgp 100 R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#bgp confeder ident 65531 R2(config-router)#bgp confeder peer 300 R2(config-router)#nei 4.4.4.4 remote-as 100 R2(config-router)#nei 4.4.4.4 next-hop-self R2(config-router)#nei 11.1.1.1 remote-as 300 R2(config-router)#nei 11.1.1.1 next-hop-self R2(config-router)#exR4Routeren Router#con Router(config)#hos R4 R4(config)#int lo0 R4(config-if-Loopback 0)#ip add 4.4.4.4 32 R4(config-if-Loopback 0)#ip add 4.4.4.4 32 R4(config-if-Loopback 0)#ex R4(config)#int g0/0 R4(config-if-GigabitEthernet 0/0)#ip add 12.1.1.4 24 R4(config-if-GigabitEthernet 0/0)#ex R4(config)#router ospf 10 R4(config-router)#router-id 4.4.4.4 Change router-id and update OSPF process! [yes/no]:yes R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0 R4(config-router)#netw 12.1.1.0 0.0.0.255 area 0 R4(config-router)#ex R4(config)#router bgp 100 R4(config-router)#bgp router-id 4.4.4.4 R4(config-router)#bgp confeder ident 65531 R4(config-router)#nei 2.2.2.2 remote-as 100 R4(config-router)#nei 2.2.2.2 update-sou lo0 R4(config-router)#ex联盟内子AS 200配置R3R3(config)#en R3#conf R3(config)#hos R3 R3(config)#int g0/0 R3(config-if-GigabitEthernet 0/0)#ip add 13.1.1.3 24 R3(config-if-GigabitEthernet 0/0)#ex R3(config)#int g0/1 R3(config-if-GigabitEthernet 0/1)#ip add 14.1.1.3 24 R3(config-if-GigabitEthernet 0/1)#ex R3(config)#int lo0 R3(config-if-Loopback 0)#ip add 3.3.3.3 32 R3(config-if-Loopback 0)#ex R3(config)#router ospf 10 R3(config-router)#router-id 3.3.3.3 Change router-id and update OSPF process! [yes/no]:yes R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0 R3(config-router)#netw 14.1.1.0 0.0.0.255 area 0 R3(config-router)#ex R3(config)#router bgp 200 R3(config-router)#bgp router-id 3.3.3.3 R3(config-router)#bgp confeder ident 65531 R3(config-router)#bgp confeder peer 300 R3(config-router)#nei 5.5.5.5 remote-as 200 R3(config-router)#nei 5.5.5.5 update-sou lo0 R3(config-router)#nei 13.1.1.1 remote-as 300 R3(config-router)#nei 13.1.1.1 next-hop-self R3(config-router)#exR5Routeren Router#conf Router(config)#hos R5 R5(config)#int lo0 R5(config-if-Loopback 0)#ip add 5.5.5.5 32 R5(config-if-Loopback 0)#ex R5(config)#int g0/0 R5(config-if-GigabitEthernet 0/0)#ip add 14.1.1.5 24 R5(config-if-GigabitEthernet 0/0)#ex R5(config)#router ospf 10 R5(config-router)#router-id 5.5.5.5 Change router-id and update OSPF process! [yes/no]:yes R5(config-router)#netw 5.5.5.5 0.0.0.0 area 0 R5(config-router)#netw 14.1.1.0 0.0.0.255 area 0 R5(config-router)#ex R5(config)#router bgp 200 R5(config-router)#bgp router-id 5.5.5.5 R5(config-router)#bgp confede ident 65531 R5(config-router)#nei 3.3.3.3 remote-as 200 R5(config-router)#nei 3.3.3.3 update-sou lo0 R5(config-router)#exR4上查看BGP路由表R4上查看BGP路由表6.6.6.6可以看到6.6.6.6的路由传输过程中经过了子AS300。说明对于BGP联盟内来说子AS之间是互相可见的。R6上查看BGP路由表R6上查看BGP路由表4.4.4.4可以看到对于联盟外的AS来说是无法感知到联盟内AS的多少的。三、BGP对等体组在BGP的配置中我们少不了一些对一些同一性质的邻居进行重复性的配置操作如1.1.1.1和2.2.2.2都是3.3.3.3的IBGP邻居那么我就需要分别对两者进行IBGP邻居建立的配置。但明显的是1.1.1.1和2.2.2.2都是属于3.3.3.3的IBGP邻居配置命令也是大同小异。从而我们产生了了BGP对等体这时可以将1.1.1.1和2.2.2.2加入到同一个对等体组内假设为组名为ruijie。那么我们对ruijie配置 等同于 对1.1.1.1和2.2.2.2同时配置。如图2-4在R1上我们对R2和R3进行配置时如果将R2和R3加入对等体组Group 1后只需要对Group 1即等同于对R2R3同时配置。图3-1BGP对等体组RR如图2-5R3作为路由反射器要求在指定R2和R3作为client的时候将R2和R3视为一个对等体组对等体组名为Jan16图3-2配置过程如下R1Routeren Router#conf Router(config)#hos R1 R1(config)#int g0/0 R1(config-if-GigabitEthernet 0/0)#ip add 12.1.1.1 24 R1(config-if-GigabitEthernet 0/0)#ex R1(config)#int lo0 R1(config-if-Loopback 0)#ip add 1.1.1.1 32 R1(config-if-Loopback 0)#ex R1(config)#router bgp 100 R1(config-router)#nei 12.1.1.2 remote-as 200 R1(config-router)#netw 1.1.1.1 mask 255.255.255.255 R1(config-router)#exR2Routeren Router#conf Router(config)#hos R2 R2(config)#int g0/0 R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24 R2(config-if-GigabitEthernet 0/0)#ex R2(config)#int g0/1 R2(config-if-GigabitEthernet 0/1)#ip add 23.1.1.2 24 R2(config-if-GigabitEthernet 0/1)#ex R2(config)#int lo0 R2(config-if-Loopback 0)#ip add 2.2.2.2 32 R2(config-if-Loopback 0)#ex R2(config)#router ospf 10 R2(config-router)#router-id 2.2.2.2 Change router-id and update OSPF process! [yes/no]:yes R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0 R2(config-router)#netw 23.1.1.0 0.0.0.255 area 0 R2(config-router)#ex R2(config)#router bgp 200 R2(config-router)#nei 12.1.1.1 remote-as 100 R2(config-router)#nei 3.3.3.3 remote-as 200 R2(config-router)#nei 3.3.3.3 update-sou lo0 R2(config-router)#nei 3.3.3.3 next-hop-self R2(config-router)#exR3Routeren Router#conf Router(config)#hos R3 R3(config)#int g0/1 R3(config-if-GigabitEthernet 0/1)#ip add 23.1.1.3 24 R3(config-if-GigabitEthernet 0/1)#ex R3(config)#int g0/0 R3(config-if-GigabitEthernet 0/0)#ip add 34.1.1.3 24 R3(config-if-GigabitEthernet 0/0)#ex R3(config)#int lo0 R3(config-if-Loopback 0)#ip add 3.3.3.3 32 R3(config-if-Loopback 0)#ex R3(config-if-Loopback 0)#ex^MR3(config)#router ospf 10 R3(config-router)#router-id 3.3.3.3 Change router-id and update OSPF process! [yes/no]:yes R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0 R3(config-router)#netw 23.1.1.0 0.0.0.255 area 0 R3(config-router)#netw 34.1.1.0 0.0.0.255 area 0 R3(config-router)#ex R3(config)#router bgp 200 R3(config-router)#nei Jan16 peer-group R3(config-router)#neighbor Jan16 remote-as 200 R3(config-router)#nei Jan16 update-source lo0 R3(config-router)#nei Jan16 route-reflector-client R3(config-router)#nei 2.2.2.2 peer-group Jan16 R3(config-router)#nei 4.4.4.4 peer-group Jan16 R3(config-router)#neighbor Jan16 activate //重点配置在IPv4的peer中默认情况下创建完peer-group后peer-group的状态是消失的 R3(config-router)#exR4Routeren Router#conf Router(config)#hos R4 R4(config)#int g0/1 R4(config-if-GigabitEthernet 0/1)#ip add 34.1.1.4 24 R4(config-if-GigabitEthernet 0/1)#ex R4(config)#int lo0 R4(config-if-Loopback 0)#ip add 4.4.4.4 32 R4(config-if-Loopback 0)#ex R4(config)#router ospf 10 R4(config-router)#router-id 4.4.4.4 Change router-id and update OSPF process! [yes/no]:yes R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0 R4(config-router)#netw 34.1.1.0 0.0.0.255 area 0 R4(config-router)#ex R4(config)#router bgp 200 R4(config-router)#nei 3.3.3.3 remote-as 200 R4(config-router)#nei 3.3.3.3 update-sou lo0 R4(config-router)#ex四、BGP路由汇总为什么需要路由汇总在特大规模的网络通常运行的是BGP路由协议虽然BGP的功能非常地强大但是这个导致BGP路由表庞大容易产生路由震荡等问题。通常地我们就通过路由汇总来解决这个问题。将多条路由合并成一条路由宣告出去。BGP路由汇总的方式通过network方式进行路由汇总我们可以先创建一条指向Null0的静态汇总路由然后通过network的方式引入BGP中。图4-1如R1上R1(config)#ip route 192.168.0.0 255.255.252.0 null 0 R1(config)#router bgp 100 R1(config-router)#netw 192.168.0.0 mask 255.255.252.0 R1(config-router)#ex在R2上查看图片上的R1和R2之间的关系是EBGPNULL 0的应用如图4-2R2去ping192.168.1.1的时候根据子网掩码最长匹配的原则路由表中192.168.1.0/24 下一跳为R1会优先生效。但是R1上有没有192.168.1.0/24的路由所以只能走默认路由下一跳为R1。如此循环往复就造成了环路。图4-2如图4-3R2去ping192.168.1.1的时候根据子网掩码最长匹配的原则路由表中192.168.1.0/24 下一跳为R1会优先生效。此时R1上的路由表上存在一条192.168.0.0/21下一跳为NULL 0即丢到垃圾桶中。此时R1并不会将数据包转发回R2上而是直接丢弃掉这就是NULL 0的作用。图4-3通过aggregate-address的方式进行BGP路由汇总通过aggregate-address可以直接在BGP进程下进行路由汇总但是需要先将需要汇总的路由在BGP中进行宣告。如图4-4我们在R1上需要先将192.168.1~3.0/24这三个网段分别宣告出去在使用aggregate-address进行宣告。图4-4在R1上R1(config)#router bgp 100 R1(config-router)#netw 192.168.1.0 mask 255.255.255.0 R1(config-router)#netw 192.168.2.0 mask 255.255.255.0 R1(config-router)#netw 192.168.3.0 mask 255.255.255.0 R1(config-router)#aggregate-address 192.168.0.0 255.255.252.0 R1(config-router)#ex查看R2的BGP路由表可以看到有一条被汇总来的路由即192.168.1~3.0/24汇总成一条192.168.0.0/22如果像上述的做法那不还是增加了路由条目的数量了吗所以aggregate还能使用summary-only将传递出去的路由信息只设置为仅通过汇总后的路由不通告明细路由。也就是传递出的路由信息只剩下192.168.0.0/22这一条操作如下R1R1(config)#router bgp 100 R1(config-router)#aggregate-address 192.168.0.0 255.255.252.0 summary-only R1(config-router)#ex查看R2的BGP路由表可以看到只有一条被汇总来的路由即192.168.0.0/22。如果R2遇到不仅仅需要一条汇总路由还需要一些特殊的明细路由呢我们可以使用suppress-map 【route-map】抑制某些特定明细路由。如下只放行192.168.1.0/24所以我们route-map关联的路由/抑制的路由就是192.168.2.0/24和192.168.3.0/24。R1R1(config)#access-list 1 pe host 192.168.2.0 R1(config)#access-list 1 pe host 192.168.3.0 //使用ACL匹配需要抑制的路由 R1(config)#route-map Jan16 permit 10 R1(config-route-map)#match ip address 1 //将ACL与route-map相关联 R1(config-route-map)#ex R1(config)#router bgp 100 R1(config-router)#aggregate-address 192.168.0.0 255.255.252.0 summary-only suppress-map Jan16 R1(config-router)#ex查看R2的BGP路由表可以发现192.168.1.0/24确实被放行了。对于我们的防环属性AS-Path还可以通告as-set命令给汇总的路由添加as-set路径属性即可以还原明细路由的AS号。避免还将汇总路由通告给汇总者。如图4-5使用as-set命令之后我们就可以在R4上看到192.168.0.0/22在传递过程中到底经过了那些AS。这次在R3上进行路由汇总R3(config)#router bgp 200 R3(config-router)#aggregate-address 192.168.0.0 255.255.252.0 summary-only as-set R3(config)#ex在R3上进行汇总使用as-set命令前在R3上进行汇总使用as-set命令后