BGP

一.BGP概述、BGP工作原理

自治系统AS:由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合
自治系统内部的路由协议---IGP(Interior Gateway Protocol)
    rip、ospf、isis:IGP着重于发现和计算路由
自治系统之间的路由协议---EGP(Exterior Gateway Protocol)
    EGP现在只有一个协议:BGP----着重于控制路由的传播和选择最优的路由。
BGP(Border Gateway Protocol,边界网关协议)

----------------------------------------------------------------------------
BGP特征
BGP是外部路由协议,用来在AS之间传递路由信息
BGP是一种增强的距离矢量路由协议
    可靠的路由更新机制
    丰富的metric度量方法
    从设计上避免了环路的发生
BGP为路由附带属性信息
BGP支持CIDR 无类域间路由
BGP支持丰富的路由过滤和路由策略

--------------------------------------------------------
BGP通过单播方式构建tcp会话以建立BGP邻居。
BGP可靠的路由更新
    TCP 端口号179
    无周期性更新
    路由增量更新
    keepalive报文周期性(60s)检测TCP的连通性
BGP特征、可靠的路由更新机制
BGP的基本工作机制
    因为要建立TCP连接,所以两端的路由器必须知道对方的IP地址,可以通过直连端口,静态路由或者IGP学习。
    ISP边界路由器知道对方的IP地址后,就可以尝试跟对方建立连接了,如果连接不能建立,说明对方还未激活,于是会等待一段时间再进行连接,这个过程一直重复,直到连接建立。
    如果TCP连接建立起来,两端的设备必须交换某些数据以确认对方的能力或确定自己下一步的行动,即所谓的能力交互。这个过程是必须的,因为任何支持IP协议栈的设备都支持TCP连接的建立,但不是每个支持IP协议栈的设备都支持BGP,所以必须在该TCP连接上进行确认。
    确认对方支持BGP协议后,就进行路由表的同步。两端路由表同步完成之后,并不是立即拆除这个连接。如果把这个TCP连接给拆除了,以后路由表发生改变,同步的时候就必须重新建立,这样需要消耗很多资源。如果利用保持的TCP连接,就可以不用重新建立连接而马上进行数据的传输。
    建立连接的两台设备互为对等体(PEER)。为了确保两边设备的BGP进程都正在运行,要求两端的设备通过该TCP连接周期性的发送KeepAlive消息,以向对端确认自己还存活。
如果一端设备在一个存活超时的时间内没有接收到对方的KeepAlive消息,则认为对方已经停止运行BGP进程,于是拆除该TCP连接,并把从对方接收到的路由全部删除。



BGP使用TCP建立连接,本地监听端口为179。和TCP连接建立相同,BGP连接的建立也要经过一系列的对话和握手。TCP通过握手协商通告其端口等参数,BGP的握手协商的参数有:BGP版本、BGP连接保持时间、本地的路由器标识(Router ID)、授权信息等。这些信息都在Open消息中携带。
 
BGP连接建立后,如果有路由需要发送则发送Update消息通告对端。Update消息发布路由时,还要携带此路由的路由属性,用以帮助对端BGP协议选择最优路由。
在本地BGP路由变化时,要通过Update消息来通知BGP对等体。
经过一段时间的路由信息交换后,本地BGP和对端BGP都无新路由通告,趋于稳定状态。
 
此时要定时发送KEEPALIVE消息以保持BGP连接的有效性。对于本地BGP,如果在保持时间内,未收到任何对端发来的BGP消息,就认为此BGP连接已经中断,将断开此BGP连接,并删除所有从该对等体学来的BGP路由。
 
当本地BGP在运行中发现错误时,要发送NOTIFICATION消息通告BGP对等体。如对端BGP版本本地不支持、本地BGP收到了结构非法的Update消息等。本地BGP退出BGP连接时也要发送NOTIFICATION消息。
 
ROUTE-REFRESH消息用来通知对等体自己支持路由刷新。
BGP的基本工作机制

BGP状态机

(1)Idle:BGP连接的第一个状态。在空闲状态,BGP在等待一个启动事件。启动事件出现以后(配置了一个邻居),BGP初始化资源,复位连接重试计时器(Connect-Retry),发起一条TCP连接,同时转入Connect(连接)状态。
        指定完邻居地址,BGP进程就会检查本地的路由表,看能不能向指定的邻居地址发起TCP会话:
        如果一直停留在idle状态,则表示目的地址不可达
        如果有可用路由,则进入第二个connect状态
 
(2)Connect:在此状态,BGP发起第一个TCP连接,如果连接重试计时器超时,就重新发起TCP连接,并继续保持在Connect状态
        如果TCP连接失败,就转入Active状态
        如果TCP连接成功,就转入OpenSent状态
 
(3)Active:在此状态,BGP总是在试图建立TCP连接,如果连接重试计时器(Connect-Retry)超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
 
(4)OpenSent:在此状态,TCP连接已经建立,BGP也已经发送了第一个Open报文,剩下的工作,BGP就在等待其对等体发送的Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器,开始计时。同时转入OpenConfirm状态。
        已经完成了TCP的三次握手,向邻居发送open包(携带上一些自身的参数),并等待邻居确认(等待时间为5S):
        如果5S后,没有收到邻居对open包的确认,则返回Active
        如果接收到邻居的open,但协商出错,则返回idle
        如果接收到邻居的open并协商完成,则进入OpenConfirm
 
(5)OpenConfirm:在OpenConfirm状态,BGP等待一个Keepalive报文,同时复位保持计时器,如果收到了一个Keepalive报文,就转入Established阶段,BGP邻居关系就建立起来了。
        开始发送Keepalive:
        如果出现错误,则返回idle
        如果接收到邻居的Keepalive,则进入Established
 
(6)Established:在Established状态,BGP邻居关系已经成功建立完成。这时,BGP将和它的邻居们交换Update报文,同时复位保持计时器。
 
另外,在除Idle状态以外的其它五个状态出现任何Error的时候,BGP状态机就会退回到Idle状态。
 
在BGP对等体建立的过程中,通常可见的三个状态是:Idle、Active、Established。
Idle状态下,BGP拒绝任何进入的连接请求,是BGP初始状态。
Active状态下,BGP将尝试进行TCP连接的建立,是BGP的中间状态。
Established状态下,BGP对等体间可以正常交换Update报文、Route-refresh报文、Keepalive报文和Notification报文。
 
BGP对等体双方的状态必须都为Established,BGP邻居关系才算成立,双方再通过Update报文交换路由信息。
 
BGP状态机
1.Open: 协商参数,建立邻居:主要包括BGP版本,AS号、RID等信息。试图建立BGP邻居关系的两个路由器在建立了TCP会话之后开始交换OPEN信息以协商能否形成BGP邻居关系。
 
2.Keepalive:周期性(60s)发送保活报文:该报文用于BGP邻居关系的维护,是周期性交换的报文,用于判断对等体之间的可达性。保证TCP会话不中断。
    keepalive报文的发送间隔不一致,不影响bgp邻居的建立。会协商成较小的值

3.Update:携带NLRI以及属性值:该报文则是邻居之间用于交换路由信息的报文,其中包括撤销路由信息和可达路由信息及其各种路由属性。是BGP五个报文中最重要的报文。 
 
4.Notification:发送差错报文来关闭BGP:BGP的差错检测机制,一旦检测到任何形式的差错,BGP Speaker会发送一个NOTIFICATION报文,随后与之相关的邻居关系将被关闭。
 
5.Route-refresh:用来通知对等体自己支持路由刷新能力。
在所有BGP路由器使能Route-refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

BGP各种报文结构详见思琦文档or华为文档。
BGP报文

BGP更新报文使用TLV结构(Type length value)
各种BGP属性存放在各个TLV结构中
一条BGP更新报文可以携带多条NLRI(各个属性必须相同,若多条的NLRI的属性有不同,则放入多条BGP更新报文中)

ipv4的bgp路由信息就是在NLRI中,是独立的,不是TLV结构

MP_REACH_NLRI、MP_UNREACH_NLRI是用于拓展的,可以储存BPG ipv6信息
MP_REACH_NLRI、MP_UNREACH_NLRI也是TLV结构,不过储存的信息更多,比如储存了NLRI,next_hop
MP_REACH_NLRI:multiprotocol reachable NLRI,多协议可达NLRI,用于发布可达路由信息及下一跳
MP_UNREACH_NLRI:multiprotocol unreachable NLRI,多协议不可达NLRI;用于撤销不可达路由
BGP更新报文使用TLV结构(Type length value)
IP路由表(IP-RIB):全局路由信息库
BGP路由表(Loc-RIB):BGP路由数据库,包括BGP Speaker选择的路由信息
邻居表:对等体邻居清单列表
adj-RIB-in:对等体宣告给本地speaker的未处理的路由信息库
adj-RIB-out:本地speaker宣告给指定对等体的路由信息库
------------------------------------------------------------------
BGP路由信息处理过程
1.接收过程:接收从对等体更新来的adj-RIB-in,经过输入策略引擎的过滤,放入BGP路由表(Loc-RIB),经过路径选择,放入IP路由表(IP-RIB)
2.发送过程:BGP路由表(Loc-RIB)经过输出策略引擎的过滤,生成adj-RIB-out,发送至对等体
BGP各个数据库及BGP路由信息处理过程

 

多协议BGP(MP-BGP),多地址族的bgp
两种基本的邻居关系:
1)iBGP(internal BGP),AS号码相同的邻居关系
2)eBGP(external BGP),AS号码不相同的邻居关系
bgp默认支持IPv4单播路由

eBGP邻居
1)以直连地址来建立eBGP(primary)
    R1R5使用直连地址建立EBGP邻居
    [R1]bgp 100
    [R1-bgp]peer 10.1.15.5 as-number 200  #指定和对端地址10.1.15.5,尝试通过单播方式和对方建立邻居关系,对端的AS号码为200;
    [R5]bgp 200
    [R5-bgp]peer 10.1.15.1 as-number 100
2)环回接口作为源地址来建立eBGP
    R1R5使用环回口建立eBGP邻居,要注意指定源地址和EBGP多跳,以及路由可达
    [R5]bgp 200
    [R5-bgp]peer 11.1.1.1 as-number 100    
    [R5-bgp]peer 11.1.1.1 connect-interface LoopBack 0   #指定更新源
    [R5-bgp]peer 11.1.1.1 ebgp-max-hop 2  #EBGP多跳:手动指定eBGP的报文中的IP的TTL为2,EBGP报文默认的TTL值为1
    [R1]bgp 100
    [R1-bgp]peer 55.1.1.1 as-number 200
    [R1-bgp]peer 55.1.1.1 connect-interface LoopBack 0
    [R1-bgp]peer 55.1.1.1 ebgp-max-hop 2
