文章目录
- 零、BGP的路由黑洞
-
- 1,下一跳不可达
- 从而导致的路由黑洞
- 2,同步问题
- 一、BGP的宣告问题
- 二、关闭自动汇总
- 三、BGP的认证
- 四、BGP邻居关系重置
- 五、查看收发的信息
- 六、BGP的聚合(汇总)
-
- 1,汇总为防环路由,然后宣告
- 2,正常的聚合
- 3,聚合其他AS的路由
- 七、BGP的peer-group
零、BGP的路由黑洞
1,下一跳不可达
1,直连路由和出接口写法的静态路由被network通告时的下一跳属性为0.0.0.0
比如R1通告自己的环回(直连),下一跳属性为0.0.0.0
R1#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
比如R1通告一条出接口写法的静态路由,下一跳属性为0.0.0.0
R1(config)#ip route 100.1.1.0 255.255.255.0 serial 1/1
R1(config)#router bgp 1
R1(config-router)#network 100.1.1.0 mask 255.255.255.0
R1(config-router)#en
R1#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
*> 100.1.1.0/24 0.0.0.0 0 32768 i
2,下一跳写法的静态路由和动态路由被network通告时的下一跳属性为这条路由的下一跳地址
R1(config)#ip route 200.1.1.0 255.255.255.0 12.1.1.2
R1(config)#router bgp 1
R1(config-router)#network 200.1.1.0 mask 255.255.255.0
R1(config-router)#en
R1#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
*> 200.1.1.0 12.1.1.2 0 32768 i
3,EBGP邻居传路由会自动修改下一跳属性为自己,IBGP邻居传路由不改变下一跳属性
比如,R1和R2为EBGP邻居,R1发送给R2的1.1.1.0/24路由到R2时,下一跳属性为自己的更新源地址
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
而R2传给自己的IBGP邻居R4时,下一跳属性不变,因为AS-BY-AS规则,其下一跳为上一个AS的边界
R4#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
* i1.1.1.0/24 1.1.1.1 0 100 0 1 i
这也是为什么R4路由器不把这条路由加表的原因:下一跳不可达
我们将R2传给R4时把下一跳属性改为自己,R4就会加表
R2(config)#router bgp 234
R2(config-router)#neighbor 4.4.4.4 next-hop-self
R4#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*>i1.1.1.0/24 2.2.2.2 0 100 0 1 i
MA网络中的下一跳问题
R1,R2,R3连接到同一个MA网络,R1在一个AS内,R2、R3在一个AS内,并且通过物理接口建立邻居
R3把一条路由A传递给ibgp邻居R2,R2把路由传递给ebgp邻居R1,同一修改下一跳属性为自己
那么数据从R1到达路由A时,一般来说,R1把数据给R2,R2把数据给R3,这显示多走了
那么,在此MA网络中,bgp协议利用icmp重定向,数据从R1到达A路由时的下一跳属性直接改为R3,
即,数据直接从R1到达R3。也就是说这种情况下,R1到达A路由的下一跳地址不是R2,而是R3.
从而导致的路由黑洞
R5已经将1.1.1.0/24加表,我们在R5上宣告自己的环回,并在R4上对R2修改下一跳属性为自己,那么路由R5传给R4,R4传给R2,R2传给R1,R1加表
R5(config)#router bgp 5
R5(config-router)#network 5.5.5.0 mask 255.255.255.0
R4(config)#router bgp 234
R4(config-router)#neighbor 2.2.2.2 next-hop-self
那么我们在R1上用R1的环回pingR5的环回,路由全齐,但是数据层面不通
R1#sho ip bgp
*> 1.1.1.0/24 0.0.0.0 0 32768 i
*> 5.5.5.0/24 2.2.2.2 0 234 5 i
R1#ping 5.5.5.5 source 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 5.5.5.5, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1
.....
Success rate is 0 percent (0/5)
这是因为,R3上没有去往5.5.5.5和1.1.1.1的路由,数据到达R3之后便会被R3丢弃,这就是bgp的路由黑洞
因为BGP可以非直连建立邻居关系,故可能导致路由条目通过TCP的单播会话穿越未运行BGP协议的设备传递到BGP邻居;导致路由表显示可达,但数据层面在进入AS内部后,未运行BGP协议的设备将无法转发流量---控制层面可达,数据层面不可达
解决办法:
1、全连的BGP邻居关系,所有设备运行BGP
即在一个AS内,每一个路由器都要和其他的路由器建立ibgp邻居关系,导致建邻过多,过于麻烦
比如这里的R2和R3建邻,R3和R4建邻,R2和R4建邻,这样R2,R3,R4的bgp路由表才会齐全(由于ibgp水平分割,R3从R2学习到的路由不会传给R4)
2、将BGP路由重发布到IGP’
比如这里,在R2上将bgp路由重发布进eigrp中,那么R3就有了到达1.1.1.0/24的路由。
注意:默认只能将ebgp邻居学到的路由和network通告的路由重发布到igp中
3、(推荐)MPLS—多协议标签交换
后续讲到。
2,同步问题
通过ibgp邻居学习到的路由,必须通过IGP协议也学习到,否则路由不加表,避免了路由黑洞,该方法现下已经不可取,建议在低版本设备中直接关闭同步
比如R3也运行BGP,R3通过R2学习到了1.1.1.0/24的路由,但是R3没有通过igp协议学习到,那么R3就不会加表这条路由,从而避免了路由黑洞。
一、BGP的宣告问题
若BGP协议宣告的路由条目,非本地直连路由,而是通过其他协议学习,那么在宣告后,条目将携带本地到达这些网段的下一跳和度量值;
度量问题:R2与AS 1为直连的ebgp邻居关系,在宣告时,将携带本地到达这些目标的度量;该度量在进入AS 1后一直存在且不再变化,意义在于便于AS1内部BGP设备对R2所在AS合理的选路;
若R2将该条目传递给本地的IBGP邻居R4,R4在将其传递到R5所在的AS 5时将度量归0,因为该度量并不是R4到达目标的度量值;故为了AS 5的选路准确,建议R4同时宣告该路由,来携带R4到达目标的度量。
下一跳问题:接收到的BGP路由条目中,若下一跳地址为本地,将拒绝接收该条目;意义在于同一AS内部的IBGP邻居间减少无用路由条目的记录,但要求所有存在ebgp邻居的设备宣告本AS路由,同时修改下一跳属性为本地的行为 仅针对其他AS路由进行,打破IBGP水平分割;
总结:所有存在EBGP邻居关系的BGP路由器,均需要本地AS的路由,来携带自己到达目标的度量值;
二、关闭自动汇总
仅针对从IGP重发布到BGP的路由条目;
auto-summary 不携带路由条目中的度量、下一跳、掩码
no auto-summary 携带度量、下一跳、度量
携带下一跳和度量的意义与上面的宣告问题规则完全一致;故一旦使用重发布,建议在所有存在EBGP邻居关系的BGP设备进行;
宣告就是逐条的重发布,重发布就是批量的宣告;两者所产生的路由,仅起源属性不同;
三、BGP的认证
R2(config-router)#neighbor 4.4.4.4 password cisco
R4(config-router)#neighbor 2.2.2.2 password cisco
认证基于邻居之间,且仅支持MD5,BGP认证信息出现在TCP报文头部
四、BGP邻居关系重置
1,硬性重置
断开TCP的会话连接,重新建立BGP邻居,针对所有策略生效
R1#clear ip bgp *
R1#clear ip bgp 2.2.2.2 //仅和某个邻居进行硬重启
2,软性重置
不断开TCP会话连接,不断开BGP邻居,建议在out方向实施
R1#clear ip bgp * soft
R1#clear ip bgp 2.2.2.2 soft out 仅与某个邻居进行软重启
五、查看收发的信息
查看本地发送给该邻居的路由信息
R1#sho ip bgp neighbors 2.2.2.2 advertised-routes
默认没有专门存储某邻居发送过来的路由信息表格,需要先定义独立存储空间
R1(config)#router bgp 1
R1(config-router)#neighbor 2.2.2.2 soft-reconfiguration inbound //配置针对该邻居发送过来的路由信息空间;建议在查看完所有信息后,删除该空间(no掉)
才能查看本地从该邻居处学习到的路由信息
R1#sho ip bgp neighbors 2.2.2.2 received-routes
六、BGP的聚合(汇总)
1,汇总为防环路由,然后宣告
BGP宣告特点,必须宣告路由表中的条目,宣告时必须和条目的网络号完全一致,无论条目的产生方式,利用BGP的宣告特点,BGP协议可以宣告本地路由表中的任意路由,且在宣告时仅宣告网络号,不携带下一跳或出接口,故在更新源设备上,不去逐一宣告明细路由,而是先编辑到达汇总网段空接口防环路由,然后使用BGP将该空接口路由的目标网络号进行宣告,最后实现汇聚汇总的效果;
这里在R1上创建几个环回,然后写指向null 0 的防环路由,再把这条路由宣告进bgp
R1(config)#int lo1
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#int lo2
R1(config-if)#ip address 10.1.2.1 255.255.255.0
R1(config-if)#int lo3
R1(config-if)#ip address 10.1.3.1 255.255.255.0
R1(config-if)#exi
R1(config)#ip route 10.1.0.0 255.255.252.0 null 0
R1(config)#router bgp 1
R1(config-router)#network 10.1.0.0 mask 255.255.252.0
R1(config-router)#en
R1#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
*> 5.5.5.0/24 2.2.2.2 0 234 5 i
*> 10.1.0.0/22 0.0.0.0 0 32768 i
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 1.1.1.1 0 0 1 i
注意:这里bgp中,宣告汇总路由,并不会抑制明细路由,若此时需要在发送聚合条目的同时再发送部分明细路由,直接对明细路由进行宣告即可
2,正常的聚合
先逐条宣告明细路由,然后再进行聚合配置;正常聚合配置后,会自动生成空接口防环路由;
R1(config)#router bgp 1
R1(config-router)#network 10.1.1.0 mask 255.255.255.0
R1(config-router)#network 10.1.2.0 mask 255.255.255.0
R1(config-router)#network 10.1.3.0 mask 255.255.255.0
R1(config-router)#aggregate-address 10.1.0.0 255.255.252.0 summary-only
//若不加 summary-only 那么聚合路由和明细路由会同时发送
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 1.1.1.1 0 0 1 i
suppress-map
首先让路由器将明细和聚合条目同时发出,然后使用抑制列表,限制不愿意共享的明细
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 1.1.1.1 0 0 1 i
*> 10.1.1.0/24 1.1.1.1 0 0 1 i
*> 10.1.2.0/24 1.1.1.1 0 0 1 i
*> 10.1.3.0/24 1.1.1.1 0 0 1 i
R1(config)#access-list 1 permit 10.1.1.0
R1(config)#route-map ccnp permit 10
R1(config-route-map)#match ip address 1
R1(config-route-map)#exi
R1(config)#router bgp 1
R1(config-router)#aggregate-address 10.1.0.0 255.255.252.0 suppress-map ccnp
R1(config-router)#do clear ip bg * so o
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 1.1.1.1 0 0 1 i
*> 10.1.2.0/24 1.1.1.1 0 0 1 i
*> 10.1.3.0/24 1.1.1.1 0 0 1 i
注:因为调用时为抑制列表,故在抓取和策略时允许的网段,最终反而被抑制传输,所以route-map不能加空语句允许所有
route-map
聚合过程中对路由属性的改变,比如,对聚合的路由,将其起源属性从i改为?
R1(config)#route-map cc permit 10
R1(config-route-map)#set origin incomplete
R1(config-route-map)#exi
R1(config)#router bgp 1
R1(config-router)#aggregate-address 10.1.0.0 255.255.252.0 route-map cc
R1(config-router)#en
R1#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
*> 1.1.1.0/24 0.0.0.0 0 32768 i
*> 5.5.5.0/24 2.2.2.2 0 234 5 i
*> 10.1.0.0/22 0.0.0.0 32768 ?
注:不写match就是match所有
as-set
聚合其他AS的路由时默认会丢弃一些属性,包括as-path,有可能这些聚合的路由会回到其初始的AS中,导致环路,在聚合时加上as-set则会还原这些属性,避免环路。
3,聚合其他AS的路由
聚合其他AS的路由时默认会丢弃一些属性,包括as-path,有可能这些聚合的路由会回到其初始的AS中,导致环路,在聚合时加上as-set则会还原这些属性,避免环路。
比如这里可以在AS234上对AS1的路由进行聚合
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.1.0/24 1.1.1.1 0 0 1 i
*> 10.1.2.0/24 1.1.1.1 0 0 1 i
*> 10.1.3.0/24 1.1.1.1 0 0 1 i
R2(config)#router bgp 234
R2(config-router)#aggregate-address 10.1.0.0 255.255.252.0
R2(config-router)#en
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 0.0.0.0 32768 i
*> 10.1.1.0/24 1.1.1.1 0 0 1 i
*> 10.1.2.0/24 1.1.1.1 0 0 1 i
*> 10.1.3.0/24 1.1.1.1 0 0 1 i
可以看到聚合后的路由丢失了部分属性,包括as-path
R2(config)#router bgp 234
R2(config-router)#aggregate-address 10.1.0.0 255.255.252.0 as-set
R2(config-router)#en
R2#sho ip bgp
Network Next Hop Metric LocPrf Weight Path
r> 1.1.1.0/24 1.1.1.1 0 0 1 i
*>i5.5.5.0/24 4.4.4.4 0 100 0 5 i
*> 10.1.0.0/22 0.0.0.0 100 32768 1 i
*> 10.1.1.0/24 1.1.1.1 0 0 1 i
*> 10.1.2.0/24 1.1.1.1 0 0 1 i
*> 10.1.3.0/24 1.1.1.1 0 0 1 i
加上as-set之后属性还原
七、BGP的peer-group
作用:当需要和多个邻居进行配置时,用于简化命令
R1(config)#router bgp 1 R1(config-router)#neighbor xxx peer-group
创建名为xxx的peer-group
R1(config-router)#neighbor xxx remote-as 2 定义该peer-group的内容
R1(config-router)#neighbor xxx update-source lo0
R1(config-router)#neighbor xxx ebgp-multihop
针对各个邻居调用 R1(config-router)#neighbor 2.2.2.2 peer-group xxx
R1(config-router)#neighbor 3.3.3.3 peer-group xxx
R1(config-router)#neighbor 4.4.4.4 peer-group xxx
注:其缺陷在于,针对某个邻居一旦调用到了peer-group中,那么部分命令将无法给该邻居单独配置,只能设定于peer-group中;