bgp复习(ipv4)

一,bgp在网络里的所发挥的作用: EGP 协议中,引入了 AS Autonomous System ,自治系统)的概念。AS是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合。AS 的内部使用 IGP 来计算和发现路由,同一个 AS 内部的路由器之间是相互信任的,因此 IGP 的路由计算和信息泛洪完全处于开放状态,人工干预很少。不同 AS 之间的连接需求推动了外部网关协议的发展, BGP 作为一种外部网关协议,用于在 AS 之间进行和优路由控制选。

二,AS号:运行BGP路由协议必须要有一个AS号,且每台路由器有且只能有一个AS号,AS号不是自己想用什么就配什么,而是由国际组织IANA统一分配的。

1,公有AS号:1-64511(一定要有IANA来进行分配)

2,私有AS号:64512~65534(随便去使用的)

3目前使用的1~65535都叫做2字节AS号,因为2字节的AS号不够用了(才6万多个),因此后来又推出的4字节AS号(上亿),在长度为32bit (4字节AS) 的AS号表示方式中: 4200000000-4294967294为私有AS号。4字节的AS号需要在open报文中定义新的扩展能力属性。

4,4字节的AS号的范围是怎么来的4200000000-4294967294:4bit--32位---每一位都有0/1两种情况--2的32次方---4200000000-4294967294

三,bgp路由的特性

1,BGP是属于外部网关路由协议,路径矢量路由协议(距离矢量路由协议的升级版,不同于rip)。

2,BGP基于TCP的目的端口179工作的,是工作在应用层的。 

3,BGP建立邻居是发的单播(基于tcp的三次握手来进行连接的),可不像ospf只要是宣告在ospf进程里的接口,都会默认的加入对应的组播组。

4,BGP要手动的指定邻居,可不向rip或者isis,ospf等,可以自动的发现邻居。

5,BGP的互通要先基于IGP的底层互通,因为bgp的互通需要tcp的三次握手。

6,每个路由器里面只可有一个bgp as号,同一个运营商里面当然用的是相同的AS号啊。

7,在一个bgp进程下可以指定多个bgp的邻居

8,运行在不同 AS 之间的 BGP 路由器建立的邻居关系为 EBGP External BGP )邻居关系。

9,运行在相同AS内的BGP路由器建立的邻居关系为IBGPInternal BGP)邻居关系。

10,IBGP邻居建立时通常使用环回接口作为收发报文的接口地址。

11,EBGP邻居建立时通常使用直连接口作为收发报文的接口地址

12,ibgp邻居只能传递一跳

四,bgp建立邻居的基本配置(注意只是基本配置)

(配置前提:ibgp使用ospf到达互通,ebgp不配置任何路由协议,ar1,ar3,ar4,都配置有loop接口)

1,ar1路由器上的配置

[ar1]bgp 123

[ar1-bgp]peer 23.1.1.2 as-number 123 //有三个作用:1、指定了建立邻居发送报文的目的地址(相对于我ar1路由器)2、指定了该邻居所属的AS号3、指定了从该邻居接收报文的源地址(相对于ar3路由器)。

2,ar3路由器上的配置

[ar3]bgp 123

[ar3-bgp]peer 12.1.1.1 as-number 123

3,[ar3]dis bgp peer //查看bgp邻居建立情况(关于表的详解在后面会有提到)

五,特殊情况下的bgp邻居建立时的问题

1,如果邻居和自己的AS号相同时的一些问题:那么建立的邻居叫做IBGP邻居,IBGP邻居建立时通常使用环回接口的ip地址作为收发报文的接口地址,IBGP建立邻居时报文中TTL默认为255(报文可抓)所以可以跨域多台设备建立IBGP的邻居。

配置演示:

!-----[ar1-LoopBack12]ip address 1.1.1.1 32

[ar1]bgp 123

[ar1-bgp]peer 3.3.3.3 as-number 123

@----[ar3-LoopBack12]ip address 3.3.3.3 32

[ar3]bgp 123

[ar3-bgp]peer 1.1.1.1 as-number 123

#----dis bgp peer 

                             //没有任何邻居的建立,是因为不是指定邻居接口的ip地址发送的报文,而是ar1里其物理接口g0/0/0接口发出的报文

¥----报文解释:发送一次tcp的请求,就回应一次tcp的重置。其报文的发出接口为12.1.1.1 ,回应该报文的接口为3.3.3.3.

&---针对上面的问题仍要配置一条命令:

[ar1-bgp]peer 3.3.3.3 connect-interface  LoopBack  12 //作用为指定给该邻居送报文的源接口。而不是流量报文的出接口。

[ar3-bgp]peer 1.1.1.1 connect-interface  LoopBack  12//作用为指定给该邻居送报文的源接口。而不是流量报文的出接口。

@----最后在检测bgp的邻居建立的结果

#----抓包结果:是我们手动配置的发送报文的源接口。(注意报文的发出接口的ip地址)  (有待解决:tcp的三次握手的报文复习)

2,如果邻居和自己的AS号不相同时的一些问题:那么立的邻居叫做EBGP邻居,EBGP邻居建立时通常使用直连接口的ip地址作为收发报文的接口地址EBGP建立邻居时报文中TTL默认为1(报文可抓)因此邻居和自己的AS号不相同时推荐使用直连接口建立EBGP的邻居(解释普通的bgp建立方式)

!---[ar3]bgp 123  

[ar3-bgp]peer 34.1.1.2 as-number  4

@--- [ar4]bgp 4 

[ar4-bgp]peer 34.1.1.1 as-number  123

#----最后在检测结果

%----当在ebgp的情况下实际ttl值不为1时,但默认一直都是认为ttl为1(所以要使用命令修改):(情况0:双方指定的peer都是对方的直连接口的情况,最正常的情况。)

1    情况一:双方指定的peer分别是对方的loop接口和直连接口[ar3-bgp]peer 34.1.1.2 ebgp-max-hop 255 //配置ebgp邻居,本设备AS内可以跳多跳设备到达其他的AS内(报文可证明)对应的ttl值只修改本地是loop接口部分。(这个两边都要宣告哦)

2   情况二:双方指定的peer都是对方的loop接口,[ar3-bgp]peer 4.4.4.4 ebgp-max-hop 255 ;[ar4-bgp]peer 3.3.3.3 ebgp-max-hop 255。对应的ttl值要在两条路由器上都配置。

3  情况12都是要配置的吧(以上是对的)

3,关于bgp邻居建立时修改下一跳的问题(从结论引出现象)

!----为什么bgp的下一跳路由会有问题:bgp是不会计算路由的,只会搬运(照抄)路由,唯一知道的信息是本地指定对方的peerip地址。而ospf是可以基于lsa计算出下一跳和相关的一些路由信息的。

 

 

前提:已经在ar5配置 

 

[ar5-bgp]network 200.1.1.1 255.255.255.255  //将 200.1.1.1  32宣告到bgp路由里面

[ar5-bgp]dis bgp routing-table

 

     Network                 NextHop    MED   LocPrf     PrefVal Path/Ogn

 

*> 200.1.1.1/32           0.0.0.0                                     0 0 i

 

----对于路由器始发的路由,传递给IBGP邻居或者EBGP邻居时,都会自动修改下一跳的ip地址为peer邻居接口的ip地址 (以ebgp来举例)

情景:ar4-----ar5,ar4和ar5都是基于直连接口建立的bgp邻居

 

[ar5-bgp]dis th
bgp 5
peer 45.1.1.4 as-number 234

network 200.1.1.1 255.255.255.255

 

 

[ar4-bgp]dis th  //ar4的bgp234下的配置
bgp 234
peer 23.1.1.2 as-number 234
peer 45.1.1.5 as-number 5  //下一跳指定ar5的直连接口的ip地址
peer 47.1.1.2 as-number 123  

[ar4-bgp]dis bgp routing-table  //下一跳为peer所指的ip地址

 特殊情况:若是ar4指的peer是ar5的loop接口的情况

[ar4]ip route-static 5.5.5.5 255.255.255.255 45.1.1.5  //ar4的全局下配置静态,打通tcp三次握手的底层。(注意:只是不可运行igp而以,静态不是igp路由)

[ar4-bgp]dis th
  bgp 234
  peer 5.5.5.5 as-number 5  //下一跳指定ar5的loop接口的ip地址
  peer 5.5.5.5 ebgp-max-hop 255  //到达5.5.5.5的tti大于1,将其tti值改大。默认ttl=255
  peer 23.1.1.2 as-number 234 
  peer 47.1.1.2 as-number 12

[ar5-bgp]dis th
  bgp 5
  peer 45.1.1.4 as-number 234  //下一跳指定ar4的直连接口的ip地址
  peer 45.1.1.4 ebgp-max-hop 255  //到达45.1.1.4的tti大于1,将其tti值改大。默认ttl=255
  peer 45.1.1.4 connect-interface LoopBack23  //指定报文的发送接口为loop23接口。

  network 200.1.1.1 255.255.255.255 //宣告