-------------------------------------------------------------
iBGP邻居
一般通过环回接口构建iBGP
    [R1]bgp 100    
    [R1-bgp]peer 44.1.1.1 as-number 100
    [R1-bgp]peer 44.1.1.1 connect-interface LoopBack 0
    [R1-bgp]peer 44.1.1.1 next-hop-local#要注意在ASBR上配置修改下一跳源地址。BGP中下一跳为BGP通信的地址,这个几乎是ASBR的标配了吧。。
    [R4]bgp 100    
    [R4-bgp]peer 11.1.1.1 as-number 100
    [R4-bgp]peer 11.1.1.1 connect-interface LoopBack 0



----------------------------------------------------------------------------
思科ebg配置:
    router bgp 100
     bgp log-neighbor-changes
     neighbor 66.1.1.1 remote-as 200
     neighbor 66.1.1.1 ebgp-multihop 2
     neighbor 66.1.1.1 update-source Loopback0
    router bgp 200
     bgp log-neighbor-changes
     neighbor 22.1.1.1 remote-as 100
     neighbor 22.1.1.1 ebgp-multihop 255
     neighbor 22.1.1.1 update-source Loopback0

思科设备小特性:
通过环回接口构建ebgp,思科设备除了配置EBGP多跳之外,还可以关闭EBGP的直连检测

C-R2(config-router)#neighbor 66.1.1.1 disable-connected-check #关闭EBGP的直连检测
C-R6(config-router)#neighbor 22.1.1.1 disable-connected-check #适用考试场景:通过环回接口构建ebgp,同时不允许使用多跳命令
配置EBGP邻居、IBGP邻居(指定更新源、next-hop-local、EBGP多跳)
BGP邻居处于IDLE的故障排查:

0)邻居配置错误
1)没有到达目的地的路由/或者路由出错
2)缺少eBGP多跳配置
3)没有在对应的地址族激活邻居关系      undo peer 66.1.1.1 enable
BGP邻居处于IDLE的故障排查
ORF的功能为将本地配置的BGP(边界网关协议)前缀过滤器“推送”给远程对等体,以便远程对等体将收到的过滤器应用为自己的又一出站过滤器。


简单来说就是BGP邻居之间可以配置普通BGP邻居和基于ORF的BGP邻居

普通的BGP邻居在请求路由刷新时,对端会发送完整路由信息
基于ORF的BGP邻居在请求路由刷新时,路由刷新报文会携带本端的入口策略,对端在发送路由信息前会根据该策略进行过滤
    好处是降低了所要通告的前缀数量,从而减少BGP路由更新数量;减轻本地路由器工作量。
    缺点:对方路由器的CPU加重,因为需要根据前缀

在稳定的BGP邻居关系时,配置ORF会造成邻居关系重置


ORF实验:
    R5R6为IBGP邻居,R5配置有业务网段5.5.5.5、5.5.5.55
    在R6上配置前缀列表,对接收NLRI进行过滤。
        [Huawei]ip ip-prefix DENY_PREFIX index 10 deny 5.5.5.5 32
        [Huawei]ip ip-prefix DENY_PREFIX index 20 permit 0.0.0.0 32
        [R6-bgp]peer 55.1.1.1 ip-prefix DENY_PREFIX import #接收路由时,对NLRI进行过滤

    登录R5进行验证,R5通告了5.5.5.5、5.5.5.55给R6
        <R5>display bgp routing-table peer 66.1.1.1 advertised-routes #查看向指定邻居通告的路由 

    配置ORF
        [R6-bgp]peer 55.1.1.1 capability-advertise orf ip-prefix both #可以指定出方向、入方向、出入方向
        [R5-bgp]peer 66.1.1.1 capability-advertise orf ip-prefix both
    重新在R5上验证,发现R5仅通告了5.5.5.55给R6
        <R5>display bgp routing-table peer 66.1.1.1 advertised-routes
        
        
        [R6]display ip ip-prefix 
        
        思科的ORF实验未配置
        C-R5(config-router)#neighbor 10.1.15.5 capability orf prefix-list send
ORF(route-refresh)及配置
BGP的基本防环规则
1)IBGP的防环,从IBGP邻居处收到的路由(R1从R4收到的IBGP路由)不在更新给其他IBGP邻居=>才需要全互联==>过多的BGP邻居[n*(n-1)]/2
2)EBGP的防环,如果AS-path中包含和自身相同的AS号码则拒绝接收
BGP的基本防环规则
BGP路由通告原则
1.只把本身用的最优路由通告给对等体
    BGP路由数据库中,最优的路由才有可能放入路由表中;最优当然意味着路由可达!
2.从EBGP邻居获得的路由会向他的所有BGP对等体通告(包括EBGP和IBGP)
3.从IBGP邻居获得的路由不会通告给IBGP邻居(IGBP防环)
4.BGP同步:从IBGP邻居获得的路由需要IGP和BGP同步才会通告给EBGP邻居(过时技术,华为默认关闭,且无法开启)
    实际上同步都是关闭的,所以从IBGP邻居获得的路由会通告给EBGP邻居

    a.BGP同步规则的定义:
    在bgp同步打开的情况下,一个BGP路由器不会把那些通过ibgp邻居学到的bgp路由通告给自己的ebgp邻居;除非自己的igb路由表中存在这些路由,才可以向ebgp路由器通告.
    b.BGP同步规则的目的:
    防止一个AS(不是所有的路由器都运行bgp)内部出现路由黑洞,即向外部通告了一个本AS不可达的虚假的路由.

BGP路由的下一跳若跨AS,则始终进行检查下一跳是否可达。
而BGP同步关闭的情况下:从IBGP学习到的路由默认有效且最优,将会放入RIB中。(不检查下一跳可达性)
BGP同步检查将会影响一条BGP路由是否有效,进行影响该路由是否最优,也影响了该路由的传递
BGP路由通告原则
BGP黑洞:一个AS内,部分路由器没有运行BGP,或者BGP设计问题导致设备上没有路由,继而产生了路由黑洞
    IP是一种尽力而为的转发,数据传送沿途的所有设备必须逐跳来查找路由表,然后转发

路由黑洞解决办法:
0、BGP同步(过时技术,不再使用!)(未同步的路由将会被标机为无效路由,从而避免了路由黑洞)
1、全互联
2、路由反射器,路由反射器只是解决了水平分割的问题,所以也可以解决路由黑洞
3、联邦:只是解决了水平分割的问题,所以也可以解决路由黑洞(所谓联邦,貌似就是在BGP AS内部再划分AS。。。)
4、将BGP引入IGP
5、MPLS

方法4:将BGP引入到IGP中
    把BGP引入到IGP不能很好的解决路由黑洞
    把BGP引入到IGP需要过滤,即把需要的BGP路由进入到IGP
    总结:这种方法不好用,也很麻烦。如果AS内没有把所有网段都通告进IGP的话,还有更多问题产生

    延伸知识点:
    在将BGP重分布进其他协议时,默认仅仅把EBGP路由引入到IGP中;当然可以设置同时引入IBGP路由
        [R1-ospf-10]import-route bgp permit-ibgp #重分布BGP路由时,允许IBGP路由
        C-R1(config-router)#bgp redistribute-internal //允许把IBGP路由引入到IGP
        将IBGP重分布进IGP中还会导致其他问题,比如环路。
        思科设备允许把ibgp路由引入到IGP中后,直接环路了。。
        而华为设备允许后,R3还是没有路由,现象和思科设备不一样
        这是因为华为设备上关于4.4.4.4这条路由的五类LSA的FA地址为自身。。
        
        华为设备使FA地址未设置后(比如修改网络类型为p2p,p2p不会设置FA地址),有了环路现象。。





BGP全互联---IBGP全互联---避免了2个BGP路由通告原则
1.从IBGP邻居获得的路由不会通告给IBGP邻居
2.BGP同步
BGP黑洞及解决方案

二.产生BGP路由及路由汇总

产生bgp路由的3种方式
1.network:精准通告路由,RIB中必须有该路由(网络号+掩码均一致)。可以通告通过其他协议学习的路由,默认掩码的网络可以不带掩码
    注意:通告自身的BGP会话源地址,BGP对等体(IBGP、EBGP)能学习到该路由,但不是有效的!-----正常情况下,不会通告自身的更新源IP
2.import:可以将直连、静态、动态路由协议学习的路由注入BGP中
3.aggregate路由聚合(设备上必须存在任意的明细路由)


[HW-R4-bgp]network 4.4.4.4 32 //BGP精准的通告一条在本地路由表的路由,以产生BGP路由(dis bgp routing,查看BGP的数据库);容易犯的错误:掩码不正确或者通告了错误的前缀
产生bgp路由的3种方式
路由聚合原则:
    1.只要设备上存在任意的明细路由,则汇总路由会装载到RIB中
    2.如果所有的明细路由消失,则汇总路由也失效


基础实验环境:R4上有4个业务IP:4.4.4.1、4.4.4.2、4.4.4.3、4.4.4.4
    其中4.4.4.1、4.4.4.2在bgp进程中network
    4.4.4.3则被import
    4.4.4.4未被引入BGP中
    acl number 2001  
     rule 5 permit source 4.4.4.3 0 
    #
    route-policy CONN permit node 10 
     if-match acl 2001 
    #
    route-policy CONN deny node 20 
    
    [R4-bgp]import-route direct route-policy CONN
路由聚合原则及聚合实验环境搭建
1.自动聚合:距离适量协议才支持自动汇总
[R4-bgp]summary automatic #在R4上配置了自动聚合
[R4]dis bgp routing-table 
    *>   4.0.0.0            127.0.0.1                             0      ?  #自动聚合产生的路由
    s>   4.4.4.3/32         0.0.0.0         0                     0      ?  #import进BGP的路由,被抑制了
    

2.额外的聚合方式
    其实思路就是通过静态路由or其他动态路由进行路由聚合,然后在BGP进程中network宣告
    [R4]ip route-static 4.4.4.0 30 NULL 0
    [R4-bgp]net 4.4.4.0 30  #这种严格来说,不算是BGP聚合路由了吧。。。
    [R4]dis bgp routing-table #这种方式不能抑制明细路由
