自治系统:AS

AS是一组被统一管理的路由器,他们使用相同的内部网关路由协议(IGP),并且在同一个AS内使用相同的度量值。不同的AS使用不同的IGP,采用不同的度量值。

想要AS之间通信,使用外部网关路由协议。

内部网关路由协议IGPRIPEIGRPOSPF

外部网关路由协议:BGP

 

BGPbroader  gateway  protocol边界网关路由协议

基于TCP179端口

属于高级路径矢量协议,路径来源于IGP

BGP对于路由的承载数目达到无穷大(10W

BGP的特性:

(1)可靠性:采用TCP连接,并且通过keepalive机制来保持联系

(2)稳定性:具有NSF(不中断连接)

(3)可拓展性:公网上有超过10W条路由条目

(4)灵活性

 

IGP:路由器之间称为邻居neighbor,自治系统内部交换信息,负责数据传输。

BGP:路由器之间称为对等体peer(配置中写作neighbor),类似于IGP的邻居,负责路由传输。

 

BGP的两种对等体形式:

(1)IBGP:内部BGP,两台设备在一个AS内建立的对等体,通告时间5s

          对等体在建立的时候,不需要直接相连(底层一定要ping通),

          只要建立对等体的更新源通过IGP可达,即可建立。

(2)EBGP:外部BGP,两台设备在不同AS内建立对等体,通告时间30s

           建立对等体的时候,通常情况下,需要直接相连。

 

BGP在满足下列条件之一,才能够使用:

(1)AS允许分组穿越自身,并前往其他的自治系统(服务提供商)

(2)AS有多条到其他自治系统的连接

(3)必须对数据流进入和离开AS的方式进行控制

满足下列条件之一,则不能使用BGP

(1)只有一条连接外部的路径

(2)设备没有足够的空间和处理能力来处理BGP的路由更新

(3)对于BGP的选路和策略没有足够的了解

(4)BGP对等体之间带宽很低,没有足够带宽为BGP更新提供可靠传输

 

BGPTTL

TTLtime  to  live生存时间,指数据包每经过一条网络设备,TTL1,用于数据包防环。范围1-255,字段长度为8位。

默认情况下:IBGP之间的数据包TTL255

            EBGP之间的数据包TTL1

            RIPTTL2

            EIGRPTTL2

            OSPFTTL1

 

BGP的信息类型:

(1)OPEN:打开消息,包含了bgp router-id、版本号,类似于hello

(2)Keepalive:保持激活信息,类似于hold

(3)Update:更新包

(4)Notification:通知包,当BGP发生故障时发送,检测错误

 

BGP的三张表

(1)邻居表:show  ip  bgp  summary

(2)数据表:show  ip  bgp

(3)路由表:show  ip  route  bgp

 

BGP邻居建立的工作状态

1、Idle:标志正在启动BGP进程,即初始状态

2、Connect:标志正在进行TCP连接

3、Active:标志TCP连接建立失败,重新尝试建立邻居

4、Openstart:标志TCP连接建立成功,发送open报文建立bgp邻居

5、Open confirm:标志open参数协商成功,发送keepalive维持bgp邻居

6、Established:标志bgp邻居建立成功

 

外部邻居EBGP

对等体的建立:BGP利用指定的更新源建立邻居

指定的更新源:发出open报文的源地址,即TCP建立连接的本端地址

              EBGP邻居使用物理口作为更新源

              IBGP邻居使用环回口作为更新源

邻居建立的前提:更新源之间可达(能ping通)

 

 

EBGP的配置

router bgp 200

 bgp router-id 3.3.3.3

 neighbor 192.168.23.2 remote-as 100

 

内部邻居IBGP

IBGP指定的更新源:建议使用环回口作为更新源。

为了保证环回口之间作为更新源可达,底层使用IGP连通。

 

router bgp 100

 bgp router-id 1.1.1.1

 neighbor 2.2.2.2 remote-as 100

 neighbor 2.2.2.2 update-source Loopback0

 

 

查看BGP邻居

只要查看到最后一列有数字,即代表邻居建立成功。

数字表示邻居通过bgp传递来的路由。

 

关闭信息提示:(全局模式下)no  logging  console

清bgp进程(对bgp对任何改动之后都需要清bgp进程)

硬清:clear  ip  bgp  *

软清:clear  ip  bgp  *  soft  (首选)

 

BGP的宣告:network路由宣告

Router  bgp  AS

  Network  网段  mask  掩码

  Network  1.1.1.1  mask  255.255.255.255

  Network  192.168.12.0  mask  255.255.255.0

Bgpnetwork是指路由宣告,只要本地路由表中存在,就可以宣告,但是宣告的时候所接的掩码。必须是路由表中的掩码,将存在于路由表中的网段,放入BGP的路由表中,BGP之间传递的路由只能是BGP表中的内容。

 

 

 

当一台路由器(R2)既有EBGP邻居又有IBGP邻居时,该路由器在对内部邻居传输路由信息时下一跳会指向外部邻居,从而导致路由信息不优

 

需要在既有EBGP邻居又有IBGP邻居的路由器上(R2),强行将下一跳指向自己。

router bgp 200

 bgp router-id 2.2.2.2

 neighbor 3.3.3.3 remote-as 200

 neighbor 3.3.3.3 update-source Loopback0

 neighbor 3.3.3.3 next-hop-self

 neighbor 192.168.12.1 remote-as 100

 

 

BGP表中的符号:

(1)如果NEXT HOP上的地址是0.0.0.0,则说明这条路由是由自身宣告出去的,注意对应的特殊路由器(既有EBGP邻居又有IBGP邻居)写上next-hop-self

(2)* 表示被BGP路由器所承认的有效路由

(3)> 表示BGP认为的最优路由,会放入BGP路由表中

PSBGP只会传递自己认为最优的路由条目

 

内部邻居的水平分割:从内部邻居收到的路由不传给下一个内部bgp邻居

解决办法:

1、内部邻居全互联:所有的内部路由,两两之间建立内部邻居

2、配置路由反射器RR

 

 

BGP的对等体组peer-group

作用简化IBGP内部建立邻居的步骤

router bgp 300

 neighbor IBGP peer-group   /// 建立对等体组,命名为IBGP,本地有效

 neighbor IBGP remote-as 300  /// 建立对等体组邻居

 neighbor IBGP update-source Loopback0 ///确定对等体组更新源

 neighbor IBGP next-hop-self  ///将对等体组传递路由下一跳指向自己

 neighbor 5.5.5.5 peer-group IBGP  ///添加组成员

 neighbor 6.6.6.6 peer-group IBGP

 neighbor 7.7.7.7 peer-group IBGP

 

路由反射器RR route-reflector-client)的配置规则:

(1)RREBGP收到的路由,会直接反射给客户端和非客户端

(2)RR从客户端收到的路由,会反射给客户端、非客户端、EBGP邻居

(3)RR从非客户端收到的路由会反射给客户端、EBGP邻居

配置RR

R4配置路由反射器,并指其他的邻居为自己的客户端

Router  bgp  300

  Nei  5.5.5.5  route-reflector-client

  Nei  6.6.6.6  route-reflector-client

  Nei  7.7.7.7  route-reflector-client

或者Nei  IBGP  route-reflector-client

PS:配置路由反射器之前,带源trace一下,到哪一跳不同,就在下一跳上配置路由反射器。

 

用环回口建立Ebgp邻居

第一步:保证更新源可达

写静态

Ip  route  2.2.2.2  255.255.255.255  192.168.12.2

第二步:用环回口建立EBGP邻居

Router  bgp  100

Bgp  router-id  1.1.1.1

Nei  2.2.2.2  remote-as  200

Nei  2.2.2.2  up  lo0

Nei  2.2.2.2  ebgp-multihop  255  ///修改ebgpTTL255

 

 

 

1、BGP的手动聚合(汇总)

聚合成:172.16.8.0/21  172.16.8.0  255.255.248.0

R3

Router  bgp  300

  aggregate-address  172.16.8.0  255.255.248.0

 ///依旧能看见明细路由

 

