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