自动聚合、额外的聚合方式
默认情况下,手动汇总后会发送汇总路由以及所有的明细路由
手动聚合的路由优先级高于自动聚合的优先级
手动汇总后默认会丢失明细路由所属的AS号


当被聚合的路由既有?也有i时,不同厂商的设备表现并不一样
    思科聚合(?+i)产生了i形式的路由
    华为聚合(?+i)产生了?形式的路由
    
原子聚合、聚合者属性
    [R4]dis bgp routing-table 4.4.4.0 30 #查看一条汇聚后的路由
     BGP local router ID : 10.1.34.4
     Local AS number : 100
     Paths:   1 available, 1 best, 1 select
     BGP routing table entry information of 4.4.4.0/30:
     Aggregated route. 
     Route Duration: 00h05m23s  
     Direct Out-interface: NULL0
     Original nexthop: 127.0.0.1
     Qos information : 0x0
     AS-path Nil, origin incomplete, pref-val 0, valid, local, best, select, pre 255
     Aggregator: AS 100, Aggregator ID 10.1.34.4, Atomic-aggregate
     #只有聚合路由才会出现这一列
     Atomic-aggregate:#原子聚合
     Aggregator: AS 100, Aggregator ID 10.1.34.4:#聚合者属性
     Advertised to such 3 peers:
        11.1.1.1
        22.1.1.1
        33.1.1.1
手工聚合Aggregate命令及原子聚合、聚合者属性
华为
方式1:
    [R4-bgp]aggregate 4.4.4.0 30 #手工聚合路由;
        缺点:无法抑制明细路由,邻居还是会受到明细路由
--------------------------------------------
方式2:
    使用场景:AS内部的路由聚合,#用于聚合起源自自身AS的路由
    [R4-bgp]aggregate 4.4.4.0 30 detail-suppressed #添加detail-suppressed参数,则被汇总的路由将会被抑制
--------------------------------------------
方式3:
    使用场景:跨AS的路由的聚合
    as-set(无序的组合)和as-sequence(有序的)(没找到有序的参数)
    [R5-bgp]aggregate 4.4.4.0 30 detail-suppressed as-set #携带as-set参数后,将会携带产生该明细路由的AS号
    [R5-bgp]aggregate 4.4.4.0 30 detail-suppressed #4.4.4.1等明细路由在AS100,而R5在AS200;此时这样聚合的路由将会缺失as-path属性,有可能导致环路。
    #当聚合起源自其它AS的路由时,需要加上参数as-set,那么聚合的路由会保留as-path;聚合路由会回传给起源AS,若不加as-set参数,起源AS会接收该路由;起源AS根本就没必要接收该聚合路由。。
--------------------------------------------
方式4抑制策略suppress-policy:抑制部分路由suppress-policy
    [R5-acl-basic-2002]rule permit source 4.4.4.2 0 #此处当然可以用前缀列表来匹配,实际上这种场景用前缀列表更多
    [R5-acl-basic-2002]rule deny 
    
    [R5]route-policy SUPPRESS permit node 10
    [R5-route-policy]if-match acl 2002
    
    [R5-bgp]aggregate 4.4.4.0 30 detail-suppressed suppress-policy SUPPRESS
    #只有被命中的4.4.4.2被抑制了
    [R5]dis acl 2002
--------------------------------------------
方式5属性策略attribute-policy:修改BGP路由的起源属性
    碰到问题:使用前缀列表无法命中路由

    acl number 2005  
     rule 5 permit source 4.4.4.0 0 
    route-policy ORI_POLICY permit node 10 
     if-match acl 2005 
     apply origin igp#修改起源属性为igp,即network的起源方式
    #修改的起源属性的对象仅仅只是聚合产生的4.4.4.0/30这条路由
    [R5-bgp]aggregate 4.4.4.0 30 detail-suppressed suppress-policy SUPPRESS attribute-policy ORI_POLICY

其他:
思科的advertise-map=华为的origin-policy
主要是用于聚合起源自非本AS的路由,且路由来源于多个AS时。。。

---------------------------------------------------------
思科
方式1:
C-R1(config-router)#aggregate-address 1.1.1.0 255.255.255.252 
方式2:
C-R1(config-router)#aggregate-address 1.1.1.0 255.255.255.252 summary-only #抑制明细路由

方式3:产生次优的转发,解决方案:
C-R5(config-router)#$ddress 1.1.1.0 255.255.255.252 summary-only  as-set 
C-R6(config-router)#$ddress 1.1.1.0 255.255.255.252 summary-only  as-set 

方式4:
需求:1.1.1.2和1.1.1.3抑制,1.1.1.1和1.1.1.0/30通告给邻居
C-R1(config)#ip prefix-list 11 permit 1.1.1.2/32
C-R1(config)#ip prefix-list 11 permit 1.1.1.3/32
C-R1(config)#route-map Suppress 
C-R1(config-route-map)#match ip address prefix-list 11
router bgp 100
 aggregate-address 1.1.1.0 255.255.255.252 summary-only suppress-map Suppress
C-R1#show ip prefix-list detail 11
C-R1#show ip bgp

方式5:
C-R1(config)#route-map Attribute
C-R1(config-route-map)#set origin incomplete //if命中任意,那么修改起源属性为?
 aggregate-address 1.1.1.0 255.255.255.252 summary-only attribute-map Attribute suppress-map Suppress

attribute-map和suppress-map生效的对象有些不一样
attribute-map仅仅只是对聚合的路由生效
而suppress-map则是抑制路由,不发布出去,生效的对象不是这个聚合后的路由
手工聚合Aggregate配置及detail-suppressed、as-set、suppress-policy、attribute-policy

三.BGP选路及路由策略

公认属性是所有厂家设备都支持和认识的BGP属性:一旦BGP对等体更新带有公认属性的UPDATE消息时,BGP对等体必须转发这些公认属性给其它对等体。
可选属性:可以支持也可以不支持这种属性,发送更新时可携带也可不携带

BGP路径属性可以被分为四大类:
公认必遵 (Well-known mandatory):所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错并重置BGP邻居关系
公认任意 (Well-known discretionary):所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中(忽略或按照默认值对待)
可选过渡 (Optional transitive):BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性
可选非过渡 (Optional non-transitive):BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,将丢弃这种属性,不必再转发给邻居路由器

----------------------------------------------
常见BGP路径属性
公认必遵属性:Origin、as_path、next_hop
公认任意属性:local_pref属性
可选过渡:团体属性
可选非过渡:MED、Originator_ID、Cluster_list
BGP路径属性分类及常见BGP路径属性
<R4>display bgp routing-table#查看BGP路由数据库

 BGP Local router ID is 10.1.34.4 
 Status codes: * - valid, > - best, d - damped,
               h - history,  i - internal, s - suppressed, S - Stale
               Origin : i - IGP, e - EGP, ? - incomplete


 Total Number of Routes: 2
      Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>i  1.1.1.1/32         11.1.1.1        0          100        0      i
 *>i  5.5.5.5/32         11.1.1.1        0          100        0      200i
 *>   4.0.0.0            127.0.0.1                             0      ?
 *>   4.4.4.1/32         0.0.0.0         0                     0      i
 *>   4.4.4.2/32         0.0.0.0         0                     0      i
 s>   4.4.4.3/32         0.0.0.0         0                     0      ?#该条路由被抑制

 *>   55.55.55.0/24      127.0.0.1                             0      {200 300}i#聚合的路由,path为as-set形式
 *>   55.55.55.55/32     55.1.1.1        0                     0      200i
 *>   55.55.55.56/32     10.1.110.10     0                     0      300i

*>i  1.1.1.1/32         55.1.1.1        0          100        0      (2005) 100i #联邦内的as会添加在括号中


--------BGP路由表解读-------
*:表示该路由有效。注意:有效的前提就是在RIB中到nexthop路由可达
>:best,表示该路由最优,只有最优的路由才可能放入RIB。思科的BGP路由数据库,最后路由放入RIB失败的话,会显示为"r"---RIB-failure
i:internal,表示该路由为iBGP路由
s表示被抑制,该bgp路由不会发送给邻居
    1.BGP路由自动汇总时,import的路由将会被抑制
    2.BGPaggregate手工汇总时,配置了detail-suppressed参数后,所有被汇总的明细路由都被抑制
    3.虽然被抑制了,但只是不会传递而已,本地路由表还是有效的

NextHop:BGP中的nexthop就是BGP的源地址。(公认必遵属性)
    注意:EBGP路由经过ASBR传递后,默认是不修改下一跳地址的,即下一跳仍是EBGP邻居的协议源地址。
    缺省情况下:
    BGP在向IBGP对等体通告路由时,不改变下一跳属性
    BGP在向EBGP对等体通告路由时,会自动将下一跳属性设为自身的IP地址

MED:当某个AS有多个入口时,可以用MED属性来帮助其外部的AS选择一个较好的入口路径。一条路由的MED值越小,其优先级越高。
LocPrf:本地优先级属性。用于在AS内优选到达某一目的地的路由。反映了BGP Speaker对每条BGP路由的偏好程度。属性值越大越优。默认100
PrefVal:华为PreferVal:私有属性,只在本设备有意义,不更新给邻居

path:即AS-Path,(公认必遵属性),AS路径属性。是路由经过的AS号的有序序列,即列出此路由在传递过程中经过了哪些AS。
    作用:防环和选路。
    私有AS范围(64512-65535),还有个说法:65535有特殊用途;2009年之前,AS范围只有2字节;2009年之后进行了扩充,AS范围共4字节
    电信AS号:4134、4809、4812;网通AS号:9929、4837;中国教育网:4538
    
    {200 300}:聚合路由时,添加了as-set参数后,明细路由的来源AS的表现形式
    如果聚合路由聚合了成千上万条路由,而且具体路由有问题的话,聚合路由就会不断地发生振荡——这实际上是添加了as-set 参数后的缺点。
    如上图的明细路由55.55.55.55失效后,as-set会从{200 300}变成{300}。若明细路由不稳定,则会频繁震荡
    BGP聚合路由默认情况下不继承原有明细路由的属性。
    
    (2005):联邦内as-path的表现形式
    
ogn:Origin:起源属性。定义路由信息的来源,标记一条路由是怎样成为BGP路由的。
    起源属性三个值的优先顺序为IGP>EGP>INCOMPLETE,这三个值对于BGP的选路起着控制作用。
    i:IGP,一般为network命令产生
    e:EGP协议产生,见不到了,活在传说中。。。
    ?:incomplete,一般为import命令引入的