[ar4-bgp]dis bgp  routing-table  //其下一跳为 5.5.5.5,而不是ar5的直连接口,符合都会自动修改下一跳的ip地址为peer邻居接口的ip地址 。

@----从IBGP邻居收到的路由,在转发给EBGP邻居时会修改下一跳。

情景ar4 ---ar2 -----ar1,ar4,ar2,ar1都是基于直连接口建立的bgp邻居,在ar4引入192.168.1.0 到bgp路由里面。 

[ar4] ip route-static 192.168.1.0 255.255.255.0 NULL0 //配置静态指向 NULL0接口

[ar4-bgp]dis th
  bgp 234
  peer 5.5.5.5 as-number 5
  peer 5.5.5.5 ebgp-max-hop 255
  peer 23.1.1.2 as-number 234 //下一跳指定ar2的直连接口的ip地址
  peer 47.1.1.2 as-number 123
[ar4-bgp] network 192.168.1.0 //引入静态到bgp路由里面

 

[ar2-bgp]dis th
  bgp 234
  peer 12.1.1.1 as-number 1//下一跳指定ar1的直连接口的ip地址
  peer 34.1.1.4 as-number 234 //下一跳指定ar4的直连接口的ip地址

[ar1-bgp]dis th
  bgp 1
  peer 12.1.1.2 as-number 234//下一跳指定ar2的直连接口的ip地址

 

<ar1>dis bgp  routing-table  //在ar1上查看bgp的全局路由表,下一跳是和ar2的直连接口,符合会修改下一跳的ip地址。

#----从IBGP邻居收到的路由,不会转发给IBGP邻居,因此不考虑修改下一跳问题。

¥----从EBGP邻居收到的路由,转发给IBGP邻居时,系统不会自动修改下一跳的ip地址的,需要手动修改下一跳的ip地址

情况:ar5--ar4---ar2,都是基于直连的。

<ar2>dis bgp  routing-table  //符合系统不会自动修改下一跳的ip地址的,但是此时不会通的。

如何修改

[ar4-bgp]peer 23.1.1.2 next-hop-local  //在我发送给ar2路由器的信息的时,ar2对对应信息的下一跳ip地址始终指向我,也就是ar2bgp的peer的ip地址。

<ar2>dis bgp  routing-table //最终结果正常

特别注意:边界路由器(ar1或者ar5)向AS(234)内部的IBGP邻居发送路由时,都要使用next-hop-local命令.

%----从EBGP邻居收到的路由,转发给EBGP邻居时,会修改下一跳。  

 情景:ar5---ar4---ar7,都是基于直连的

[ar7-bgp]dis th //ar7的bgp123下的配置
  bgp 123
  peer 47.1.1.1 as-number 234  //指定bgp的peer为对方直连接口

[ar4-bgp]dis th  //ar4的bgp234下的配置
  bgp 234
  peer 23.1.1.2 as-number 234  
  peer 45.1.1.5 as-number 5  //指定bgp的peer为对方直连接口
  peer 47.1.1.2 as-number 123  //指定bgp的peer为对方直连接口

 

[ar5-bgp]dis th
  bgp 5
  peer 45.1.1.4 as-number 234 //指定bgp的peer为对方直连接口

   network 200.1.1.1 255.255.255.255 //宣告

 

[ar7]dis bgp  routing-table  

         Network                NextHop                              MED    LocPrf    PrefVal    Path/Ogn

*>     200.1.1.1/32         47.1.1.1 0 (下一跳自动修改)                              234             5i

六,BGP的router id(和ospf的router  id一样)

1,建议人为的手动配置BGP的router id

2,如果没有手动配置,会采用路由器的全局router id来作为BGP的router id也就是该接口开机后的第一个双up的接口来充当其router id

 [AR1]display router id 
    RouterID:12.1.1.1   //全局的router id是由开机后第一个UP的接口IP地址来充当的。

3,如何来手动修改bgp的router id

[ar1-bgp]router-id  1.1.1.1  //人为手动配置
Warning: Changing the parameter in this command resets the peer session. Continu  e?[Y/N]:y  //选Y,要重置peer的bgp会话。

七,bgp邻居表的讲解

1, 本地bgp的router id

2, 本地bgp的AS号

3,Totalnumber of peers  :表示在bgp123进程下配置了几个peer。

4,Peers in established state :表示在bgp123进程下建立连接状态的pere有几个(也就是Established状态)。

5,本地所指的peer的bgp邻居的ip地址

6,当前使用的bgp的版本,现在基本都是使用bgp的版本4.

5,表示对应bgp的邻居当前所在的AS区域。

6,msgsent和msgsent表示:从该邻居那里我接收到了(发送出去了)多少报文。

7,发送队列,不为0代表报文发送途中一定出问题了。为0才是正常的发送情况,也对应着bgp的邻居状态为Established状态。

8,邻居状态以建立的时间。

8,state pre:表示我和当前邻居的状态是什么。

九,全局路由表和bgp路由表

1,全局路由表里和bgp路由表的关系

针对以下拓扑图,在跨AS的网络设备下,不可能会基于igp的网络协议来达到互通的,也就是不可能会在AS间配置ospf,isis等igp的协议来达到AS间的网络互通。

那么就需要使用bgp外部网关协议来达到AS间的网络互通通过在bpg进程里宣告全局路由表里的路由条目,该路由条目将会存在于全局的每个路由表的bgp路由表里面,并以ebgp或者ibgp的方式加载到本地的全局路由表里面(只要是建立了bgp邻居关系的设备,其bgp路由表里面都会有对应的搬运来的路由条目信息,只是ebgp协议哦)

 

 

 2,”通过IGP计算出路由后,再由BGP来做路由的搬运工“的具体配置:都只是限于本地的全局路由表

现在将ar1的loop接口宣告到bgp路由表里,这样相对于本路由器的ebgp邻居a5就可以学到ar1上的宣告路由条目了。(最主要就是为了让ebgp邻居学到,说白了也就是打破AS间无法由igp传递的壁垒)

[ar1-LoopBack12]ip address 100.1.1 32 //配置loop接口

[ar1-bgp]network 100.1.1 32//宣告本地全局路由表里的路由条目(igp,静态,直连等属性的路由)到全局bgp路由表里面。该命令的动作是拿着你配置的 100.1.1 32到全局路由表里面去找对应的路由条目信息。那么ar4会将100,1.1.1的网段信息传递给ebgp邻居ar5了.

(注意:宣告是宣告进去了,但会不会成为有效且最优呢,让其他的bgp邻居学习就不一定了。但是我门以有效最优的情况来分析)

3,各个bgp路由器在整个路由传递和学习过程当中的作用,以下就是“通过IGP计算出路由后,再由BGP来做路由的搬运工“的搬运结果(路由黑洞问题)

[ar2]dis ip routing-table protocol bgp//作用:给到ar4,让ar4学到。EBGP:由ar1这个ebgp邻居传来的

Destination/Mask   Proto   Pre    Cost   Flags     NextHop   Interface

100.1.1.1/32       EBGP            255      0     D      12.1.1.1        GigabitEthernet0/0/0

[ar4]dis ip routing-table protocol bgp//作用:给到ar5,让ar5学到。igbp:由ar2这个ibgp邻居传来的

Destination/Mask    Proto   Pre    Cost      Flags            NextHop         Interface

100.1.1.1/32           IBGP       255    0          RD(需要递归查询)        2.2.2.2           GigabitEthernet 0/0/0

 [ar5]dis ip routing-table protocol bgp//ebgp:由ar4这个ebgp邻居传来的

Destination/Mask    Proto   Pre    Cost        Flags    NextHop         Interface

100.1.1.1/32     EBGP    255    0           D          45.1.1.4           GigabitEthernet0/0/0

<ar3>dis ip routing-table  protocol  bgp  //作用:提供tcp三次握手的通道,和igbp间的路由递归查询

4,bgp的路由黑洞

!-----黑洞现象:如下的网络环境当中,当ping -a 100.1.1.1   200.1.1.1时,发现ping不通。由分析可知,流量在ar3上就没有在传递了,那么在ar3就出现路由黑洞了。

@----黑洞成因:由于ar3收到ar1发的报文时,发现目的ip是200.1.1.1,在ar3的全局路由表里面没有200.1.1.0 24 网络的路由信息,因为ar5没有在bgp进程下network 200.1.1.1 。

#---问题解决(1):

1       当边界路由器从IBGP邻居收到一条路由后(ar2和ar4的关系),会使用该路由和IGP路由表进行比较。如果在IGP路由表中存在该路由即BGP同步如果在IGP路由表中不存在该路由即BGP不同步。(在bgp的同步功能开启的情况下来进行分析)