Router  bgp  300

aggregate-address  172.16.8.0  255.255.248.0  summary-only

                     ///不显示明细路由,只看到一条聚合路由

 

2、BGP的自动聚合

(1)当采用宣告的形式学习路由

     A.如果宣告的是无类路由,那么自动聚合不成功

     B.如果宣告的是有类路由,自动聚合成功

(2)当采用重分发的形式学习路由,自动聚合成功

 

BGP学习路由的方式:

(1)宣告

(2)重分发

     Router  bgp  100

       Red  connected   ///将直连路由重分发进bgp

BGP中,一条路由以宣告的形式或者聚合的形式进入BGP表,则在表中会打上i的标记;如果是以重分发的形式进入BGP表,那么会在表中打上的标记。

 

 

BGP的属性

 

(1)weight权重值:描述对邻居路由器的优先程度,越大越优

默认情况下。对于邻居的weight值为0,本地weight值为32768,传播的范围在自身AS内。

方法一:针对一条路由做精确修改

R1

ip prefix-list 4 permit 4.4.4.4/32  ///抓取4.4.4.4/32的路由

route-map  weight  permit  10  ///weight”指的是route-map的名称

 match  ip  address  prefix-list  4

 Set  weight  1    ///设置权值为1

route-map  weight  permit  20  ///写一条空的route-map,放行没有抓取的路由,对这部分路由不做任何操作

Router  bgp  100

  Nei  3.3.3.3  route-map  weight  in  ///BGP的进程下面调用route-map,在权值调用时只能之用in方向

方法二:针对所有路由的路径进行修改

R1

Router  bgp  100

  Nei  3.3.3.3  weight  1

(2)本地优先级local-preference:默认的本地优先级为100,最大为200,越大越优,传播范围自身AS

方法一:针对一条路由做修改

R3

ip  prefix-list  1  permit  172.16.11.0/24

route-map  LOC  permit  10

 Match  ip  address  prefix-list  1

 set  local-preference  101

route-map  LOC permit  20

Router  bgp  100

  neighbor  1.1.1.1  route-map  LOC out ///修改优先级,一般方向为out

方法二:针对所有的路由做修改

Router  bgp  100

  Bgp  default  local-preference  101

(3)起源属性:描述bgp路由是以什么样的形式进入bgp协议的

取值:按照优先级排列为igp>incomplete

    1igp:表示该路由是以宣告或者聚合的形式进入bgp

    2incomplete:表示路由是以重分发的形式进入bgp

    3egp

(4)下一跳属性:next-hop-self

(5)As-path:描述本地到达目标路由所经过的AS号,按照顺序排列

作用:可用于防环,as-path的路径越短越优。

ip prefix-list 12 permit 172.16.12.0/24

route-map AS permit 10

 match ip address prefix-list 12

 set as-path prepend 300

route-map AS permit 20

Router bgp 200R4

  neighbor 192.168.24.2 route-map AS out ///out方向是指增加的AS300会在原来的AS200之后增加

 

Router bgp 100R2

  neighbor 192.168.24.4 route-map AS in ///in方向是指增加的AS300会在原来的AS200之前增加

 