Network:Network layer reachability information (NLRI)即BGP路由信息
常见BGP路径属性详解(NextHop、MED、LocPrf、PrefVal、path、Origin)及查看BGP路由数据库display bgp routing-table
原子聚合、聚合者属性见手工聚合
-----------------------------------------------------------
起源者IDID、簇列表详见RR防环机制
[R3]display bgp routing-table 2.2.2.2

 BGP local router ID : 10.1.23.3
 Local AS number : 100
 Paths:   2 available, 1 best, 1 select
 BGP routing table entry information of 2.2.2.2/32:
 From: 22.1.1.1 (10.1.23.2)
 Route Duration: 00h14m35s  
 Relay IP Nexthop: 10.1.23.2
 Relay IP Out-Interface: GigabitEthernet0/0/0
 Original nexthop: 22.1.1.1
 Qos information : 0x0
 AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, bes
t, select, active, pre 255, IGP cost 1
 Not advertised to any peer yet

 BGP routing table entry information of 2.2.2.2/32:
 From: 11.1.1.1 (10.1.15.1)
 Route Duration: 00h02m47s  
 Relay IP Nexthop: 10.1.23.2
 Relay IP Out-Interface: GigabitEthernet0/0/0
 Original nexthop: 22.1.1.1
 Qos information : 0x0
 AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
 255, IGP cost 1, not preferred for Cluster List#这里会显示该路由没有被优选的原因
 Originator:  10.1.23.2  #
 Cluster list: 10.1.15.1
 Not advertised to any peer yet
[R3-bgp]display bgp routing-table 2.2.2.2

 BGP local router ID : 3.3.3.3
 Local AS number : 100
 Paths:   2 available, 1 best, 1 select
 BGP routing table entry information of 2.2.2.2/32:
 From: 22.1.1.1 (2.2.2.2)
 Route Duration: 00h00m26s  
 Relay IP Nexthop: 10.1.23.2
 Relay IP Out-Interface: GigabitEthernet0/0/0
 Original nexthop: 22.1.1.1
 Qos information : 0x0
 AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, bes
t, select, active, pre 255, IGP cost 1
 Not advertised to any peer yet

 BGP routing table entry information of 2.2.2.2/32:
 From: 11.1.1.1 (1.1.1.1)
 Route Duration: 00h00m26s  
 Relay IP Nexthop: 10.1.23.2
 Relay IP Out-Interface: GigabitEthernet0/0/0
 Original nexthop: 22.1.1.1
 Qos information : 0x0
 AS-path Nil, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, pre
 255, IGP cost 1, not preferred for Cluster List#这里会显示该路由没有被优选的原因
-------------------若该路由经过反射器反射,则会有以下2列信息---------------------
 Originator:  2.2.2.2 #起源者
 Cluster list: 1.1.1.1#簇列表,反射者
 Not advertised to any peer yet
原子聚合、聚合者属性、起源者IDID、簇列表
团体属性是BGP的私有属性(可选过渡属性),在BGP对等体之间传播,不受AS的限制。利用团体属性可以使多个AS中的一组BGP设备共享相同的策略,从而简化路由策略的应用和降低维护管理的难度
类似IGP的tag

团体属性可以在产生BGP路由时设置,比如network、import、aggregate
也可以在发送BGP路由时设置,比如[R5-bgp]peer 77.1.1.1 route-policy COMM2 export 
应该也可以在接收BGP路由时设置,但是应该没这种使用场景的吧,毕竟发送路由时携带团体属性是方便管理其他设备。
tips:团体属性需要沿途的设备都配置通告团体属性

团体属性可分为2类:众所周知的团体属性、自定义团体属性


---------------------------------------------------
community-filter
在基本团体属性列表中只能指定团体号或团体属性( basic-comm-filter-num 的取值范围为1~99)
在高级团体属性列表中则可以使用正则表达式作为匹配条件( adv-comm-filter-num 的取值范围为100~199<R1>dis bgp routing-table community#查看携带团体属性的bgp路由数据库
Community团体属性及community-filter
众所周知的团体属性:
    Internet:表示可以向任何对等体发送匹配的路由。缺省情况下,所有的路由都属于internet团体
    no-advertise:表示该路由不能发送给任何BGP邻居。
    no-export:表示该路由不能发送到AS外,但可以发送给子自治系统。
    no-export-subconfed(思科:local-as):表示该路由不能发送到AS外,也不能发送到其他子AS中


实验环境:R1为AS100,
AS200为联邦,其中R5为AS2005,R6R7为AS2067


实验1:R1在network 1.1.1.1时,设置团体属性no-advertise
实验现象:AS200无法收到该路由,因为R1根据就没发送该路由
    [R1]route-policy COMM1 permit node 10
    [R1-route-policy]apply community no-advertise#团体属性一定要通过route-policy才能设置
    [R1-bgp]network 1.1.1.1 32 route-policy COMM1
    [R1]dis bgp routing-table peer 55.1.1.1 advertised-routes #查看向55.1.1.1发送的路由
---------------------------------------------------------------------------
实验2:R1仅network 1.1.1.1,不设置团体属性;但将路由发送至55.1.1.1时,设置团体属性no-advertise
实验现象:R5收到该1.1.1.1路由,R6R7无路由
    [R1-bgp]peer 55.1.1.1 route-policy COMM1 export #针对邻居55.1.1.1实施出方向的路由策略
    [R1-bgp]peer 55.1.1.1 advertise-community #记得配置发送团体属性
---------------------------------------------------------------------------
实验3:R1在network 1.1.1.1时,设置团体属性no-export
实验现象:AS200无法收到该路由,因为R1根据就没发送该路由
    [R1]route-policy COMM2 permit node 10
    [R1-route-policy]apply community no-advertise
    [R1-bgp]network 1.1.1.1 32 route-policy COMM2
    [R1]dis bgp routing-table peer 55.1.1.1 advertised-routes 
---------------------------------------------------------------------------
实验4:R1仅network 1.1.1.1,不设置团体属性;但将路由发送至55.1.1.1时,设置团体属性no-export
实验现象:R5R6R7均收到该1.1.1.1路由,R6R7在同个联邦中
tips:团体属性需要沿途的设备都配置通告团体属性
    [R1-bgp]peer 55.1.1.1 route-policy COMM2 export #针对邻居55.1.1.1实施出方向的路由策略
    [R1-bgp]peer 55.1.1.1 advertise-community #记得配置发送团体属性

=========================================================================
思科配置
    C-R3(config)#route-map Comm
    C-R3(config-route-map)#set community no-export 
    C-R3(config-route-map)#router bgp 100
    C-R3(config-router)#network 3.3.3.3 ma 255.255.255.255 route-map Comm
    C-R3(config-router)#neighbor QYT send-community
    C-R1#show ip bgp 3.3.3.3
    C-R7#show ip bgp


access-list 7 permit 7.7.7.7
route-map ADV permit 10
 match ip address 7 //如果命中acl7的路由,那么应用团体属性local-as
 set community local-AS
route-map ADV permit 20 //允许其他路由更新给邻居,此时不做属性的改变

C-R7(config-router)#neighbor 55.1.1.1 route-map ADV out 
众所周知的团体属性(no-export、no-advertise、no-export-subconfed)及配置
实验:R5自定义团体属性并传递给R7,R7根据团体属性匹配路由,修改该路由的AS-PATH和起源方式
    R5配置
    [R5]route-policy COMM1 permit node 10
    [R5-route-policy]apply community 2005:2067 
    [R5-bgp]network 5.5.5.1 255.255.255.255 route-policy COMM1

    R7配置
    ip community-filter 55 permit 2005:2067#创建community-filter
    route-policy COMM_REC permit node 10 
     if-match community-filter 55 #根据community-filter进行匹配
     apply as-path 5555 additive#增加ASpath
     apply origin incomplete #修改起源方式为import
    #
    route-policy COMM_REC permit node 20 #记得放行其他路由
    [R7-bgp]peer 55.1.1.1 route-policy COMM_REC import#在接收路由时,配置路由策略进行修改
    可以在R7本地看到5.5.5.1这条路由被修改了AS-PATH和起源方式;而其他路由并没有被修改
    <R7>display ip community-filter 
    [R7]dis route-policy

-----------------------------
    思科实验
    自定义团体属性值,之后使用团体属性列表来命中团体属性,最后使用route-policy/map匹配团体属性列表,修改BGP属性
    route-map Comm permit 10
     set community 100:3
    C-R3(config)#router bgp 100
    C-R3(config-router)# network 3.3.3.3 mask 255.255.255.255 route-map Comm
    C-R3#show ip bgp 3.3.3.3

    控制路径
    1)
    C-R7(config)#ip community-list 1 permit 100:3 
    C-R7(config)#ip community-list 1 deny internet 
    2)
    C-R7(config)#route-map Best permit 10
    C-R7(config-route-map)#match community 1    
    C-R7(config-route-map)#set origin incomplete 
    C-R7(config-route-map)#route-map Best permit 20
    3)
    C-R7(config-route-map)#router bgp 2067
    C-R7(config-router)#neighbor 55.1.1.1 route-map Best in
    C-R7#show ip bgp 
自定义团体属性

 BGP路由选路原则

华为BGP路由选路原则:
    0. 如果此路由的下一跳不可达,忽略此路由
    1. Preferred-Valnue值数值越高越优先,华为私有属性,仅本地有意义
    2. Local-Preference值最高的路由优先:EBGP之间不会传递本地优先级值,只在本AS的IBGP之间传递,默认为100
    3.4.5
        3. 聚合路由优先于非聚合路由
        4. 本地手动聚合路由的优先级高于本地自动聚合的路由
        5. 本地通过Network命令引入的路由的优先级高于本地通过Import-route命令引入的路由
        ----------------------------------------
        总结优先顺序:
        a.本地产生的路由,顺序:手动聚合路由、自动聚合路由、network、import
        b.从对等体学习的路由
    
    6. AS路径的长度最短的路径优先
    7. 比较Origin属性,IGP优于EGP,EGP优于Incomplete
    8. 选择MED较小的路由
    9. EBGP路由优于IBGP路由(和AD、路由优先级无关)
      10. BGP优先选择到BGP下一跳的IGP度量值最低的路径
        当以上全部相同,则为等价路由,可以负载分担(注意: AS_Path必须一致,当负载分担时,以下3条原则无效)
    11. 比较Cluster_list长度,短者优先
    12. 比较Originator_ID(如果没有Originator_ID,则用Router_ID比较),选择数值较小的路径。
      13.   比较对等体的IP地址,选择IP地址数值最小的路径。