2       如果BGP同步,那么边界路由器将会把该路由条目传递给其他的EBGP邻居。如果BGP不同步,那么边界路由器将不会把该路由条目传递给其他EBGP邻居(但是huawei它没开启)。

3     bgp的同步功能在华为的设备里,默认是关闭的,且是不可手动开启的(但是:华为在设计BGP时,强制关闭了BGP同步功能,且不能手动开启!!!,因为bgp和ibp所承载的路由条目不在一个层面上

[Huawei-bgp]dis th
#
bgp 10
#
ipv4-family unicast//在ipv4地址蹰下
undo synchronization //默认关闭了BGP同步功能

¥----问题解决(2):可以将bgp作为外部路由引入到osfp里面,但是不推荐,igp的路由条目承载数量有限

¥----问题解决(3):AS内部采用全互联的方式(fullmesh)

配置:

缺点:当ibgp里面路由器过多时,100台路由器都要配置全互联,配置会很麻烦的。

¥----问题解决(4):路由反射器RR(有待解决)

&----通过LSP隧道解决路由黑洞问题 (mpls)

%---问题解决(5):在各个边界路由开启使用GRE的tunnel接口来建立ibgp的邻居,在ar2和ar4间打通一个GRE的隧道,来通过这个GRE的隧道来ibgp的邻居。

 1     GRE的tunnel接口的配置命令

[ar2]int Tunnel  0/0/0  //创建tunnel接口

[ar2-Tunnel0/0/0]ip address 24.1.1.2 24 //为tunnel接口配置IP地址(虚拟接口ip地址,虚拟隧道接口ip地址,虚拟隧道上也应该配置一对互通的ip地址吧),注意ip地址比较特殊哦。

[ar2-Tunnel0/0/0]tunnel-protocol  gre   //开启GRE功能

[ar2-Tunnel0/0/0]source  eigabitEthernet  0/0/1  //指定"配置通过谁和谁建立GRE隧道"中的源地址为,为ar2的e0/0/1接口(可以为接口,或者ip地址)

Ethernet                  Ethernet interface
GigabitEthernet      GigabitEthernet interface
LoopBack               LoopBack interface
NULL                      NULL interface
Serial                Serial interface
Tunnel         Tunnel interface
X.X.X.X                 IP address 

[ar2-Tunnel0/0/0]destination  34.1.1.4    //指定"配置通过谁和谁建立GRE隧道"中的目的地址为,ar4的e0/0/0接口的ip地址 34.1.1.4.

X.X.X.X IP address
vpn-instance VPN Routing/Forwarding parameters on the interface

[ar4-Tunnel0/0/0]dis th //同理ar4同样方法配置

#
interface Tunnel0/0/0
ip address 24.1.1.4 255.255.255.0
tunnel-protocol gre
source Ethernet0/0/0
destination 23.1.1.2
#
return

最后结果验证

<ar4>ping 24.1.1.2  //检测GRE隧道配置的正确性,也就 Tunnel 接口的联通性
PING 24.1.1.2: 56 data bytes, press CTRL_C to break
Reply from 24.1.1.2: bytes=56 Sequence=1 ttl=255 time=60 ms
Reply from 24.1.1.2: bytes=56 Sequence=2 ttl=255 time=60 ms

这样的作法等价于:在ibgp环境里直接忽略ar3的存在,直接跨越了ar3路由器,直接通过GRE隧道接口在ar2和ar4之间直连连接了上了。

2    GRE的tunnel接口来建立ibgp的邻居的配置命令(接续以上配置)

[ar2-bgp]dis th
#
bgp 234
peer 24.1.1.4 as-number 234
peer 24.1.1.4 connect-interface Tunnel0/0/0

peer 24.1.1.4 next-hop-local

[ar4-bgp]dis th
#
bgp 234
peer 24.1.1.2 as-number 234
peer 24.1.1.2 connect-interface Tunnel0/0/0

peer 24.1.1.2 next-hop-local

[ar1]ping -a 100.1.1.1 200.1.1.1  //结果检测
PING 200.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 200.1.1.1: bytes=56 Sequence=1 ttl=253 time=80 ms
Reply from 200.1.1.1: bytes=56 Sequence=2 ttl=253 time=110 ms
Reply from 200.1.1.1: bytes=56 Sequence=3 ttl=253 time=80 ms

3    数据报文封装原理:

当ar5发的数据(S IP:200.1.1.1 D.IP:100.1.1.1)到ar4时 ,ar4发现该数据要通过tunnel接口将数据发出,那么ar4会由GRE隧道来进行封装为 S.IP:34.1.1.4  D.IP:23.1.1.2  [S IP:200.1.1.1 D.IP:100.1.1.1 ],发给直连的ar3路由器,ar3在发给ar2,ar2发现是被gre封装数量流量(由于ar2也开启了GRE),然后ar2在将其,解封装为(S IP:200.1.1.1 D.IP:100.1.1.1)。

5,bgp全局路由表的加表分析:

!-----什么路由可以加表,什么路由不可加表(以以上拓扑图来分析的)。

1    ar1的bgp路由表:图中有*>标志的为有效且最优的路由.。下一跳为0.0.0.0,代表该路由是本地始发的路由。

2     ar3的bgp全局路由表:1.1.1.1的路由条目在ar3上连有效的路由都不是,因为学到的路由条目是本地bgp所指的peer的ip地址,bgp的内部机制规定此类路由bgp是不会选为最优路由来加载到全局路由表的。那么如果该peer地址的路由为有效且最优的路由的话,那么以后ar3和ar1建立tcp的三次握手时,会通过最优路由也就是bgp来建立tcp的三次握手,那么将会出问题的,会导致邻居中断。(不理解就记结论)

3     ar4的bgp全局路由表:因为ar3上的1.1.1.1路由不是有效最优的路由,bgp规定非有效最优的路由不可传递,不可加载到本地的全局路由表当中,所以ar3不会传递1.1.1.1的路由条目给ebgp邻居ar4了。但是对于有效最优的静态路由是可以加入到bgp路由表传递给ebgp邻居的。(所有该有效路由就是123.1.1.0)

@----一些需要更深刻的理解点

1     为什么ar3在ibgp里面不通过ospf直接学习123.1.1.0 255.255.255.0路由条目,而是要通过bgp的全局路由表在加载到ar3的全局路由表里呢:

如何发现123.1.1.0 255.255.255.0路由条目的学习方式:因为是由ibgp协议来进行学习的

是为了让边界路由器将此路由条目传递给ebgp邻居,让ebgp邻居通过bgp路由协议学到跨AS的路由条目,也可以说是bgp一定是穿越的不是末节的。

2   在bgp路由里面如何判断路由条目时有效的(命令:peer 34.1.1.4 next-hop-local ):路由条目的下一跳经过全局路由表进行递归之后,如果可达即有效。(重点:路由可否传递,只看递归路由的下一跳是否可达。而不是递归路由的下一跳,是否还有递归路由)

[ar1-bgp]  network 100.1.1.1 255.255.255.255//引入100.1.1.1到bgp路由表当中

<ar4>dis bgp  routing-table   // 查看bgp路由表,发现100.1.1.1不是有效且最优的,是因为100.1.1.1的下一跳12.1.1.1在ar4本地的全局路由表里面不存在。

全局路由表里面的,去往100.1.1.1的下一跳路由在本地的全局路由里面不存在。路由条目的下一跳经过全局路由表进行递归之后,没有可达的路由存在

 [ar2-bgp]peer 34.1.1.4 next-hop-local //在ar2上配置让我发送给ar4路由器的信息的时,ar4对对应信息的下一跳ip地址始终指向我(ar2),也就是邻居,而不是ebgp的peer ip地址,这是在全局路由表里没有下一跳的递归路由的

<ar4>dis bgp  routing-table   // 查看bgp路由表

全局路由表里面的,去往100.1.1.1的下一跳路由在本地的全局路由里面存在。路由条目的下一跳经过全局路由表进行递归之后,有可达的路由存在

十一,BGP的更新方式:(重点命令

1 ,触发更新:因路由路由条目发生变化时而,被动的发出的更新
2 ,管理员手动更新(全量跟新,可以针对指定邻居做更新)

当有对路由条目进行了属性的修改,去执行对应的路由控制时。邻居路由器半天都没有收到对应路由属性的更新,这时可以在邻居路由或者本地路由器手动的指定更新。
<AR3>refresh bgp all import //让所有bgp邻居给我发一个最新的路由
<AR4>refresh bgp all export //把自身最新的路由发给我所有的邻居

<ar4>refresh bgp ?  //BGP的更新方式的所有命令
X.X.X.X                                   Specify an IPv4 peer address //指定对某一bgp邻居 import或export的操作
all                                            All the connections with BGP ///对所有的bgp邻居 import或export的操作
external                                   External BGP session
group                                           BGP sessions for peer group
internal                                       lnternal BGP session
ipv6                                        Specify IPv6 unicast address family
l2vpn-ad                                  Specify L2VPN auto-discovery address family
mdt              Specify MDT address family
multicast          Specify IPv4 multicast address family
mvpn             Specify MVPN address family
vpn-instance          Specify a VPN instance
vpn-target           Specify VPN-Target address family
vpnv4             Specify VPNv4 address family
vpnv6           Specify VPNv6 address family

( export 时我命令我给邻居, import时我命令邻居给我)

3,bgp可没有周期更新(bgp承载路由条目太庞大了,若是还周期性更新,那是会出现很多没必要的浪费的

十二,BGP的防环原则

!---IBGP邻居水平分割:从IBGP邻居收到的路由不会传递给另外一个IBGP邻居(因为:他会认为,我从ibgp邻居那里收到一个路由,现在我又要发到,igbp的邻居那里,会认为这将有环路的发生)

@----EBGP邻居依靠路由条目中的as-path属性:当一个路由条目经过一个as后,会在as-path属性中记录这个as号,当路由器从EBGP邻居收到该由条目的as-path属性中记录了本地AS号,将不接收这条路由。

 十三:bgp路由的产生方式

1,network宣告路由表中已存在的路由条目
2,import-route引入到bgp路由(被引入的路由需要在全局路由表加表):在BGP的AS里引入具体路由。命令:[Huawei-bgp]import-route  static //将全局路由表里的存在的路由引入到bgp路由表里面。

(注意:同时在路由器里面配置,[Huawei-bgp]import-route  static 和[Huawei-bgp]network 192.168.1.1 24

结果:两个命令都可以使192.168.1.1 24加表,在bgp路由表里面只会显示起源属性不一样,?代表外部引入。i代表network进来的,当同一条路由通过不同的方式存在于bgp路由表时,是network>import的路由)

3,自动聚合产生的路由条目(只能聚合import-route已经进来的外部路由条目,来进行主类聚合,不需要手动的判断出路由后再配置上去,是自动聚合的)

实验配置

1    在ar1配置两条静态路由

ip route-static 172.168.1.0 255.255.255.0 NULL0         (172.168.1.0 是一个B类的ip地址,对172.168.1.0  /24进行主类的聚合,他将变为一个16位的172.168.0.0路由条目 )
ip route-static 172.168.2.0 255.255.255.0 NULL0   (自动聚合后范围会扩大的)

2    在bgp进程里面引入外部静态

[ar1-bgp]import-route  static 

3   [ar1-bgp]summary automatic  //对mport-route进来到bgp的路由进行自动的聚合
Info: Automatic summarization is valid only for the routes imported through theimport-route command.

4   查看bgp全局路由表

[ar1]dis bgp  routing-table  //在本地路由器上查看bgp的全局路由表

 *>   172.168.0.0        127.0.0.1                              0       ?
 (s代表被抑制)s>   172.168.1.0/24     0.0.0.0         0                     0      ?
 (s代表被抑制) s>   172.168.2.0/24     0.0.0.0         0                     0      ?

<ar2>dis bgp routing-table     

Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>   172.168.0.0        12.1.1.1                              0      1?

结果:默认被聚合后的明细路由会被抑制,无     法进行传递,只会传输聚合后的主类路由,在该路由器的邻居路由器上的路由表只有被CIDR聚合后的路由(可包括自己)。

缺点:自动聚合的影响范围过大,以上会将172.168.0.0 /16的所有路由都会引流到bgp环境当中,就是不能精准的命中所想聚合的路由,还会扩大匹配明细路由的范围(在ar2上会将去往172.168.0.0 /16的所有路由都指向ar1,但是ar1只有172.168.1.0和172.168.2.0者两条路由,将会产生黑洞问题

4,手动聚合产生的路由条目

1    在ar1配置两条静态路由

ip route-static 172.168.2.0 255.255.255.0 NULL0
ip route-static 172.168.3.0 255.255.255.0 NULL0 (完美)

2  进行手动的聚合

[ar1-bgp]aggregate 192.16.2.0 23 detail-suppressed  //聚合路由时,抑制明细路由的传递(因为手动聚合默认不会抑制明细路由的传递的,它不会自动的进行对应路由的抑制,需要手动开启明细路由的抑制命令为  aggregate 172.16.2.0 23 detail-suppressed )

[ar1]dis bgp  routing-table   

    Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>   172.168.2.0/23     127.0.0.1                             0      ?
 s>   172.168.2.0/24     0.0.0.0         0                     0      ?
 s>   172.168.3.0/24     0.0.0.0         0                     0      ?
 *>   200.1.1.1/32       12.1.1.2                              0      234 5i

[ar2]dis bgp routing-table     

Network            NextHop        MED        LocPrf    PrefVal Path/Ogn

 *>   172.168.2.0/23     12.1.1.1                              0      1?
 *>i  200.1.1.1/32       24.1.1.4        0          100        0      5i

 十三:BGP的报文类型

1,open 报文:用于建立BGP邻居的连接,协商BGP参数的报文。

2,update报文:用于BGP邻居之间交互路由信息及路由属性的报文。
3,notification报文:差错报文,报告错误信息,用来终止与对等体的bgp邻居关系的报文。

4,Keepalive报文:用于保持邻居连接的报文(主要是保证TCP的连接不中断),是用于保活的报文。 该报文维护邻居关系,每60s发送一次Keepalive报文,180s没收到对等体发送的keepalive报文则认为邻居失效down。
5,route-refresh报文:用于在改变bgp相关属性之后,请求邻居重新发送路由信息的报文,并且只有支持刷新能力的设备才能响应这个报文。

十四:BGP的邻居状态机

1,idle(BGP初始状态): 

!----idle的详细过程

一旦在某一方的BGP中指定了peer以后(只要是单方面的邻居宣告都会出现peer),或者重置了已存在的peer(重置命令reset bgp X.X.X.X,reset bgp all对所有的邻居进行重置),就会进入这个idle状态。

在这个状态下BGP不会向这个peer发送tcp三次握手,同时也会拒绝这个peer发来的tcp三次握手

在进入这个idle状态后 ,会触发华为的start事件,这个事件时间为32秒(提前完成也不行)。

在这个事件之后才开始建立该peer的三次握手里的第一次握手,来建立TCP连接。在发送了第一次SYN置为的报文(第一次握手)之后邻居状态机进入到connect状态。接着再发送tcp的重传。先发送SYN置为的报文,邻居状态机才为connent状态

@----邻居状态机何时进入到idle状态:在单边指定了peer x.x.x.x as number 123 后,邻居peer x.x.x.x就进入了idle状态了。

#-----常见的几种idle状态的原因:
1     如果没有去往该peer的路由(底层都不通),那么就无法发送SYN置为的报文,此时该peer会一直卡在idle状态。
2     收到了notification报文之后会不管邻居状态机处于什么状态都会退到idle状态。
3     手动挂起邻居(在网络割接的环境下,不影响peer的邻居的建立):作用,BGP的业务一般都是双线的,挂起一根流量会在另外的一条线路上传输,在保证网络小波动或无波动的情况下来进行网络切割。 

[AR2-bgp]peer 12.1.1.1 ignore   //手动挂起邻居

[ar2]dis bgp peer  //  查看bgp邻居表

Peer      V    AS    Msg   Rcvd MsgSent OutQ Up/Down State PrefRcv

12.1.1.1 4    123   0        0          0                 00:01:01     Idle(Admin)0

同理:ar1同方法配置。

2,connent(连接状态)

!-----在这个状态下,BGP会启动连接重传定时器(connect retry 默认为32秒钟,提前完成三次握手可以提前结束),用于来等待tcp完成3次握手的完成。

1     向邻居发起SYN后就会进入到这个connect状态,在这个状态完成TCP3次握手.

2     如果TCP3次握手成功 ,则向该邻居发送open报文,然后转到opensent状态。

3     如果TCP3三次握手失败,peer的状态为active状态,或32秒后直接进入到active状态。(存在一端的peer没有配置的情况,导致你所指的peer一直发送RST,ACK来拒你的请求)

 (正常情况下应该是78.1.1.8应该发送SYN,ACK的,以上报文是start事件结束时发的报文)

4     如果重传定时器超时 ,也就是在32s内没有完成tcp的三次握手,BGP没有收到邻居的响应(这次直接连RST,ACK都不发了),那么会卡在connect状态,一直TCP进行重传。(存在一方bgp进程都没有创建,本质是设备没有开启179端口,我就是一直在自言自语,卡在connect状态)                   

 

@-----常见的几种connect状态原因:
1     tcp的三次握手中 邻居没有给我响应(重传定时器超时) 
2     我的SYN在沿途中遇到了阻碍,没有到达对方(沿途路由不可达)
3     EBGP邻居没有配置TTL多跳,(等价于沿途路由不可达)
4     总结:卡在connect状态其实就是邻居没有给我响应(重传定时器超时)  

3,active状态(活跃的)
!----当TCP三次握手失败,才会进入这个状态。在这个状态下,BGP总是试图去建立TCP三次握手
1      如果在多次尝试下,TCP3次握手成功了,那么BGP会向该peer发送open报文,关闭重传定时器,转至opensent状态。
2      如果在多次尝试下,TCP3次握手仍然失败,那么BGP会将该peer停留在active状态 。(TCP3次握手仍然失败,失败别人还是理你的)
3      如果重传定时器32s超时,且没有得到该peer的响应,那么会转至connect状态。

2和3的实验

当是一个tcp的攻击行为,应该将其直接拒绝掉,以免一直消耗我的设备资源

[ar1-bgp]dis th
#
bgp 1
peer 12.1.1.2 as-number 2
#
ipv4-family unicast
undo synchronization
peer 12.1.1.2 enable
#
return

[ar2-bgp]dis th
[V200R003C00]
#
bgp 2
#
ipv4-family unicast
undo synchronization
#
return

目前就是ar1一直发送syn,而ar2一直被迫发送RST,ACK报文,

解决方法:

[ar2-acl-adv-3000]rule 5 deny tcp source 12.1.1.1 0 destination any destination-port eq 179  //拒绝源地址为12.1.1.1的tcp访问我的179端口

[ar2-acl-adv-3000]dis th
acl number 3000  
 rule 5 deny tcp source 12.1.1.1 0 destination-port eq bgp 

[ar2-GigabitEthernet0/0/0]traffic-filter inbound  acl  3000   /在ar2的g0/0/0接口调用acl 3000

然后,ar1的邻居状态机从active转变为connect

4,opensent状态(open报文已发送状态)
!----在这个状态下,BGP已经向该peer发送了OPEN报文,在等待对方给我发送Open报文。
1    如果收到了对方发来的Open报文,参数协商成功,则会向该peer发送keepalive报文,然后转到openconfirm状态。
2   如果收到了对方发来的open报文,参数协商失败,则会向该peer发送notification报文,然后转到idle状态。

5,openconfirm状态(open协商成功状态)
1    在这个状态下,BGP等待对方的keepalive报文,如果收到了对方发来的keepalive报文则转换为established状态。
2    在这个状态下,BGP如果收到了notification报文,则转换为idle状态。

6,established(连接已建立
!---在这个状态下说明邻居已经建立完毕,这个状态下可以交互的报文:update(up后开始传data的报文 ),notification(报错报文),keepalive(保活报文),route-refresh(收敛慢,更新报文)
1    如果在这个状态下,收到正确的update和keepalive报文,那么BGP会认为邻居处于正常状态,继续保持。
2    如果在这个状态下,收到错误的update和Keepalive报文,那么BGP会认为邻居处于异常状态,会发送notification报文,转到idle状态。
3    route-refresh报文的发送不影响邻居关系

十四:bgp报文详解(bgp的报文头部: marker,length,type )

1,open报文详解

1    marker:占用16个字节,默认为全F,用于检查BGP邻居头部的消息是否完整。
2    length:占用2字节,用于描述BGP报文的总长度。包括报文头+具体报文内容。

3    type :用于描述当前BGP的报文类型,分为 1open 报文,2update报文,3notification报文,4Keepalive报文,5route-refresh报文。

(open报文)4   Version:bgp的版本,默认都是4

(open报文)5   My As:本地的AS号:用于描述发出该open报文的路由器所述AS号,同时也可以校验对端的AS号和本地配置的AS号是否一致

(open报文)6   Hold time: 描述bgp邻居的失效时间,默认情况为keepalive时间的3倍(只是默认情况哦,可以手动修改为不为3倍的情况)当两端holdtime时间不一致时,需要协商为数值较低的执行

修改keepalive时间的命令为

当两端holdtime时间不一致时,需要协商为数值较低的执行的实验:

[AR1]DIS bgp  peer  12.1.1.2 verbose   //以下参数都是默认配置的情况

Configured: Active Hold Time: 180 sec Keepalive Time:60 sec
Received : Active Hold Time: 180 sec
Negotiated: Active Hold Time: 180 sec Keepalive Time:60 sec

[AR2-bgp]timer keepalive 50 hold 150  //修改ar2的 hold time的时间参数    peer再次进入到idle状态。

[AR1]DIS bgp peer 12.1.1.2 verbose

Configured: Active Hold Time: 180 sec Keepalive Time:60 sec
Received : Active Hold Time: 150 sec   //ar2刚改的
Negotiated: Active Hold Time: 150 sec Keepalive Time:50 sec   

[AR1-bgp]timer keepalive  30 hold  180 

[AR1]DIS bgp peer 12.1.1.2 verbose

Configured: Active Hold Time: 180 sec Keepalive Time:30 sec
Received : Active Hold Time: 150 sec
Negotiated: Active Hold Time: 150 sec Keepalive Time:30 sec

总结:Hold Time协商为共同的最小的,Keepalive Time协商为共同的最小的。

(open报文)7    BGP ID : 用来描述发出该Open报文的路由器  bgp的router-id。

(open报文)8    Optional Parmeters length:BGP协商参数字段( Optional Parmeters)的长度.当前为16bit

(open报文,该字段有建立BGP邻居的连接,所需协商BGP参数的报文)9    Optional Parmeters字段的具体内容:

(open报文所协商的参数)Capability:

(open报文所协商的参数)Capability:路由刷新能力

(open报文所协商的参数)Capability:支持4 bit的AS号的能力。

2,Updaet报文(报文分两个部分:第一个是用来删除路由的,第二个是用来传递路由的,该报文是用来通告邻居本地有哪些路由条目的变化的 )

!-----前提环境:在路由器上将igp路由表里的信息宣告进bgp路由表里,在配置我对所有的邻居来进行一次更新,<AR4>refresh bgp all export ,在观察报文变化。 

@----withdrawn routes length:用来描述被删除的路由所占的长度大小。(当长度为0时,代表没有什么路由要被删除)

%----withdrawn routes:详细的被删除路由的信息,被删除的路由只由路由前缀+掩码来描述。 

[ar1-bgp]undo  network 192.168.2.0 

#------Total  path attribute length:用来描述所传递的路由信息所占的长度(被传递的路由由路由属性+路由条目来描述)

&------Path attributes :表示路由的属性,bgp在传递路由时,会将相同属性的路由条目放在一个updata报文里进行传递。

当我再次配置时:(属性)

[ar1]ip ip-prefix iaa permit  192.168.2.0 24 

[ar1]route-policy 1 permit  node  10

[ar1-route-policy]if-match   ip-prefix iaa

[ar1-route-policy]apply  as-path 100 100 100 100 additive 

[ar1]route-policy 1 permit node 20

[ar1-bgp]peer  78.1.1.8 route-policy 1 export 

当我再次抓包时:(属性)

 

%---Network Attribute  Reachability information  (NLRI):表示网络层可达信息,就是真正的路由条目 。在同一个bgp进程的路由器发的network信息的属性相同。当人为的修改了,network路由器所属的属性信息,有几条不同属性的报文,就会用几个updata报文来发送,经属性相同的报文打包在同一个update发出(长度为0,代表没有什么路由被发送)

当我再次配置时:

[ar1]ip route-static 192.168.2.0 255.255.255.0 NULL0

[ar1-bgp]network 192.168.2.1 24

<ar1>refresh bgp  all  export 

当我再次抓包时:(同一属性的bgp路由,将会打包在一起传递,以下都是同一个路由器发的下的bgp进行network的路由,那么就是有多少组属性就会有多少个Updata报文的,是通过属性的分类来发送报文的,而不是路由条目。)

十五:bgp的选路原则的属性的性质

1、公认必遵属性:所有BGP路由器都可以识别这类属性,且必须要在Update报文中传递,如果缺少了这类属性,路由信息就会出错。

2、公认任意属性:所有BGP路由器都可以识别这类属性,但不要求必须在update报文中传递,即使缺少了这类属性,路由信息也不会出错。
3、可选过渡:BGP设备可以不识别这类属性,但是路由器仍然可以接收这类属性,并且通告给其他AS邻居。
4、可选非过渡:BGP设备可以不识别这类属性,路由器会忽略这个属性,并且不会将这个属性

十六:bgp的选路属性(只是限于传递路由属性或者条目,和学不学无关)

 

1、next-hop属性 (该属性一般不作为分析)

!----- 公认必遵属性

@-----BGP本身是不计算路由的,只是路由的搬运工,所以BGP在传递路由时,需要携带下一跳属性,同时根据情况修改下一跳。

¥-----易造成下一跳不可达的情况

1    从EBGP邻居收到的路由条目传递给IBGP邻居时下一跳不变,需要手动peer x.x.x.x next-hop-local来修改下一跳;

2    从EBGP邻居收到的路由条目传递给EBGP邻居时下一跳自动修改;
3    从IBGP邻居收到的路由条目传递给EBGP邻居时下一跳自动修改;
4    从自身始发的路由条目传递给所有BGP邻居时都会自动修改下一跳。
5    下一跳的取值:为本设备与邻居建立BGP邻居的peer ip地址。

优选从 EBGP 对等体学来的路由( EBGP 路由优先级高于 IBGP 路由

#----实验证明:

[ar1]ip route-static 192.168.1.0 255.255.255.0 NULL0 

[ar1-bgp]network 192.168.1.1 24

[ar5]ip route-static 192.168.1.0 255.255.255.0 NULL0 

[ar5-bgp]network 192.168.1.1 24

<ar2>DIS bgp routing-table  //在ar2上查看bgp路由表

其实默认的配置环境下是由于起源类型IGP>EGP>Incomplete,影响出的结果。

ar2和ar4的路由都是这样的,如出一辙。

2,优选 Preferred-Value 属性值最大的路由(这个本地是指本台路由器)

!----- 华为私有的属性,不属于那4种属性的一类
@-----该属性只有在本地有效(这个本地意义是指,只在本台路由器上存在且有效,是不会传递到其他路由器上的,本质是Updata报文不会携带该属性)
#------缺省情况下等于0(不对其修改就是缺省情况下),数值是越大越优先,取值范围0~65535。

%-----实验配置

证明和思考1 :Preferred-Value 属性只对本地路由器存在bgp的路由选路控制的影响。对ar1方向配置为最优情况下的,bgp路由表分析。
[AR2]ip ip-prefix 192.168.1.0 permit 192.168.1.0 24

route-policy Pref-Val permit node 10
   if-match ip-prefix 192.168.1.00  //匹配对应的路由
   apply preferred-value 1000  //对前缀列匹配上的路由来进行Pref-Val属性的修改。
route-policy Pref-Val permit node 20  //此处必须有空节点,因为R4会给我传递非常多的路由,要做兜底 。

[ar2-bgp]peer 12.1.1.1 route-policy Pref-Val import   //针对12.1.1.1 这个邻居给我传递路由时,用这个Pref-Val的route-policy来做一个过滤,匹配到的对应路由,将其Preferred-Value 修改为1000(注意:在该Pref-Val属性下,只有import  方向的修改才是有意义的,针对export方向的修改才是有无意义的)。

[ar2]dis bgp routing-table  : 

 

上图的结果为:由于ar1传来的bgp路由的Pref-Val属性在进入ar2时被执行了route-policy Pref-Va策略的修改。将其 Pref-Val值修改为1000了,而Pref-Val值是越大越优的,那么12.1.1.1方向的network路由将会是*>的路由,注意虽然bgp只会传递*>的路由,(接下)

[ar4]dis bgp routing-table  

 

(接上),ar2不是只传递*>的路由吗?那为什么ar4去往network的路由会是ar5方向呢?

因为,对的,他是会传递有效最优的路由,但是bgp邻居收到该路由后,该路由就一定还会是有效最优的路由吗?,bgp邻居只会接收该路由,然后再由bgp的属性选路得出结果的。Preferred-Value 属性只是对本地有效的,跨路由器是不会传递Preferred-Value 属性的,所以在ar4路由器上不会是由于Preferred-Value 属性的差别而选举出network路由的。而ar4的network的路由是由于以下结果选举出的,

[ar4]dis bgp routing-table 192.168.1.1 //查看 192.168.1.1路由的被选举的详细信息,发现在ar4的network的路由是由属性7 “优选从 EBGP 对等体学来的路由( EBGP 路由优先级高于 IBGP 路由)”选举出来的。

[ar1]dis bgp routing-table  //只有一条路由,怎么比较。

[ar5]dis bgp routing-table  //只有一条路由,怎么比较。

思考2:对ar5方向配置为最优情况下的,bgp路由表分析。

[AR2]ip ip-prefix 192.168.1.0 permit 192.168.1.0 24

route-policy Pref-Val permit node 10
   if-match ip-prefix 192.168.1.00  //匹配对应的路由
   apply preferred-value 1000  //对前缀列匹配上的路由来进行Pref-Val属性的修改。
route-policy Pref-Val permit node 20  //此处必须有空节点,因为R4会给我传递非常多的路由,要做兜底 。

[ar2-bgp]peer 24.1.1.4 route-policy Pref-Val import   //针对24.1.1.4这个邻居给我传递路由时,用这个Pref-Val的route-policy来做一个过滤,匹配到的对应路由,将其Preferred-Value 修改为1000(注意:在该Pref-Val属性下,只有import  方向的修改才是有意义的,针对export方向的修改才是有无意义的)。

[ar1]dis bgp routing-table 

 结果:ar1针对本地的两个network的路由进行比较,经过属性选路的比较后,由属性route type比较得出。

3,优选 Local_Preference 属性值最大的路由。(这个本地是指本AS,前提是对于修改的路由会进行传递)

!----公认任意属性

@---- Local_Preference 属性只有在本AS内有效(这个本地AS是指,只在本AS上存在且有效,是不会传递到其他AS的路由器上的,本质是Updata报文不会携带该属性)

#-----缺省情况下为100,数值越大越优,范围为0~42.96亿。(当跨越ebgp来传递时,Local_Preference 属性值默认为空,可以等价于100
%-----实验配置

思考 1 :在ar2的e0/0/0接口接收路由时,对其进行Local_Preference 属性的修改 。

[ar2] route-policy 1 permit node 10
           if-match ip-prefix 192.168.1.0
           apply local-preference 1000  //修改local-preference属性为1000
        route-policy 1 permit node 20

[ar2]ip ip-prefix 192.168.1.0 index 10 permit 192.168.1.0 24 //前缀列表匹配路由

[AR2-bgp]peer 12.1.1.1 route-policy 1 import  //接收对12.1.1.1邻居的路由通过route-policy进行过滤。

<ar2>dis bgp  routing-table   

 

结果:因为在ar4上,ar5方向的network的路由不是最优的了,ar4不会传递非*>的路由了。

 <ar4>dis bgp  routing-table  

 

结果:由于ar2上的ar1方向network的路由,是*>的路由,ar2将其传递给ar4,ar4再由选路规则,选出*>的路由,非*>的路由不予传递。

思考2:在ar2的e0/0/1接口接收路由时,对其进行Local_Preference 属性的修改 。

[ar2] route-policy 1 permit node 10
           if-match ip-prefix 192.168.1.0
           apply local-preference 1000  //修改local-preference属性为1000
        route-policy 1 permit node 20

[ar2]ip ip-prefix 192.168.1.0 index 10 permit 192.168.1.0 24 //前缀列表匹配路由

[AR2-bgp]peer 24.1.1.1 route-policy 1 import  //接收对24.1.1.1邻居的路由通过route-policy进行过滤。

[ar2]dis bgp  routing-table 

结果:情况正常

[ar4]dis bgp  routing-table 

结果:都是同一个AS,为什么该Local_Preference 属性,在ar4里没有被携带?

[ar4]display bgp routing-table peer 24.1.1.2 received-routes    // 我发给邻居了哪些路由
[ar4]    //结果为空,代表peer  24.1.1.2 没有给我传递任何路由条目。

扩展命令:

[huawieI]dis bgp routing-table peer 24.1.1.4 ? (该命令只可跨一个bgp邻居)
  accepted-routes      //
  advertised-routes   //  我发给邻居的那些路由
  received-routes      // 我从该邻居收到的那些路由

4,本地始发的 BGP 路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合 >自动聚合 >network>import> 从对等体学到的

证明 1 :本地始发的 BGP 路由优于从其他对等体学习到的路由(仅仅对ar1分析)

[ar2]ip route-static 192.168.1.0 255.255.255.0 NULL0

[ar2-bgp]network 192.168.1.1 24

 结果:显然,优选了本地始发的(本地network的路由)路由,*>的路由

证明 2:对于本地始发的路由优先级:优选手动聚合 >自动聚合 >network>import> 从对等体学到的

[ar1]ip route-static 172.16.0.0 255.255.255.0 NULL0

[ar1-bgp]network 172.16.0.0 255.255.255.0
[ar1-bgp]import-route static

[ar1]dis bgp routing-table                         

结果:目前为i表示network来的;?表示import来的,显然优选了network了路由,没有选import的路由

证明 3:对于本地始发的路由优先级:优选手动聚合 >自动聚合 >network>import> 从对等体学到的

注意:自动聚合:只能自动聚合import-route进来的路由,且这个import-route进来的路由明细路由必须是best路由

 

[ar1]

ip route-static 172.16.0.0 255.255.0.0 NULL0    //掩码为16的
ip route-static 172.16.0.0 255.255.255.0 NULL0  //掩码为24的

 

[ar1-bgp]

summary automatic   //只可以进行主类的聚合,172.16.0.0 的主类的掩码是为 16的
network 172.16.0.0   //i的方式引入   ,这样可以得到一样的路由条目,区分度大。
import-route static     //?的方式引入

[ar1]dis bgp  routing-table  

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

*> 172.16.0.0                  127.0.0.1                  0                                                               ?      summary automatic 来的
*                                         0.0.0.0       0                                 0                               i      network进来的
*                                       0.0.0.0       0                           0                                ?      import-route static   来的
s> 172.16.0.0/24               0.0.0.0      0                              0                              ?   import-route static   来的  (向上关系依次增大)

 证明 4:对于本地始发的路由优先级:优选手动聚合 >自动聚合 >network>import> 从对等体学到的

[ar1]dis bgp  routing-table  

 如何区分手动聚合来的还是自动聚合来的

[ar1]dis bgp  routing-table  172.16.0.0

Paths: 4 available, 1 best, 1 select
BGP routing table entry information of 172.16.0.0/16:
Aggregated route. 手动聚合
BGP routing table entry information of 172.16.0.0/16:
Summary automatic route自动聚合

not preferredfor route type

BGP routing table entry information of 172.16.0.0/16:
Network route.  network

not preferredfor route type

BGP routing table entry information of 172.16.0.0/16:
Imported route.import
not preferredfor route type

5,优选 AS_Path 属性值最短的路由。(彼得时AS号的个数,而不是AS的种类)

!----公认必遵属性

@----第一个作用:用来记录每条BGP路由经过的AS,记录AS的原则为,在本AS内AS_Path 属性不是记录本地的AS号的,在选路时会优选as个数少的路径。

#-----第二个作用:用于EBGP路由防环:当路由器接收BGP路由时,会检查as-path属性(会有多个AS号)中是否携带本AS,如果携带则认为环路,则拒绝接收。

¥----实验:

证明1:选路时会优选as个数少的路径。

[ar7]ip route-static 192.168.1.1  24 NULL  0

[ar7-bgp]network 192.168.1.0

 

[ar1]undo ip route-static 192.168.1.1  24 NULL  0

 

[ar1-bgp]undo network 192.168.1.0

[ar2]dis bgp  routing-table  //ar2唯一真神

 结果:显然,ar5方向的network的路由更优秀。

思考2:如何由人为的来控制,AS属性的选路

[ar2]route-policy iaa-as permit  node  10

[ar2-route-policy]dis th
#
route-policy iaa-as permit node 10
if-match ip-prefix iaa
apply as-path 10 20 30 40 additive   //建议配置为apply as-path 5 5 5 5 additive  ,因为都是该路由始发区域的AS号,在后期不会意外的影响其他AS的选路的。
#
route-policy iaa-as permit node 20
#
return

[ar2]dis bgp routing-table

扩展命令:

[ar2-route-policy]apply  as-path none    //清空被if-macth所匹配到的路由的AS属性

[ar2-route-policy]apply as-path 10 20 30 40 ?
additive  //代表在原有as-path属性的基础上,在表项的as-path的左侧新增as号,所添加的AS号只看数量,不看AS是否重复。                
overwrite  //代表使用新增加的as号覆盖原有的as号。

思考  3 :AS属性的防环相关实验(下topo局部)

 

undo掉ar1和ar5de所有配置

ar4上的配置

interface LoopBack12
   ip address 100.1.1.1 255.255.255.0

bgp 234

   network 100.1.1.0 255.255.255.0

[ar2-bgp]peer  12.1.1.1 ignore

[ar1]dis bgp  routing-table  

[ar2]dis bgp routing-table  //

[ar2]      

结果:由于ar1发出的network的路由,已经携带了AS234了,也就是已经经过AS234过了的。

扩展命令:

[ar2-bgp]peer 45.1.1.5 allow-as-loop 1 //从该peer收到的路由条目中,as-path属性可以允许存在一个我的本地as。

[ar2-bgp]bestroute as-path-ignore //忽略as-path的优选条件,继续向下进行比较其余的条件。

[ar2-bgp]network 100.1.1.1 32 route-policy huawei   //在宣告本地路由时直接修改该路由的属性;该route-policy不需要写if-match和兜底,因为已经宣告了一个特定的路由来进行对于属性的修改了。

6. 优选 Origin 属性最优的路由。 Origin 属性值按优先级从高到低的排列是: IGP EGP Incomplete

!-----公认必遵属性

@----用来描述对应路由是如何进入BGP路由表里的

network      import-route       手动聚合        自动聚合 (手动聚合和自动聚合与 import-route的结果一样,都是?,只有network的才是 i

i:network
?:import-route  所有的聚合来的路由

e:从EGP引入来的(自然情况下见不到了)
规则:i>e>?

#----实验配置

实验 1 :i>?的证明

[ar4]dis bgp  routing-table  

[ar4]ip ip-prefix 1 index 10 permit 192.168.1.0 24 

[ar4-route-policy]dis th
#
route-policy OGN-1 permit node 10
if-match ip-prefix 1
apply origin incomplete
#
route-policy OGN-1 permit node 20
#
return

[ar4-route-policy]dis th
#
route-policy OGN-2 permit node 10
if-match ip-prefix 1
apply origin igp
#
route-policy OGN-2 permit node 20
#
return

[ar4-bgp]peer  24.1.1.2 route-policy OGN-1 import  

[ar4-bgp]peer  45.1.1.5 route-policy OGN-2 import 

 [ar4]dis bgp  routing-table  

结果:显然为i>?

扩展 2 :e>?的证明

[ar4-route-policy]apply origin ?
egp 
igp 
incomplete 

[ar4-route-policy]apply  origin egp  1 (这个AS号没有意义的,但是必须要跟的这个号码)

[ar4]dis bgp  routing-table  

结果:显然为e>?。由数学可得,规则i>e>?成立。

 7,优选 MED 属性值最小的路由。

!-----可选非过度属性

@-----MED可以理解为BGP的cost值

#------用于影响邻居到本AS的选路策略(在路由始发的路由器上进行修改),取值范围0-42亿,越小越优

¥-----在宣告IGP路由时,MED值会继承IGP里面的cost值,IGP的度量值会变成BGP的MED值,在bgp路由表里面呈现。
&-----MED值是如何在邻居之间进行传递的:
1    对于本地始发的路由,在传递给IBGP和EBGP邻居时会携带MED属性。
2    对于从IBGP邻居接收的路由,传递给EBGP邻居时不会携带MED属性。
3    对于从EBGP邻居接收的路由,传递给IBGP邻居时会携带MED属性。
4    对于从EBGP邻居接收的路由,传递给EBGP邻居时不会携带MED属性。
      特殊注意:MED属性只能影响下一跳邻居AS设备的选路
5    一般在使用MED属性控制邻居AS选路时,都会在边界路由器通过route-policy进行MED修改

@---- default med实验

 

官方文档:default med命令用来配置BGP路由的缺省MED值。
                 大白话:当MED为空的时候,使用缺省MED值(default med)来对待,默认为0.

实际现象为:当配置了该命令以后,对于本地始发的起源为?的路由有效,对起源为i的无效,MED值该为多少那就是多少,
                      在传递给自己的IBGP邻居时MED值不变(不管你现在med值为空还是有值),传递给自己的EBGP邻居时MED值修改为default med                       (不管你现在med值为空还是有值)。

 

#
route-policy iaa permit node 10
if-match ip-prefix 1
#
ip ip-prefix 1 index 20 permit 2.2.2.2 32
#

[ar4-bgp]default med  1000  //针对本设备始发的路由,若在

<ar5>dis bgp routing-table//查看ar5的bgp路由表,由于对于从IBGP邻居接收的路由,传递给EBGP邻居时不会携带MED属性。

结果:按官方文档来讲,MED值若为空,会按照该命令default med 1000所配置的默认cost为 1000来设置。但是实际现象为,MED值非为空,但其ebgp邻居却修改为1000,就是只针对传递给EBGP邻居时MED值修改为default med的值(不管你现在med值为空还是有值),ibgp则是MED值不变(不管你现在med值为空还是有值)。

¥----实验配置需求(以下topo局部)

[ar1]ip route-static 100.1.1.0  24 NULL  0

[ar1-bgp]network 100.1.1.0 24

[ar3]dis bgp routing-table  //当前是因为ebgp优于ibgp

[ar4]dis bgp routing-table   //当前是因为ebgp优于ibgp

你作为AS12的管理员,当100.1.1.0/24路由传递给AS23时,默认情况下,AR3会优选AR1-AR3路径,AR4会优选AR2-AR4路径、作为管理员,你可以登陆AR1\AR2,不可以登录AR3、AR4。通过修改属性,达到AS34访问100.1.1.0/24时优选AR1-3路径

R1:
peer 13.1.1.3 route-policy MED export

ip ip-prefix 1 index 10 permit 100.1.1.0 24

route-policy MED permit node 10
 if-match ip-prefix 1
 apply cost 200
#
route-policy MED permit node 20

R2:
peer 24.1.1.4 route-policy MED export

ip ip-prefix 1 index 10 permit 100.1.1.0 24

route-policy MED permit node 10
 if-match ip-prefix 1
 apply cost 300
#
route-policy MED permit node 20

[ar3]dis bgp routing-table  

[ar4]dis bgp routing-table

 

结果:确实,MED越小越优秀。

8,优选从 EBGP 对等体学来的路由( EBGP 路由优先级高于 IBGP 路由)。(上面以掩饰)

9,优选到 Next_Hop IGP 度量值最小的路由

!---

!----实验(以下topo局部)

前提配置,ibgp全互联,在bgp进程下,network对应的具体路由。(在全互联的情况下才便于好的展示,Next_Hop  IGP 度量值

前提分析,由于ar1和ar5方向的路由,在由ar3的ibgp邻居传递来时,Next_Hop 到对应的ibgp邻居 IGP 度量值都为1。

10/11,到这如果以上8条属性都选不出来是,那么可以手动进行BGP路由的负载分担(ospf的话可以自动的进行负载分担,而bgp需要手动开启分担),BGP负载分担的前提是前9条属性完全一致!!!连as-path都必须一样!(AS的数量和摆列顺序和AS号都要一模一样)

配置负载分担的命令为

[ar3-bgp]maximum load-balancing ?
INTEGER<1-32>       //配置负载分担的路由条目数量
ebgp  
ibgp  

 

[ar3-bgp]maximum load-balancing 2

配置演示:

[ar3]dis bgp routing-table

 结果:目前落选的原因是" 优选 Router ID Orginator_ID )最小的设备通告的路由"

[ar3-bgp]maximum load-balancing  2  //配置当前9条都选不出来时,配置bgp的手动负载分担。

#
route-policy iaa-a permit node 10
if-match ip-prefix iaa
apply as-path 1 overwrite  //使用AS1来覆盖所有
#
route-policy iaa-a permit node 20
#
ip ip-prefix iaa index 10 permit 100.1.1.0 24

#

peer 34.1.1.4 route-policy iaa-a import

#

[ar3]DIS IP routing-table 100.1.1.1

12,优选具有最小 IP 地址的对等体通告的路由

小结:以上13条选路原则都说完了。

十七,bgp的团体属性

1,可选过度属性

2,作用:用于对路由进行标记,类似于IGP的TAG值(IGP的TAG比较单一,BGP的团体属性非常丰富,可以在一条路由上标记多个团体)。使用团体(团体就是一个标记,理解为打了一个或多个标签tag)来对BGP路由进行控制,主要控制传播范围,以及属性修改。

3,团体属性的分类:

!-----公认团体属性

1    Internet: 设备在收到具有此属性的路由后,可以向任何BGP对等体发送该路由。(所有bgp路由都有该属性,发送时也要遵循路由的选路规则)

2    No Advertise: 设备收到具有此属性的路由后,将不向任何BGP对等体发送该路由。

-----------------------------------------------实验配置--------------------------------------------

[ar2]ip route-static 100.1.1.0 255.255.255.0 NULL0

[ar2-bgp]network 100.1.1.1 24

[ar2-route-policy]dis th
#
route-policy iaa permit node 10
 apply community no-advertise
#
return

[ar2-bgp]network 100.1.1.1 24 route-policy  iaa  //在network该路由时,给其添加 route-policy  iaa 策略里配置的属性。

<ar1>dis bgp  routing-table  
<ar1>
    
<ar4>dis bgp  routing-table 
<ar4>

结果:ar2的BGP对等体都没有学到ar2network的路由。

[ar2-route-policy]apply  community ?
  INTEGER<0-4294967295>  Specify community number
  STRING<3-11>           Specify aa<0-65535>:nn<0-65535>
  internet               Internet(well-known community attributes)
  no-advertise           Do not advertise to any peer (well-known community
                         attributes)
  no-export              Do not export to external peers(well-known community
                         attributes)
  no-export-subconfed    Do not send outside a sub-confederation(well-known
                         community attributes)
  none                   No community attribute

3    No_Export: 设备收到具有此属性的路由后,将不向AS外发送该路由

-----------------------------------------------实验配置(同上)------------------------------------------

[ar2-route-policy]dis th
#
route-policy iaa permit node 10
 apply community   no-export
#
return

那么对应的:ar1没有收到network的路由,ar4有收到network的路由,但是ar5竟然收到了network的路由。

但是:ar4收到该network的路由后,该路由没有携带No_Export属性了

这是因为:团体属性默认情况下不会被携带和传递的,必须通过手动开启团体属性传递功能。

其命令为: peer 4.4.4.4 advertise-community    //指定想要传递给哪个邻居peer该团体属性。需要给哪些peer传递,就和哪些Peer开启通告团体功能

随后结果:ar1没有收到network的路由,ar4有收到network的路由,但是ar5没收到了network的路由。

4    No_Export_Subconfed: 设备收到具有此属性的路由后,将不向AS外发送该路由,也不向AS内其他子AS发布此路由(联盟场景内)

应用场景:bgp的联盟(主AS和子AS)

在大AS里可以存在多个子AS

5    当命令apply community internet no-advertise no-export no-export-subconfed 有多个公认团体属性可以同时配置给同-条路由.
这个时候,会选择传播范围小的生效。传播范围最小的为no-advertise。

十八: 自定义团体属性
1,使用aa:nn方式:aa和nn的取值范围都是0~65535,本质就是一个普通的标签了,识别对应路由的一个能力。和osfp的一样,只是配置匹配对应的标签的路的命令不一样,两个数值的意义都是由管理员定义的。一般情况下,aa会使用as号来表达,nn由管理员自定义。

(1.45实验)

十九:BGP聚合

1、BGP聚合功能:
a.可以指向BGP邻居发送聚合后的路由条目,从而减少路由表项(优化)
b.如果明细路由产生震荡(删除部分的明细路由),那么聚合后的路由不受影响(聚合后的路由任然存在),和ospf一样。
c.简化路由表项,到达节省设备资源的目的
2、自动聚合:summary automatic
2.1 只能进行主类聚合(A.B.C三类),精确度较差。
2.2 只能针对import-route(static)进来的路由进行自动聚合,并且必须是best路由。(前面都有讲到过)
2.3 这个功能默认是关闭的,需要手动开启的。
2.4 默认抑制明细路由传递
2.5 对BGP属性的修改较差,体现在,[ar3-bgp]summary automatic  ? //该命令后无法在调用router-poilcy等此类工具。
                                                         <cr> 

3、手动聚合:
3.1 只要是在本地BGP表里的有效路由,就可以被手动聚合。
3.2 当所有明细消失以后,手动聚合的路由才会消失。
3.3 当路由器执行了手动聚合后,默认将会在路由器a产生一条指向Null 0接口的的汇总路由,这是为了当明细消失后用于防止环路用的。(环路是由于一个明细路由消失了后,汇总路由找不到了,会一直被环路下去)

3.4 手动聚合后的路由继承属性的情况:

 

a.协议首选值,本地优先级,是不会继承的,按照默认的走。

 

b.起源属性会被继承 

      原则:如果明细的起源属性一致(都是?或者都是i),那么聚合后的路由直接继承?或者i的起源属性。
      如果明细的起源属性不一致,那么继承的规则为 ?>e>i,如i和?的两条明细路由,会继承?的路由。

3.5 在手动聚合后可以调用其他参数,用来其他配置,比如抑制明细

 还可以只对部分明细来进行抑制,配置命令。

[ar3-bgp]aggregate  192.1.1.1  23 detail-suppressed  suppress-policy  iaa  //在手动聚合和抑制对应明细路由为 192.1.1.1  23的汇总路由时,可以调用iaa策略,由iaa策略来选择性抑制对应的明细路由。

[ar3]route-policy iaa-a deny node 10           //策略正常往后配置即可。
Info: You are overwriting this sequence.

[ar3]route-policy iaa-a deny node 20
posted @ 2023-10-09 00:02  iaaaa  阅读(85)  评论(1编辑  收藏  举报