BGP中的通告:

注意:本命令只会宣告路由,不会激活一个接口进入BGP域

·在BGP中,network的特点是:

 1、能够通告路由表中的所有非BGP路由量、只要是路由表中有的路由,它都可以宣告,直连的,静态的,即使从IGP学到的也可以

 2、默认情况下必须精确宣告网络和掩码

 3、只起到宣告作用,不建邻居

 4、可宣告IGP学到的路由,并携带Metric和Next-hop

注意,BGP宣告有方向性,不会吧从一个方向宣告过来的路由在发回去;

Auto-summary自动汇总

·Auto-summary对于network的影响:

  1、可以是主类方式宣告(如:network 3.0.0.0),条件是:在路由表中必须有子网路由

  2、也可以是明细方式宣告,必须带mask(如:network 3.3.3.0 mask 255.255.255.0),条件是:必须和IGP表的路由精确匹配

  3、如果是用no auto-summary,那么network只能用明细方式宣告(除非是主类网络)。通常都会用这一方式。

Auto-summary对于重分布的影响:

·在开启自动汇总的情况下,当其他IGP协议重分布进BGP时,默认会进行自动汇总。其它情况下BGP不会自动汇总

 1、在auto-summary情况下,将IGP重分布进BGP,不会携带原有的METRIC值,next-hop

 2、在no auto-summary情况下,会携带原有的METRIC值和掩码,next-hop

router bgp 123

 no auto-summary   //关闭自动汇总

R4(config-router)#network 4.4.4.0 mask 255.255.255.0 (在no auto-summary时,严格按照IP地址掩码通告,不加mask按主类掩码匹配)

R4(config-router)#network 100.0.0.0        (在auto-summary时,也可以主类方式通告,前提是有一条明细)

网络通告时注意:

如果路由器从IGP和IBGP都学到一条路由,由于IBGP路由的AD值为200,通常会大于IGP学到的路由,所以它会选择从IGP学到的放进路由表,并在IBGP路由的前面打上r,表示自已有一条同样的IGP路由。在与其竞争时IBGP路由失败了。

如果路由器从IGP和EBGP都学到一条路由,由于EBGP路由的AD值为20,这个时候会出现Flapping。

BGP路由不优的2个原因:

 1)同步问题

 2)下一跳是否可达  

BGP的下一跳机制

BGP是一个AS-by-AS的路由协议,而不是一个router-by-router的路由协议。

BGP路由的下一跳并不是指下一个路由器的IP地址,而是指到达下一个AS的IP地址。

所以,默认情况下,从EBGP邻居学到的路由再向其它的IBGP邻居传递的时候,下一跳不改变。

解决方案:

router bgp 123

  no synchronization     //关闭同步,高版本IOS默认开启

  neighbor 3.3.3.3 next-hop-self

Synchronization同步。

只针对IBGP邻居

·Do not use or advertise to an external neighbor a route learned by IBGP

 until a matching route has been learned from an IGP.

解释:开启同步的情况下,AS内的一个路由器从IBGP邻居处学到一条路由,不用也不传,除非是从IGP学到同样一条路由。

注意:(网络号和掩码都必须完全一样)

同步规则是为了在一个不是full-mesh的网络中解决路由黑洞【数据黑洞】而产生的。如果路由器认为一条BGP路由存在黑洞的可能性,它就不会去传这条路由。由于同步规则会对路由的传递产生影响,所以建议关闭它。

例如:router bgp 123

      no synchronization    

清除BGP会话:

当你将一个policy应用于BGP的时候,由于BGP是不会做周期更新,所以需要手动做更新。

clear ip bgp *         //来硬的,会DOWN掉邻居关系

clear ip bgp * soft    //软清,不会down掉邻居关系

neighbor [ip-address] soft-reconfiguration inbound   本命令告诉BGP路由器:保存从邻居那里学到的所有路由更新,供入站策略被修改时使用。这样就无需对方重新发送信息。


<MA网络的下一跳问题>

当在R4上宣告172.16.1.0的路由进入BGP后,你会在R3上发现如下情况:

R3:

sh ip bgp

  Network          Next Hop            Metric LocPrf Weight Path

*> 172.16.1.0/24   10.1.1.2                1             0 64513 i

router#debug ip bgp updates

MA网络的下一跳:当把一条路由发送给EBGP邻居时,如果接收这条路由的接口与EBGP邻居的更新源地址在同一网段的时候,路由的下一跳不改变。

BackDoor

问题提出:

1、R2和R3之间用以太网链路相连,R2和R3之间运行一个IGP协议,并将172.16.1.0宣告进IGP。

2、三台路由器运行BGP,组成3个AS

3、R1与R2建EBGP邻居,R1和R3建EBGP邻居。

4、在R2上将172.16.1.0网络再宣告进BGP。

5、R3通过IGP学到172.16.1.0路由,同时也通过EBGP邻居学到172.16.1.0路由。它将比较两条路由的AD值来选最优路由,由于EBGP路由的AD值默认为20,所以R3选择EBGP路由为最优路由,并放入路由表。而实际上这条EBGP路由所连接的是一条T1的链路,带宽是小于R2与R3之间的以太网链路的。并非最好的路由。

总结:

·通过IGP学到某条路由,又从EBGP学到相同的路由。

 由于EBGP AD=20,小于IGP的AD,所以会优先EBGP的路由,

 但实际路径可能从IGP走更优。

解决:

R3学到两条相同的路由,用以下方法在BGP进程下改,实际上就是提高了从BGP学到的路由的AD值

R3(config-router)#network 172.16.1.0 mask 255.255.255.0 backdoor

                    

通过这样的宣告将EBGP学到的路由的AD值提高,从20提高到200

Next-hop-unchange

问题的产生:

1、三台路由器先运行一个IGP协议,注意,172.16.1.0不用宣告进IGP

2、然后运行BGP,R1与R2建立EBGP邻居,R2与R3建立IBGP邻居

3、在R3上将172.16.1.0宣告进BGP

4、观察R1与R2上的172.16.1.0路由的下一跳,看看有啥问题产生

你将会发现,在R1与R2之间形成了环路。

解法1:

在R2上做:

R2:

router bgp 2

 neighbor 1.1.1.1 next-hop-unchanged   //告诉邻居下一跳不改变,推荐做法

这种方法有两个限制:

1、有的IOS不支持unchaged命令

2、EBGP必须要有多跳

%BGP: Can propagate the nexthop only to multi-hop EBGP neighbor EBGP必须要有多跳,也就是说通常要用环回口建EBGP邻居,如果是用直连接口建EBGP邻居,也要打上多跳命令才行。否则上面的命令不起作用。

解法2:

在R1上修改:

R1:

route-map WOLF

 set ip next-hop 13.1.1.3

router bgp 1

 neighbor 12.1.1.2 route-map WOLF in  //将邻居12.1.1.2传过来的路由的下一跳改为13.1.1.3