------------------------------------------------------------------------
从以上原则以及BGP常用的路径属性,我们总结出9个影响BGP选路的重要参数:
1、preferred value
2、LOCAL_pre
3、AS-PATH
4、origin
5、MED
6、邻居类别是IBGP还是EBGP
7、IGP内部开销值。
8、cluster list
9、community
常用参数:local_preference、as-path、MED、community
tips:community没有出现在选路原则中,因为功能类型IGP中的TAG,是用来命中路由的!






------------------------------------------------------------------
选路的前提:下一跳可达
顺口溜:世界恋爱组织亚洲办公室,墓碑下的,半兽人
Cisco                                   HW
W,权重(思科私有)                   PreferValue(华为私有)
L,本地优先级                         本地优先级
O,本地起源                           本地起源
A,AS-path                            AS-path
O,起源代码                           起源代码
-------------
M,MED值                              MED值
E,EBGP>IBGP                          EBGP>IBGP
M, IGP的metric                        IGP的metric
L,load-balance                       load-balance
-------------
O,older EBGP                         簇列表更短的
R,RID  较小                           RID较小
C,簇列表较短                          neighbor/peer 后的地址较小的
neighbor/peer 后的地址较小的


BGP协议的具体属性(华为面试官问):https://blog.csdn.net/N1314N/article/details/91364266
BGP - 5,BGP属性:https://www.cnblogs.com/guxh/p/8467766.html
BGP选路规则,华为思科选路规则对比:https://blog.51cto.com/wyywei/2085485
华为BGP路由选路原则

选路原则实验前提:AS100路由传递到AS200,在AS200上使用选路原则,实现AS200的选路

华为PreferVal=思科weight:私有属性,只在本设备有意义,不更新给邻居数值越大越优先
思科设备本地生成的路由权重为32768,华为设备本地生成的路由PreferVal为0。从邻居学习的路由的权重(优先级值为0)
方式一:
    在R7本地修改邻居传递的路由的PreferVal,然后在R7本地查看路由的变化
    [R7-bgp]peer 66.1.1.1 preferred-value 2#修改华为优先级
    [R7-bgp]dis bgp routing-table #可以在bgp路由数据库中查看到PreferVal的变化
    [R7]dis bgp routing-table 1.1.1.1#可以在查看BGP路由的详细信息时,看到PreferVal的变化;以及路由不被优选的理由:not preferred for PreVal

    R4(config-router)#neighbor 22.1.1.1 weight 2
方式二:route-map/route-policy来修改特定路由的选路
    命中路由的工具:acl、前缀列表、团体属性列表、as-path列表
    Cisco:
    ip prefix-list 99 seq 5 permit 1.1.1.0/30
    ip prefix-list 99 seq 10 permit 3.3.3.3/32
    !
    route-map Weight permit 10
     match ip address prefix-list 99
     set weight 106
    route-map Weight permit 20
    !
    neighbor 66.1.1.1 route-map Weight in
-----------------------------------------------
    HW:
    ip ip-prefix 99 index 10 permit 1.1.1.0 30
    ip ip-prefix 99 index 20 permit 3.3.3.3 32
    #
    route-policy Weight permit node 10 
     if-match ip-prefix 99 
     apply preferred-value 106
    #
    route-policy Weight permit node 20
    [HW-R7-bgp] peer 55.1.1.1 route-policy Weight import  
选路原则1:华为PreferVal=思科weight:私有属性,只在本设备有意义,不更新给邻居
Local-preference(重要!)默认100
LOCAL_PREF属性通常用于影响本地AS内部出站流量的路径选择。当AS内部的BGP Speaker存在多条到达同一外部目的地的路径时,LOCAL_PREF就变得相当有用。
 
1.为本地AS选择一个最优的数据包的出口
2.选大的为最优,默认数值为100(华为设备LOCAL_PREF数值的范围是0-42949672953.设置时是针对接收路由的入方向(import)进行设置(本地优先策略只能用于入方向),该属性向本AS内所有的IBGP邻居传递,不能传递到下一个AS中,也不能传递给EBGP邻居
4.影响的是本地AS内所有路由器的选路,包括另一台边界路由器

干预内部的设备(也包括其他ASBR)选择哪一个ASBR去往其他AS,在IBGP内部去更新该属性

方式一:
    在R6上修改路由的本地优先级,达到影响AS内部选路的目的
    [R6-bgp]default local-preference 500
    [R7-bgp]dis bgp routing-table#可以在查看bgp路由数据库时,看到本地优先级的变化
    [R7-bgp]dis bgp routing-table 1.1.1.1#可以在查看详细信息时,看到本地优先级的变化;以及路由不被优选的理由:not preferred for Local_Pref
    
    C-R6(config-router)#bgp default local-preference 600
    
方式二:route-map/route-policy来修改特定路由的选路
    命中路由的工具:acl、前缀列表、团体属性列表、as-path列表
    
    route-policy R5 permit node 10 
     if-match ip-prefix 99 
     apply local-preference 105 
    #
    route-policy R5 permit node 20 
    [HW-R5-bgp]peer 10.1.15.1 route-policy R5 import 
    !
    route-policy R6 permit node 10 
     if-match ip-prefix 66 
     apply local-preference 106 
    #
    route-policy R6 permit node 20 
    #
    return
    [HW-R6-bgp]peer 22.1.1.1 route-policy R6 import 
    <HW-R7>display bgp routing-table 
    -------------------------------------
    思科:   
    C-R5# sh run | s route-map
     neighbor 10.1.15.1 route-map R5 in
    route-map R5 permit 10
     match ip address prefix-list 99
     set local-preference 105
    route-map R5 permit 20#记得配置允许其他路由
    !
    C-R6#sh run | s route-map R6
     neighbor 22.1.1.1 route-map R6 in
    route-map R6 permit 10
     match ip address prefix-list 66
     set local-preference 106
    route-map R6 permit 20
    C-R7#show ip bgp 
选路原则2:Local-preference(重要!)
As-path越短越优先,可以设置为忽略(重要!)

方式一:使用roure-policy精准控制路由
    [R5]ip ip-prefix AS-PATH permit 1.1.1.1 32

    [R5]route-policy AS-PATH permit node 10
    [R5-route-policy]if-match ip-prefix AS-PATH 
    [R5-route-policy]apply as-path 6666 additive 
    [R5]route-policy AS-PATH permit node 20

    [R5-bgp]peer 11.1.1.1 route-policy AS-PATH import
    <R7>dis bgp routing-table 1.1.1.1#路由不被优选的理由:not preferred for AS-Path

----------------------------------
    Cisco:
    C-R5(config)#ip prefix-list 11 permit 5.5.5.5/32
    C-R5(config)#ip prefix-list 11 permit 7.7.7.7/32
    C-R5#sh run | s route-map AS
     neighbor 10.1.15.1 route-map AS out
    route-map AS permit 10
     match ip address prefix-list 11
     set as-path prepend 200 2000
    route-map AS permit 20
    C-R1#show ip bgp 
-------------------------------------------------------------------------------
忽略选路原则:As-path越短越优先
[HW-R1-bgp]bestroute as-path-ignore #华为设置选路时,忽略AS-PATH这一因素的影响
R1(config-router)#bgp bestpath as-path ignore#该命令在思科设备中为隐藏命令:键盘键入?找不到,但实际可以配置,配置后在配置中可以看到
选路原则6:As-path越短越优先,可以设置为忽略(重要!)
选择MED较小的路由(MED:Multi-Exit-DISC)(重要!)
BGP通告了一条IGP路由,则会继承该IGP路由的cost,并将其设置为该BGP路由的MED
例如:通告本地接口,因为cost为0,所以MED为0;通告一条通过OSPF学习的路由,则MED值=OSPF的COST值
本地优先一般用来设置被AS内的BGP路由出口
而MED值一般是用来影响对端AS的选路(如果想影响本地AS的选路,使用本地优先值即可)


MED作为度量值指明最佳入口路径。MED属性相当于我们平常熟悉的COST值,取值范围0-4284967295,数值越小越优先,默认值为0。
 
1.为本地AS选择一个最优的数据包的入口
2.选小的为最优,默认数值为0
3.设置时是针对发送路由的出方向(export)进行设置(其实MED策略可以用于入方向或出方向),该属性向对端EBGP邻居传递,不能传递到下一个AS中
4.影响的是对端AS内所有路由器的选路,包括另一台边界路由器


[R1-bgp]default med 555#修改默认的MED值;模拟器上设置无效

实验:在AS100设置MED,影响AS200的选路
    [R1]ip ip-prefix MED permit 1.1.1.1 32
    [R1]route-policy MED permit node 10
    [R1-route-policy]if-match ip-prefix MED
    [R1-route-policy]apply cost 500#设置MED值500
    [R1-route-policy]route-policy MED permit node 20
    [R1-bgp]network 1.1.1.1 32 route-policy MED#network时设置MED值
    [R1-bgp]peer 55.1.1.1 route-policy MED export #针对邻居进行MED值设置

    <R7>dis bgp routing-table#查看BGP路由表及明细时,都可以看到MED值的变化
    <R7>dis bgp routing-table 1.1.1.1#路由不被优选的理由:not preferred for MED
---------------------
思科:
R1
ip prefix-list 13 seq 5 permit 1.1.1.0/30
ip prefix-list 13 seq 10 permit 3.3.3.3/32
ip prefix-list 24 seq 5 permit 2.2.2.2/32
ip prefix-list 24 seq 10 permit 4.4.4.4/32
!
route-map MED-R1 permit 10
 match ip address prefix-list 13
 set metric 1000
route-map MED-R1 permit 20
 match ip address prefix-list 24
 set metric 2000
route-map MED-R1 permit 30
!
neighbor 10.1.15.5 route-map MED-R1 out
C-R7#show ip bgp 
选路原则8:选择MED较小的路由(MED:Multi-Exit-DISC)(重要!)
BGP优先选择到BGP下一跳的IGP度量值最低的路径        
    当该条选路规则之前全部相同,可以配置负载分担,(注意: AS_Path必须一致,当负载分担时,后3条选路原则无效)
    命令bestroute igp-metric-ignore可忽略该选路规则(模拟器上没找到)

环境设置:当前几条原则都相同后,R7会默认选择R5去往AS100,因为R7R5之间为G口,ospf开销为1。
实验:手工设置该G口开销,使R7选路到R6
    [R7-GigabitEthernet0/0/1]ospf cost 49
    [R7]dis bgp routing-table
    [R7]dis bgp routing-table 2.2.2.2#路由不被优选的理由:not preferred for IGP cost
------------------------------------------------------------------------------------------
实验2:实现BGP负载均衡(注意: AS_Path必须一致,当负载分担时,后3条选路原则无效)
    [R7-bgp]maximum load-balancing ibgp 2#设置bgp负载均衡最多2条
    [R7-bgp]load-balancing as-path-ignore #可以设置忽略as-pth,而达到bgp负载均衡
    [R7-bgp]bestroute as-path-ignore #虽然忽略了as-path,但是不会负载均衡,还是会选出一条最优的;和上面的命令有冲突

    [R7]dis bgp routing-table 2.2.2.2#虽然已经负载均衡,但是查看bgp数据库明细时,只有1条路由最优
    [R7]dis ip routing-table 2.2.2.2#然而查看路由表时,实际已经负载均衡
    [R7]dis fib 2.2.2.2#查看转发表,也是有2个下一跳

    C-R7(config-router)#maximum-paths  ibgp
    #负载均衡后,思科查看BGP路由表时,负载均衡的路由会多出一个m的标记
选路原则10:IGP cost小的优先;BGP路由负载均衡
实验:将AS100改造为反射器环境。其中R1R2为RR,为其他设备反射路由。
在R3可以接受到2条1.1.1.1的路由,一条为R1发送的,另一条为R2反射的。优选R1的路由,并且查看详细的bgp路由信息时,可以看到不优选R2反射的路由是因为:not preferred for Cluster List
#在route-policy中,没有找到修改cluster list的方法


13. 比较对等体的IP地址,选择IP地址数值最小的路径。
AS200中的R7,在修改IGP开销后,去往AS100的1.1.1.1的优选下一跳为R5,理由:not preferred for router ID
修改R5的连接ip为88.1.1.1,比R6的连接IP大,此时优选去往R6,理由:not preferred for router ID
选路原则11:比较Cluster_list长度,短者优先
as-path filter与正则表达式
VRP平台正则与python的正则没什么不同
区别:"_"用来匹配一个符号,比如逗号,括号,空格等等
    没有%d%s等特殊符号
    
常用的正则表达式:^$    .*   _10_   ^10*    ^10_.    ^[0-9]+$

思科的正则还会多一个"\"


    [HW-R5]ip as-path-filter 1 deny ^$
    [HW-R5]ip as-path-filter 1 permit .*
    [HW-R5-bgp]peer 10.1.15.1 as-path-filter 1 export 
    <HW-R5>display  bgp routing-table peer 10.1.15.1 advertised-routes 
    <HW-R5>display bgp paths ^$ 
---------------------------------
    Cisco:
    C-R1(config)#ip as-path access-list 1 permit ^200$
    route-map Reg permit 10
     match as-path 1
     set origin incomplete
    route-map Reg permit 20
    C-R1(config-router)#neighbor 10.1.15.5 route-map Reg in 
    C-R1#show ip bgp 

    C-R1#show ip bgp regexp ^200$
as-path filter与正则表达式

四.反射器和联盟

BGP是怎样防止环路的:
    1. EBGP:通过AS-PATH属性,丢弃从EBGP对等体接收到的包含自身AS号的任何更新信息。
    2. IBGP:BGP路由器不会将从IBGP对等体接收到的更新信息传递给其他IBGP对等体。



IBGP防止环路机制带来的问题:为了保证更新信息可以到达所有IBGP对等体,为了防止路由黑洞
解决方案:
    1. IBGP路由器与IBGP路由器之间要保证会话的全互联,从而又带来IBGP会话数n(n-1)/2的问题(邻居过多、没有必要的流量、排错困难)
    2. 路由反射:降低对指定路由器IBGP路由通告机制的限制,允许将从IBGP对等体接收到的更新信息传递给某些IBGP对等体。
    3. 联盟:将大的AS划分为若干个小的AS,小AS之间建立EBGP邻居关系。
IBGP防环机制及产生的问题
RR中的3种角色:1)RR 2)RR的客户端 3)非客户端             4)EBGP邻居