(6)MED属性(类似于IGPmetric

默认为0,越小越优,在同一个AS内传递,只比较来自同一个AS内的各EBGP邻居路径的MED属性。

R2

ip prefix-list 4 seq 5 permit 4.4.4.4/32

route-map MED permit 10

 match ip address prefix-list 4

 set metric 1

route-map MED permit 20

Router bgp 100

  nei 192.168.24.4 route-map MED in

 

 

 

BGP13条选路原则(从上往下,依次匹配)

1、优选最大weight的路由(范围0-65535

2、优选最大local-pref值的路由

3、优选从本地始发的路由(下一跳为0.0.0.0

4、优选as-path数量最少的路由

5、根据origin属性,优选具有最低的起源类型的路由(IGP>EGP>incomplete

6、优选最MED值的路由(只有EBGP要比较,IBGP不需要比较)

7、外部路由优先于联盟,外部路由优先于内部路由

8、优选能过最近的IGP邻居到达的路径(优选对BGP下一跳具有最低的IGP度量值的路径)

9、如果在路由器上配置了maximum-path X2-6),则实现负载均衡

10、如果都是外部路由,优选最老的路由(最先被学习到的路由)

11、如果在同一时间学习到多条到达同一目的地的路由,优选最小的bgp router-id的路由

12、如果路由是从路由反射器上学习到的,优选最小的cluster-id的路由

13、优选具有最低对等体地址接收到的路径(邻居ip地址最小的)

 

配置路由反射器的cluster-id

Router  bgp  100

  Bgp  cluster-id  1.1.1.1

配置bgp的负载均衡

Router  bgp  100

  Maximum-path  X  /// X的范围2-6

 

 

 

路由过滤

 

第一种:使用前缀列表进行过滤

一条路由想要在前缀列表的抓取范围内,必须满足两个条件:

1、前缀要相同    2、掩码必须要在抓取的范围内

需求:在R2上写一条prefix-list,在bgp表中,同时看不见R3lo1lo2

lo1:172.16.11.1/24  lo2172.16.12.1/24

Ip  pre  2  deny  172.16.0.0/16  ge  17  le  32 //抓取要过滤的路由

Ip  pre  2  permit  0.0.0.0/0  le  32  ///放行其他所有路由

Router  bgp  200

  Nei  192.168.23.3  prefix-list  2  in  ///bgp下调用

注意前缀列表的序号,写的时候默认隐藏,show  run  可以看到

ip prefix-list 2 seq 5 deny 172.16.0.0/16 ge 17

ip prefix-list 2 seq 10 permit 0.0.0.0/0 le 32

 

 

第二种:使用分发列表(distribute)进行路由过滤

(在使用分发列表之前,使用ACL或者前缀列表抓取路由)

需求:R3过滤掉R4lo0的路由

Access-list  4  deny  host  4.4.4.4  

Access-list  4  permit  any

Router  bgp  300

  Nei  192.168.23.2  distribute-list  4  in  ///在指邻居的时候调用

 

第三种:使用route-map进行过滤

(在使用route-map之前,先使用ACL或者前缀列表抓取路由)

R2R4上查看过滤掉3.3.3.3/32的路由

ip prefix-list 3 deny 3.3.3.3/32

ip prefix-list 3 permit 0.0.0.0/0 le 32

route-map A permit 10

 match ip address prefix-list 3

Router  bgp  200

   neighbor 192.168.24.4 route-map A out  ///在跟R4建立邻居时调用

或者:

Ip  prefix-list  3  permit  3.3.3.3/32

route-map  A  deny  10

 match  ip  address  prefix-list  3

route-map  A  permit  20

Router  bgp  200

   neighbor  192.168.24.4  route-map  A  out

 

第四种:使用as-path列表

因为bgp的路由是携带as-path属性的,因此我们可以通过as-path来进行过滤,那么需要匹配路由的as-path必须要以正确规则的形式表达。

. 表示任何一个单个的字符,包括空格

* 表示字符出现0次或者多次

^ 表示一行的开始

- 类似于逗号

$ 表示一行的结束

举例:

^123$ 表示只匹配了AS123,起源去AS123的路由并且不经过其他任何AS

^$ 表示没有经过任何的AS,只匹配了本地AS

.* 表示匹配所有

^12[0-3]$  表示匹配了AS120  AS121  AS122  AS123

^12.  表示匹配了 AS 120-129 AS 12

-12-  表示匹配经过了AS 12的路由

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