对等体之间的关系:
    1. 客户机只需维护与RR之间的IBGP会话
    2. RR与RR之间需要建立IBGP的全互联(或者互指客户端)(思琦文档不建议互指客户端)
    3. 非客户机与非客户机之间需要建立IBGP全互联
    4. RR与非客户机需要建立IBGP全互联
    
    5. 客户机之间无需建立邻居关系
    

AS-PATH的四种类型:
    1. AS_SET
    2. AS_SEQUENCE
    3. AS_CONFED_SEQUENCE
    4. AS_CONFED_SET


RR可以是网络边缘设备,也可以是网络中心设备
这是2种设计理念

只有RR路由器才知道自己是RR,谁是客户端,谁是非客户端
作为客户端和非客户端,其实对路由器本身是无感知的


-----------------------------配置----------------------------------------------
配置RR,需求:R1和R2成为RR,其他IBGP设备是RR的客户端,R1和R2构建普通的iBGP邻居

    R3R4作为客户端,仅需和RR建立IBGP邻居
    R1R2作为RR,指定R3R4为客户端,并建立IBGP邻居
    [R1-bgp]peer 33.1.1.1 reflect-client #仅需要在RR上配置,所以客户机并不清楚自己是否为客户机
    [R1-bgp]peer 44.1.1.1 reflect-client
    [R2-bgp]peer 33.1.1.1 reflect-client 
    [R2-bgp]peer 44.1.1.1 reflect-client

-------------------------------------
Cisco配置:
    R1&R2:
     neighbor 33.1.1.1 route-reflector-client
     neighbor 44.1.1.1 route-reflector-client
    C-R3#show ip bgp summary 
    
RR(路由反射器)及配置
-----------------------------RR宣告原则--------------------------------
RR反射器的更新规则1:从非客户机收到的路由更新给客户机和EBGP对等体。
RR反射器的更新规则2:从客户机得到的路由会更新给所有的邻居(客户机、非客户机、EBGP)
RR反射器的更新规则3:从EBGP对等体学到的路由,发布给所有的非客户机和客户机、EBGP邻居。

规则总结:“非非不传”:从非客户端接收的BGP路由,RR不会传递给非客户端邻居
    因为RR和非客户端之间就是普通的IBGP邻居,遵循从IBGP邻居学习的路由不会传递给IBGP邻居



-----------------------------RR防环机制--------------------------------
路由反射簇:当一个AS内存在多台RR时为客户机提供冗余时,RR之间的路由更新很有可能形成环路,为防止该现象,引入了cluster的概念。
通过四字节的cluster_ID来标识cluster,通常使用loopback地址作为cluster_ID,一个cluster里可以包括一个或多个RR;一个客户机可以同时属于多个cluster


路由反射防环机制:originator_ID(可选非过渡属性)
    1. Originator_ID用于防止在反射器和客户机/非客户机之间产生环路
    2. Originator_ID属性长4字节,可选非过渡属性,属性类型为9,是由路由反射器RR产生的,携带了本地AS内部路由发起者的router-id。
    3. 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入到这条路由,标识这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR不会创建新的Originator_ID。当其他BGP路由器接收到这条路由的时候,将比较Originator_ID和本地的Router-id,如果两个ID相同,则忽略掉这条路由,不做处理。


路由反射防环机制:cluster_list(可选非过渡属性)
    1. cluster_list属性用于防止AS内部的环路
    2. cluster_list属性是可选非过渡属性,属性类型编码为10
    3. cluster_list由一系列的cluster_ID组成,描述了一条路由经过反射器的路径,cluster_LIST由路由反射器产生。当RR在它的客户机与非客户机之间反射路由时,RR会把本地的cluster_ID添加到cluster_list前面,如果cluster_list为空,就创建一个。当RR接收到一条更新路由时,RR会检查cluster_list,如果cluster_list中已经有本地cluster_ID,就丢弃该路由,如果没有本地cluster-id,将其加入cluster-list,然后反射该更新路由。

Cluster_List只被RR用来检测路由环路,客户机和非客户机不会检测该属性。
Cluster_List只在AS内部传播,从EBGP对等体收到的路由的Cluster_List属性将被丢弃(originator_id属性也被丢弃)。

    [R1-bgp]reflector cluster-id 11.1.1.1 #配置簇ID
    R4(config-router)# bgp cluster-id 22.1.1.1#簇ID可以配置,但一般没有必要
RR宣告原则及RR防环机制
联盟通过把大的AS分成多个更小的自治系统来解决IBGP全互连的问题,这些自治系统叫做成员自治系统或子自治系统。成员自治系统之间使用EBGP会话,因此它们不需要全互连。然而,在每一个成员AS中,仍然要求IBGP全互连。

联盟中的EBGP会话和常规的EBGP会话有所不同。为了区分它们,这种类型的EBGP会话叫做联盟内的EBGP会话。与普通EBGP会话区别就发生在当通过会话传播路由的时候,联盟内的EBGP会话在一方面遵循路由通告的部分IBGP规则,在另一方面又遵循路由通告的部分EBGP规则。如:在发送更新的时候,NEXP_HOP、MED和LOCAL_PREF被保留,而AS-PATH被修改。

在联邦中下一跳属性和MED都会继承

---------------------------------------------------------------------
实验:AS200内使用联邦,联邦AS为200
    R5属于子AS2005
    R6R7属于子AS2067
    
R5配置:
bgp 2005
 confederation id 200 #联邦AS为200
 confederation peer-as 2067 2071 2088#若需要建立联邦内的EBGP邻居关系,则需要指明AS为联邦内AS;可以同时制定多个联邦内AS;
 peer 11.1.1.1 as-number 100 
 peer 11.1.1.1 ebgp-max-hop 255 
 peer 11.1.1.1 connect-interface LoopBack0
 peer 77.1.1.1 as-number 2067 
 peer 77.1.1.1 ebgp-max-hop 2 
 peer 77.1.1.1 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  network 5.5.5.5 255.255.255.255 
  peer 11.1.1.1 enable
  peer 77.1.1.1 enable
  peer 77.1.1.1 next-hop-local 
R6配置:
bgp 2067
 confederation id 200
 #confederation peer-as 2005#因为R6不需要配置联邦内的EBGP邻居,所以这条配置可以不配!
 peer 77.1.1.1 as-number 2067 
 peer 77.1.1.1 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  peer 77.1.1.1 enable
R7配置:
bgp 2067
 confederation id 200
 confederation peer-as 2005
 peer 55.1.1.1 as-number 2005 
 peer 55.1.1.1 ebgp-max-hop 2 
 peer 55.1.1.1 connect-interface LoopBack0
 peer 66.1.1.1 as-number 2067 
 peer 66.1.1.1 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  peer 55.1.1.1 enable
  peer 66.1.1.1 enable


========================================
Cisco
C-R5#sh run | s bgp
router bgp 2005
 bgp log-neighbor-changes
 bgp confederation identifier 200
 bgp confederation peers 2067 
 network 5.5.5.5 mask 255.255.255.255
 neighbor 10.1.15.1 remote-as 100
 neighbor 10.1.15.1 password qytang
 neighbor 77.1.1.1 remote-as 2067
 neighbor 77.1.1.1 ebgp-multihop 2
 neighbor 77.1.1.1 update-source Loopback0
 neighbor 77.1.1.1 next-hop-self
C-R6#sh run | s bgp
router bgp 2067
 bgp log-neighbor-changes
 bgp confederation identifier 200
 network 6.6.6.6 mask 255.255.255.255
 neighbor 22.1.1.1 remote-as 100
 neighbor 22.1.1.1 ebgp-multihop 255
 neighbor 22.1.1.1 update-source Loopback0
 neighbor 77.1.1.1 remote-as 2067
 neighbor 77.1.1.1 update-source Loopback0
 neighbor 77.1.1.1 next-hop-self
C-R7#sh run | s bgp
router bgp 2067
 bgp log-neighbor-changes
 bgp confederation identifier 200
 bgp confederation peers 2005 
 network 7.7.7.7 mask 255.255.255.255
 neighbor 55.1.1.1 remote-as 2005
 neighbor 55.1.1.1 ebgp-multihop 255
 neighbor 55.1.1.1 update-source Loopback0
 neighbor 66.1.1.1 remote-as 2067
 neighbor 66.1.1.1 update-source Loopback0
联盟及配置联盟
联盟与反射的比较:
1. 两种方法都支持多层次来进一步增强扩展性。路由反射器支持多级路由反射结构。联盟允许在成员AS内使用路由反射。
2. 两者都提供路由选择策略控制,联盟可以提供更大的灵活性。
3. 路由反射的迁移复杂性非常低,因为总体网络配置几乎很少发生改变。然而,从IBGP到联盟的迁移需要对配置和网络架构做很大的改变。
4. 联盟内的所有路由器都必须支持联盟配置能力,因为所有路由器需要支持联盟AS-PATH属性。在路由反射的架构中,只需要反射器支持路由反射能力。然而,在新的分簇设计中,客户机也必须支持反射器属性。
5. 路由反射在AS内需要单一的IGP,而联盟支持单一或分开的IGP。这可能是联盟对路由反射中最明显的优势。如果IGP达到了其扩展性限制,或因为范围太大而难于处理管理任务,那么可以使用联盟来减小IGP路由的大小。

选择部署路由反射的运营商更多,因为路由反射更成熟
联盟与反射的比较

五.其他

华为BGP常用命令

[HW-R6]ip route-static 22.1.1.1 32 s1/0/0 #串行链路配置静态路由可以配置出接口

[HW-R5-bgp]display bgp peer               #查看BGP邻居
[HW-R4]dis bgp routing-table              #查看BGP路由数据库
[HW-R4]display ip routing-table protocol bgp    #查看路由表(筛选:bgp)
<R1>dis fib 44.1.1.1
<R1>dis fib 44.1.1.1 verbose#华为设备查看FIB表
[Huawei]display tcp status                #查看tcp连接状态
[R4-bgp]peer 11.1.1.1 ignore                           #关闭BGP邻居

<R1>display bgp routing-table peer 44.1.1.1 advertised-routes #查看向邻居通告的路由
[R6]display ip ip-prefix 
<R3>display bgp group 
<R1>dis bgp routing-table community#查看携带团体属性的bgp路由数据库

[Huawei]display ip int brief              #这个命令考试时应该很重要。。。
<R4>refresh bgp all import                #软清,不重置BGP邻居,但发送route-refresh报文进行bgp路由重置;华为不支持硬清
<R4>refresh bgp all export                #软清,不重置BGP邻居,但发送route-refresh报文进行bgp路由重置
<Huawei>terminal debugging 
<Huawei>debugging bgp packet #华为设备开启调试则需要两条命令


--------------------------------------------------------------------------------------------------

思科BGP常用命令
R4#show ip bgp     #查看BGP路由数据库
route-views>show ip bgp summary //查看ipv4的BGP邻居及简要信息
route-views>show bgp ipv6 unicast summary //查看ipv6的BGP邻居及简要信息
R4#show ip cef 7.7.7.7 detail   #思科设备查看FIB表
C-R1#show ip bgp neighbors 33.1.1.1 advertised-routes #查看向邻居通告的路由

C-R5(config-if)#do show run | s bgp   #查看BGP的配置,但是现网设备上都用不了嘛。。。

C-R1#show ip bgp peer-group  #重置BGP邻居关系
Cisco#show ip bgp regexp 4134$#通过正则,对BGP路由进行筛选


C-R1#ping 5.5.5.5 source lo1
C-R1#show tcp brief     #查看TCP连接
C-R1#clear ip bgp 22.1.1.1  #重置BGP邻居关系
C-R1#clear ip bgp * soft    #不重置BGP邻居关系,但发送route-refresh报文重置BGP路由数据库
C-R1#clear ip bgp * soft in  #主动发送refresh报文


C-R5(config-if)#do ping 5.5.5.5 source lo1
C-R1#debug ip bgp updates #思科设备进行BGP调试
R1(config-router)#redistribute bgp 100 subnet#思科设备做路由引入时,要加subnets


Cisco:
router bgp 100
 bgp log-neighbor-changes
 network 1.1.1.1 mask 255.255.255.255       #network宣告路由
 neighbor 10.1.15.5 remote-as 200           #使用直连地址配置EBGP邻居
 neighbor 44.1.1.1 remote-as 100            #使用环回口配置IBGP邻居
 neighbor 44.1.1.1 update-source Loopback0  #指定BGP的协议源地址为Loopback0
 neighbor 44.1.1.1 next-hop-self            #在ASBR针对IBGP邻居,告知其下一跳地址改为ASBR的更新源地址
 
R4#sh run | s bgp
router bgp 100
 bgp log-neighbor-changes
 neighbor 11.1.1.1 remote-as 100
 neighbor 11.1.1.1 update-source Loopback0
 
 
 
 
 
R4#show ip bgp         
BGP table version is 3, local router ID is 44.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>i 1.1.1.1/32       11.1.1.1                 0    100      0 i
 *>i 5.5.5.5/32       11.1.1.1                 0    100      0 200 i
华为思科常用BGP命令
BGP全互联会导致配置繁杂,使用对等体组,可以适当减少配置工作量
实验:在AS100中配置BGP全互联,其中R3使用对等体组


华为使用对等体组:
1.创建对等体组,并指定了对等体组类型
[R3-bgp]group GROUP internal 
2.针对对等体组使用各种策略or过滤
[R3-bgp]peer GROUP connect-interface loo 0 
[R3-bgp]peer GROUP XXXXXXXXXX
[R3-bgp]peer GROUP listen-only //和邻居建立会话时,本端为TCP连接被动端  
4.将BGP邻居加入到对等体组中
[R3-bgp]peer 11.1.1.1 group GROUP
[R3-bgp]peer 22.1.1.1 group GROUP
[R3-bgp]peer 44.1.1.1 group GROUP

-----------------------------------------------------------------------

Cisco使用对等体组:
1.创建一个peer group的模版
C-R3(config-router)#neighbor QYT peer-group 
2.填充模版(命令)
 neighbor QYT remote-as 100#华为只是把这条命令省了而已,其实都一样
 neighbor QYT update-source Loopback0
 neighbor QYT prefix-list 3 out
3.针对邻居调用模版
C-R3(config-router)#neighbor 11.1.1.1 peer-group QYT 
C-R3(config-router)#neighbor 22.1.1.1 peer-group QYT  
C-R3(config-router)#neighbor 44.1.1.1 peer-group QYT



----------------------------------------------------------------------
思科的动态邻居(华为不支持动态邻居)
[C-R3(config-router)#bgp listen range 0.0.0.0/0 peer-group QYT //动态邻居
C-R3#show tcp brief #配置了动态邻居,思科默认为TCP连接的被动端
TCB       Local Address               Foreign Address             (state)
C5197DA0  33.1.1.1.179               22.1.1.1.49013              ESTAB
C5196130  33.1.1.1.179               11.1.1.1.54328              ESTAB
C2791190  33.1.1.1.179               44.1.1.1.48349              ESTAB //对端主动发起TCP的会话(配置了group之后。。。)
C-R3(config-router)#neighbor QYT transport connection-mode active #配置主动发起TCP连接
C-R3#show tcp brief 
TCB       Local Address               Foreign Address             (state)
C424AAA8  33.1.1.1.38395             11.1.1.1.179                ESTAB
C424B188  33.1.1.1.55690             22.1.1.1.179                ESTAB 
配置了动态邻居后,邻居ip前会多个*
对等体组(peer group)和思科的动态邻居
AS欺骗
思科配置了AS欺骗后,在as-path中显示为增加了欺骗的AS
华为配置了AS欺骗后,则在as-path中使用欺骗的AS覆盖了自身的AS
配置R1欺骗EBGP邻居R5
[R1-bgp]peer 55.1.1.1 fake-as 6553512
华为某些设备的命令就是peer 1.1.1.1 loca-as xxxx
R5则需要更新配置
[R5-bgp]undo peer 11.1.1.1
[R5-bgp]peer 11.1.1.1 as-number 6553512
[R5-bgp]peer 11.1.1.1 ebgp-max-hop 2
[R5-bgp]peer 11.1.1.1 connect-interface loo 0

---------------------------------
思科配置AS欺骗
C-R1(config-router)#neighbor 10.1.15.5 local-as 655351 #配置AS欺骗,

AS欺骗的使用场景:
    运营商B被运营商A收购,所以有了AS合并的需求,一般运营商B的原AS取消,使用运营商A的AS号。
    但是实际应用时,由于运营商B有众多的BGP对等体,且不希望修改配置。
    此时原运营商B的网络可以配置AS欺骗
AS欺骗
4字节的As号码

华为设备默认将4字节的AS号显示为点分形式(即x.y格式)
可以通过配置进行显示切换
[R5]as-notation plain #华为,注意:配置在全局

R1(config-router)#bgp asnotation dot#思科,配置在BGP路由协议视图中
4字节的As号码
 
在R5身后增加一个私有AS64512,并通告一条路由9.9.9.9。
在R1上查看关于9.9.9.9的bgp路由,as-path为 200 64512

R5配置移除私有AS
    [R5-bgp]peer 11.1.1.1 public-as-only 
    重新在R1查看关于9.9.9.9的bgp路由,as-path更新为 200 
 
 
思科:
C-R5(config-router)#neighbor 10.1.1.10 remove-private-as all  //移除所有私有as
C-R5(config-router)#neighbor 10.1.1.10 remove-private-as all replace-as //移除所有私有as,然后用R5的As号去替换私有as

注意:以下两种情况不会移除私有AS号
1.路由的as-path属性中含有对端AS号。这种情况下删除私有AS号,可能会造成路由环路
2.as-path列表同时含有公有AS和私有AS号。例如as-path:64512 200,这种情况是不会删除64512的,因为该路由已经经过了公网;如果删除私有as,可能会造成转发错误
    as-path:200 64512,这种情况是会删除64512的。
    
移除私有AS
BGP的认证:仅仅支持MD5方式的认证,自身不支持认证,而是借助于TCP会话的选项位
[HW-R1-bgp]peer 10.1.15.5 password simple qytang
[HW-R5-bgp]peer 10.1.15.1 password simple qytang
BGP的认证
默认路由方式1:
    C-R7(config)# ip route 0.0.0.0 0.0.0.0 null 0
    C-R7(config)#router bgp 200
    C-R7(config-router)#network 0.0.0.0
    !
    [HW-R7]ip route-static 0.0.0.0 0 NULL 0
    [HW-R7]bgp 200
    [HW-R7-bgp]network 0.0.0.0
    <HW-R3>display ip routing-table protocol bgp 

默认路由方式2:
C-R7(config-router)#neighbor 55.1.1.1 default-originate //针对邻居来产生默认路由,不需要其他形式的默认路由存在
[HW-R7-bgp]peer 55.1.1.1 default-route-advertise 
BGP默认路由
多点接入网络的下一跳行为(此场景一般出现在国际出口中)
    1.开启交换机
    2.R2R6为直连EBGP邻居,R5R6为IBGP邻居
    3.R2通告自身的业务网段2.2.2.2
    现象:R6将会把2.2.2.2通告给IBGP邻居,即R5;
    因为R6未设置下一跳自我,R5通往2.2.2.2的下一跳为R2R6 EBGP邻居关系的源地址
    (现象看起来有点像ICMP重定向。。。但其实通过BGP学习的路由就是不修改下一跳的啊。。。)
    所以这种情况下,是不需要配置下一跳自我!!!
多点接入网络的下一跳行为(此场景一般出现在国际出口中)
在IPv6协议栈的体系中,IGP协议的源地址/路由表的下一跳地址都是链路本地地址(fe80::/10);BGP协议在思科上可以使用链路本地地址/全局单播地址作为更新源,华为设备可以全局单播地址作为更新源

配置基础环境:使能设备ipv6功能,并配置ipv6 IGP路由协议
    [R1]ipv6 #使能路由器ipv6
    ospfv3 10#开启ospfv3
     router-id 1.1.1.1#配置router-id
    #
    interface GigabitEthernet0/0/1
     ipv6 enable #使能端口ipv6
     ipv6 address 2013::1/64 #配置ipv6地址
     ospfv3 10 area 0.0.0.0 #宣告进ospfv3中
     
     --------其他配置相似,略过----------

    [R3]ping ipv6 -a 2011::3 2011:1 #测试R1R3环回口互通
配置ipv6 BGP
    R1R3配置为AS100,R5配置为AS200
    [R1-bgp]dis this 
    bgp 100
     router-id 1.1.1.1#配置router-id,仅支持ipv4形式
     peer 2011::3 as-number 100 #指定ipv6邻居
     peer 2011::3 connect-interface LoopBack0#指定更新源
     peer 2015::5 as-number 200 
     #
     ipv4-family unicast
      undo synchronization
     #
     ipv6-family unicast
      undo synchronization
      network 2011::111 128 #network ipv6地址
      peer 2011::3 enable #注意要主动使能ipv6邻居
      peer 2015::5 enable
    --------其他配置相似,略过----------
验证ipv6 BGP:
[R1]dis bgp ipv6 peer #查看BGP ipv6邻居
[R1]dis bgp ipv6 routing-table #查看BGP ipv6路由数据库


--------------------------------
    思科

    思科交换机(真机)sdm prefer IPv6相关,然后保存重启

    C-R7(config)#ipv6 unicast-routing //思科路由器设备开启IPv6路由功能
    C-R7(config)#int lo0
    C-R7(config-if)#ipv6 address 2077::7/128
    C-R7(config-if)#ipv6 ospf 110 area 0
    interface Ethernet0/1
     ip address 10.1.57.7 255.255.255.0
     ip ospf 110 area 0
     ipv6 enable
     ipv6 ospf 110 area 0
    C-R7#show ipv6 ospf neighbor 
    C-R7#ping 2055::5 source lo0
    ---------------以上为基础环境配置--------------
    IBGP
    C-R7(config)#router bgp 200
    C-R7(config-router)#neighbor 2055::5 remote-as 200  
    C-R7(config-router)#neighbor 2055::5 update-source lo0
    C-R7(config-router)#address-family ipv6
    C-R7(config-router)#address-family ipv6               
    C-R7(config-router-af)#neighbor 2055::5 activate 
    C-R7(config-router-af)#network 2777::7/128
    C-R5(config)#router bgp 200
    C-R5(config-router)#neighbor 2077::7 remote-as 200           
    C-R5(config-router)#neighbor 2077::7 update-source lo0
    C-R5(config-router)#address-family ipv6             
    C-R5(config-router-af)#neighbor 2077::7 activate
    C-R5#show bgp ipv6 unicast summary 
    C-R5#show bgp ipv6 unicast      




IPv6:
R1:
 address-family ipv6
  network 2011::1/128
  neighbor 10.1.15.5 activate
R5:
 address-family ipv6
  neighbor 10.1.15.1 activate//这是一种过渡技术
  neighbor 2077::7 activate
C-R5#show bgp ipv6 unicast         

下一跳不可达导致路由不会优化
在互联接口实施全局单播地址,然后通过route-map去修改下一跳
C-R1(config-if)#ipv6 address 2015::1/64
C-R1(config)#route-map Next-hop
C-R1(config-route-map)#set ipv6 next-hop 2015::1
C-R1(config)#router bgp 100
C-R1(config-router)#address-family ipv6
C-R1(config-router-af)#neighbor 10.1.15.5 route-map Next-hop out
C-R5# show bgp ipv6 unicast 
C-R1#ping 2777::7 source lo1
--------------------------------------
HW:使用IPV6链路本地地址建立bgp邻居
R5
bgp 200
 peer FE80::2E0:FCFF:FE7D:292D as-number 100 
 peer FE80::2E0:FCFF:FE7D:292D connect-interface GigabitEthernet0/0/0 //link-local的路由范围仅仅在链路两端,所以需要使用连接接口
 #
 ipv6-family unicast
  undo synchronization
  peer 2077::7 enable
  peer 2077::7 next-hop-local 
  peer FE80::2E0:FCFF:FE7D:292D enable
R1
bgp 100
 router-id 1.1.1.1
 peer FE80::2E0:FCFF:FE08:493E as-number 200 
 peer FE80::2E0:FCFF:FE08:493E connect-interface GigabitEthernet0/0/0
 #
 ipv6-family unicast
  undo synchronization
  network 2011::1 128 
  peer FE80::2E0:FCFF:FE08:493E enable
[HW-R1]display ipv6 routing-table protocol bgp
BGP支持ipv6单播
route-views.oregon-ix.net #可以直接用crt telnet这个地址,这台路由器统计全球的路由信息
http://bgp.potaroo.net/    #bgp信息更新网站
https://blog.51cto.com/enderjoe/2175393

华数as: https://bgp.he.net/AS24139#_asinfo
这个网址则直接查看你所在的as: https://bgp.he.net/     



1台设备只能起一个bgp进程
bgp只能单播建立邻居
Bgp network通告路由时,必须是路由表中已有的,且是完全一致的路由



这利用了路由更迭or路由迭代
只有2种路由协议下一跳不是直连的
1.静态------可以配置非直连
2.BGP-------下一跳为bgp邻居IP,也是BGP邻居的源地址

动态路由协议一般都使用组播,同时TTL=1
这一点BGP不一样,BGP是单播






在广播网络中,静态路由使用指定出接口的方式,思科还是会发送报文,但是华为就不会了
因为华为设备默认没有开启ARP代理,代理ARP





建议养成习惯,带源ping

一个比较好的习惯:
1)命令验证-----------查看配置
2)状态验证---------- 使用命令查看状态
3)数据验证


5元组:源IP、目的IP、源端口、目的端口、协议


    
 
建议:排查BGP的故障,从产生路由的源头查起






在if-match中,如果是同一行内的,或关系
在多个if-match中,则是和关系
acl、前缀列表、route-policy都是默认拒绝




BGP邻居的密码是qyta?g
C-R2(config-router)#neighbor 66.1.1.1 password qyta?g
C-R6(config-router)neighbor 22.1.1.1 password qyta?g //ctrl+v然后shift+?
HW
[HW-R2-bgp]peer 66.1.1.1 password simple qyta?g
[HW-R6-bgp]peer 22.1.1.1 password simple qyta?g //?这个字符用CTRL+T键入







华为设备上命中接口的方式有问题,即使dis route-policy查看是有命中的,还是不行。。。
所以还是要acl

所谓路由清洗,就是在某个运行bgp的路由器上  设置了指向用户IP的32位静态路由,指向黑洞。。。使用户免受攻击。。。

 

posted @ 2019-09-01 11:06  雲淡風輕333  阅读(910)  评论(0编辑  收藏  举报