天天看点

BGP(边界网关协议)实现全网互通

@[toc]

bgp——边界网关协议:是一种实现自治系统as之间的路由可达,并选择最佳路由的距离矢量路由协议。

as,指的是在同一个组织管理下,使用相同选路策略的设备的集合。

不同as通过as号区分,as号取值范围1~65535,其中64512-65535是私有as号。iana负责as号的分发。

中国电信163as号:4134

中国电信cn2as号:4809

中国网通as号:9929

1.bgp使用tcp作为其传输层协议(监听端口号为179),提高了协议的可靠性。

2.bgp是外部路由协议,用来在as之间传递数据,对稳定性要求非常高。因此用tcp协议的高可靠性来保证bgp协议的稳定性。

3.bgp的对等体之间必须逻辑上连通,并进行tcp连接。目的端口号为179,本地端口号任意。

4.bgp对等体和igp对等体不同,bgp对等体(peer)是指使用tcp建立连接的两端,而非与igp同概念的直连邻居,只要tcp能够建立连接并不一定需要直连。

5.bgp本身只负责控制路由,数据转发依然靠静态或igp路由。

6.bgp支持无类别域间路由cidr。

7.路由更新时,bgp只发送更新的路由,大大减少了bgp传播路由所占用的带宽,适用于在internet上传播大量的路由信息。

8.bgp是一种增强的距离矢量路由协议,从设计上避免了环路的发生。

9.as之间:bgp通过携带as_path信息标记途经的as,带有本地as号的路由将被丢弃,从而避免了域间产生环路。

10.as内部:bgp在as内学到的路由不会再通告给as内的bgp邻居,避免了as内产生环路。

11.bgp提供了丰富的路由策略,能够对路由实现灵活的过滤和选择。

12.bgp提供了防止路由振荡的机制(路由衰减),有效提高了internet网络的稳定性。

13.bgp易于扩展,能够适应网络新的发展(ipv4单/组播、 vpv4单/组播)。主要是通过tlv进行扩展。

ebgp:运行于不同as之间的bgp称为ebgp。为了防止as内产生环路,当bgp设备接收ebgp对等体发送的路由时,会将带有本地as号的路由丢弃。

ibgp:运行于同一as内部的bgp称为ibgp。为了防止as内产生环路,bgp设备不将从ibgp对等体学到的路由通告给其他ibgp对等体,并与所有ibgp对等体建立全连接。为了解决ibgp对等体的连接数量太多的问题,bgp设计了反射器和bgp联盟。

c从e学习到的ibgp路由,由于水平分割规则的限制,不能够传递给b路由器,这将导致b无法学习到f通告的bgp路由。但是为了解决这个问题,e可以通过bgp连接,与b直接形成逻辑连接,达到全网连通的目的。

BGP(边界网关协议)实现全网互通

bgp的router- id在bgp网络中必须是唯一的,可以采用手工配置,也可以让设备自动选取。缺省情况下,bgp选择设备上的loopback接口的ipv4地址作为bgp的router -id。如果设备上没有配置loopback接口,系统会选择接口中最大的ipv4地址作为bgp的router- id。

一旦选出router-id,除非发生接口地址删除等事件,否则即使配置了更大的地址,也保持原来的router-id。

bgp对等体间通过以下5种报文进行交互,其中keepalive报文为周期性发送,其余报文为触发式发送:

open报文:用于协商bgp对等体的各项参数,主要包括bgp版本(v4) 、as号等信息,建立bgp对等体连接。open是tcp连接建立后发送的第一个报文

update报文:用于在对等体之间交换路由信息。

连接建立后,有路由需要发送或者路由变化时,发送update通告对端可达或者撤销路由信息及路径属性。

notification报文:用于中断bgp连接。

当bgp在运行中发现错误时,发送notification报文通告bgp对端,随后与之相关的邻居关系将被关闭。

keepalive报文:用于保持bgp连接。( 保活)

定时发送keepalive报文以保持bgp对等体关系的有效性。响应收到的正确的open报文

route-refresh报文:用于在改变路由策略后软复位bgp路由表请求对等体重新发送路由信息。只有支持路由刷新(route-refresh)能力的bgp设备会发送和响应此报文。

bgp对等体的交互过程中存在6种状态机:空闲(idle) 、连接(connect) 、活跃(active) 、open报文已发送(opensent) 、open报文已确认(openconfirm) 和连接已建立(established) 。

在bgp对等体建立的过程中,通常可见的3个状态是: idle、 active 和established。

●如果tcp连接成功,那么bgp向对等体发送open报文,并转至opensent状态。

●如果tcp连接失败,那么bgp转至active状态,反复尝试连接。

●如果连接重传定时器超时,bgp仍没有收到bgp对等体的响应,那么bgp继续尝试和其它bgp对等体进行tcp连接,停留在connect状态。

●如果tcp连接成功,那么bgp向对等体发送open报文,关闭连接重传定时器,并转至opensent状态。

●如果tcp连接失败,那么bgp停留在active状态。

●如果连接重传定时器超时,bgp仍没有收到bgp对等体的响应,那么bgp转至connect状态。

●如果收到的open报文正确,那么bgp发送keepalive报文,并转至openconfirm状态。

●如果发现收到的0pen报文有错误,那么bgp发送notification报文给对等体,并转至idle状态。

●如果收到正确的update或keepalive报文,那么bgp就认为对端处于正常运行状态,将保持bgp连接。

●如果收到错误的update或keepalive报文,那么bgp发送notification报文通知对端,并转至idle状态。

●如果收到notification报文,那么bgp转至idle状态。

●如果收到tcp拆链通知,那么bgp断开连接,转至idle状态。

●route-refresh报文不会改变bgp状态。

BGP(边界网关协议)实现全网互通

bgp设备将最优路由加入bgp路由表,形成bgp路由。bgp设备与对等体建立邻剧关系后,采取以下交互原则:

直连建立对等体需要注意的点

建立ibgp对等体时要让下一跳可达,处于边界的ibgp对等体需要将下一跳指向自己,这样才能建立ibgp对等体。

用环回网口建立邻居需要注意的点

需要修改更新源,默认更新源是物理接口,需要修改成环回网口,建立ibgp对等体时要保障下一跳可达,处于边界的ibgp对等体需要将下一跳指向自己,这样才能建立ibgp对等体

建立ebgp对等体时因为ebgp只能传一跳,在建立ebgp对等体时,要修改ebgp多跳的跳数为2以上(自己环回到对端环回时两跳,默认一跳)

关于为什么要用环回网口建邻居

原因时环回网口稳定,只要路由器启动着,环回网口就不会down,而物理链路可能会受线路或者接口等因素的影响导致对等体关系有问题,因而一般bgp建立对等体都是环回网口来建

[ ]bgp (bgp编号)

[ -bgp]router-id (router-id)

[ -bgp]peer (同一个as中其他对等体的回环口ip地址) as-number (所属的as编程)

[ -bgp]peer (同一个as中其他对等体的回环口ip地址) connect-interface loopback0(配置的回环口)

更新发送bgp报文的接口为loopback0接口

ebgp配置

[ -bgp]peer (另一个as的ebgp的回环口ip地址) as-number (ebgp邻居所属的as编程)

[ -bgp]peer (另一个as的ebgp的回环口ip地址) connect-interface loopback0(配置的回环口)

[ -bgp]peer (另一个as的ebgp的回环口ip地址) ebgp-max-hop (最大跳数)

ebgp报文允许的最大跳数最小应改为2(默认为1),因不是直连loopback0接口

[ -bgp]peer (同一个as中其他对等体的回环口ip地址)next-hop-local

asbr从ebgp邻居学习到的路由传递给ibgp邻居时,路由下一跳改为自己

[ -bgp]network (自己的回环接口ip地址)

ebpg用于配置静态路由或igp路由的回环网口ip需要在两端ebgp都宣告

[ -bgp]network (学习到的邻居路由)

宣告指定的从本区域ibgp邻居学到的路由给ebgp邻居

[ ]ip route-static (ebgp邻居的回环口ip地址) (ebgp邻居的回环口子网掩码) (对面路由器的接口)

两个as间运行静态路由

1)路径属性

(1)定义

路径属性:path attributes,作用类似于metric(度量标准),用于度量bgp的路由优劣(用来进行选路)

(2)分类

公认强制属性:所有的bgp的update消息都要包含该属性

as路径(as-path)

下一跳(next-hop)

起源(origin)

公认自由属性:该属性是可选可不选的,但是所有的bgp进程都能识别

本地优先级(local preferent)

可选传递属性:即使bgp进程不能识别该属性,也会继续传递下去

团体属性(community)

可选非传递属性:如果bgp进程不能识别该属性,可以忽略这条update,并且不传递下去

med

2)bgp选路原则

(1)如果此路由的下一跳不可达,忽略此路由

(2)preferred-value值数值越高越优先,华为私有属性,仅本地有意义

(3)local-preference值最高的路由优先

(4)聚合路由优先于非聚合路由

(5)本地手动聚合路由的优先级高于本地自动聚合的路由

(6)本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由

(7)as-path的长度最短的路径优先

(8)比较origin属性,igp优于egp,egp优于incomplete

(9)选择med较小的路由

(10)ebgp路由优于ibgp路由

(11)bgp优先选择到bgp下一跳的igp度量值最低的路径

当以上全部相同,则为等价路由,可以负载分担(注意:as_path必须一致,当负载分担时,以下3条原则无效)

(12)比较cluster_list长度,短者优先

(13)比较originator_id(如果没有originator_id,则用router_id比较),选择数值较小的路径。

(14)比较对等体的ip地址,选择ip地址数值最小的路径。

3)bgp属性选路配置

bgp属性选路配置共12种方法,这里只提3种常用方法

(1)根据local-prefernce控制选路(越大越优)

为公认自决属性,用于告诉as中的路由器,哪条路径是离开as的首选路径

local_preference属性只能在ibgp对等体间传递(除非做了策略否则local_preference值在ibgp对等体间传递过程中不会丢失),而不能在ebgp对等体间传递,如果在ebgp对等体间收到的路由的路径属性中携带了local_preference,则会触发notifacation报文,造成会话中断;

但是可以在as边界路由器上使用import方向的策略来修改local_preference属性值。也就是在收到路由之后,在本地为路由赋予local_preference。

[r3]route-policy lop permit node 10

创建名为lop的路由策略

[r3-route-policy]apply local-prefernce 222

设置本地优先级为222

[r3-route-policy]quit

[r3]bgp 200

[r3-bgp]peer 4.4.4.4 route-policy lop export

在r3上对r1执行出站export方向的路由策略,使得其在收到对方通告的路由后,在路由的local-prefernce的属性值改为222,使得r4优选r3通告的路由;如果此路由策略在r4配置则方向为入站import

<r3>reset bgp all

重启bgp

<r3>refresh bgp all export

(2)使用as-path属性控制选路(越少越优)

为公认必遵属性,是前往目标网络的路由经过的as号列表

作用:确保路由在ebgp对等体之间传递无环;另外也作为路由优选的衡量标准之一;

路由在被通告给ebgp对等体时,路由器会在该路由的as_path中追加上本地的as号;路由被通告给ibgp对等体时,as-path不会发生改变

使用route-policy修改bgp路由的as_path:

apply as-path xxx additive 在已有as_path基础上追加xxx

apply as-path xxx overwrite 将已有as_path值替换(覆盖)成xxx

apply as-path none overwrite 清空路由的as_path属性

使用route-policy修改bgp路由的as_path时,可以在ebgp对等体之间改变ebgp路由的as_path属性,从而影响bgp路由的优选。在华为路由器上,在ibgp对等体之间,也可以使用route-policy修改bgp路由的as_path。无论何种场景,改变bgp路由的as_path都必须十分谨慎,建议跟上一个经过的as号保持一直。

bestroute as-path-ignore命令 用来配置bgp在选择最优路由时忽略as路径属性。配置该命令后,bgp将不比较as路径的长度。缺省情况下,长度更小者优。

[r2]route-policy as permit node 10

[r2-route-policy]apply as-path 123 123 123 additive

在已有as_path基础上追加

[r2-route-policy]quit

[r2]bgp 200

[r2-bgp]peer 1.1.1.1 route-policy as export

<r2>reset bgp all

<r2>refresh bgp all export

(3)通过med属性控制选路(越小越优)

为可选非传递属性,是一种度量值

一般情况下,bgp设备只比较来自同一as(不同对等体)的路由的med属性值。可以通过配置命令来允许bgp比较来自不同as的路由的med属性值。执行compare-different-as-med命令后,系统将比较来自不同as中的对等体的路由的med值。

[r2]route-policy med permit node 10

[r2-route-policy]apply cost + 500

[r2-bgp]peer 1.1.1.1 route-policy med export

display bgp routing-table

查bgp的路由表

display bgp routing-table 目标网段

查看详细信息

4)多网段情况下只匹配某一网段选路

origin属于公有必遵,用来定义路径信息的来源,其作用是标记一条路由是怎么成为bgp路由的,ebgp邻居之间起作用,它有三种属性:

igp(i):优先级最高--------- egp(e): 优先级次之--------- lncomplete(?):优先级最低

ip ip-prefix 1 permit 100.0.1.0 24

route-policy rp permit node 10

if-match ip-prefix 1

apply origin incomplete

route-policy rp permit node 20

bgp 100

network 100.0.1.0 24

peer 10.1.13.3 as-number 345

peer 10.1.13.3 route-policy rp export

建议使用第二种方案,能起到防环的作用

方案一

创建静态汇总路由

[r7-bgp]network 192.168.0.0 255.255.252.0

将这个聚合的路由通告出去

[r7]ip route-static 192.168.0.0 255.255.252.0 null0

将聚合的路由通告出去,因为在手动汇总的这个192.168.0.0在路由表中是不存在的的,要把它加入到null0里才能在bgp进程里用上面的network来通告这条路由

方案二

[r7-bgp]aggregate 192.168.0.0 255.255.252.0 detail-suppressed as-set

配置手动路由聚合用aggregate,detail-suppressed是抑制明细路由的通告,增加as-set关键字后,该汇总路由将继承明细路由的路径属性,其中对明细路由as_path属性可以起到汇总路由防环作用

BGP(边界网关协议)实现全网互通

实验一:配置bgp实现全网通

配置ospf:

r2

[r2]ospf

[r2-ospf-1]are 0

[r2-ospf-1-area-0.0.0.0]net

[r2-ospf-1-area-0.0.0.0]network 24.1.1.0 0.0.0.255

[r2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0

r3

[r3]ospf

[r3-ospf-1]are 0

[r3-ospf-1-area-0.0.0.0]net

[r3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0

[r3-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255

r4

[r4]ospf

[r4-ospf-1]are 0

[r4-ospf-1-area-0.0.0.0]net 4.4.4.4 0.0.0.0

[r4-ospf-1-area-0.0.0.0]net 24.1.1.0 0.0.0.255

[r4-ospf-1-area-0.0.0.0]net 34.1.1.0 0.0.0.255

r1

[r1]bgp 100

[r1-bgp]peer 2.2.2.2 as-number 200

[r1-bgp]peer 2.2.2.2 connect-interface loopback 0

[r1-bgp]peer 2.2.2.2 ebgp-max-hop 2

[r1-bgp]peer 3.3.3.3 as-number 200

[r1-bgp]peer 3.3.3.3 connect-interface loopback 0

[r1-bgp]peer 3.3.3.3 ebgp-max-hop 2

[r1]ip route-static 2.2.2.2 32 12.1.1.2

[r1]ip route-static 3.3.3.3 32 13.1.1.3

[r1-bgp]net 1.1.1.1 32(宣告1.1.1.1 网段)

BGP(边界网关协议)实现全网互通

[r2-bgp]peer 1.1.1.1 as-number 100

[r2-bgp]peer 1.1.1.1 connect-interface loopback 0

[r2-bgp]peer 1.1.1.1 ebgp-max-hop 2

[r2-bgp]peer 4.4.4.4 as-number 200

[r2-bgp]peer 4.4.4.4 connect-interface loopback 0

[r2-bgp]peer 4.4.4.4 ebgp-max-hop

[r2-bgp]peer 4.4.4.4 next-hop-invariable

[r2-bgp]peer 4.4.4.4 next-hop-local

[r2-bgp]peer 3.3.3.3 as-number 200

[r2-bgp]peer 3.3.3.3 connect-interface loopback 0

[r2-bgp]net 2.2.2.2 32

[r2-bgp]net 1.1.1.1 32

[r2-bgp]network 3.3.3.3 32

[r2-bgp]network 4.4.4.4 32

BGP(边界网关协议)实现全网互通

[r3-bgp]peer 1.1.1.1 as-number 100

[r3-bgp]peer 1.1.1.1 connect-interface loopback 0

[r3-bgp]peer 1.1.1.1 ebgp-max-hop 2

[r3-bgp]peer 4.4.4.4 as-number 200

[r3-bgp]peer 4.4.4.4 connect-interface loopback 0

[r3-bgp]peer 4.4.4.4 next-hop-local

[r3-bgp]peer 2.2.2.2 as-number 200

[r3-bgp]peer 2.2.2.2 connect-interface loopback 0

[r3]ip route-static 1.1.1.1 32 13.1.1.1

[r3-bgp]net 3.3.3.3 32

[r3-bgp]net 1.1.1.1 32

[r3-bgp]net 2.2.2.2 32

BGP(边界网关协议)实现全网互通

[r4]bgp 200

[r4-bgp]peer 2.2.2.2 as-number 200(as 200)

[r4-bgp]peer 2.2.2.2 connect-interface loopback 0(连接静态look 0)

[r4-bgp]peer 2.2.2.2 next-hop-local

[r4-bgp]peer 3.3.3.3 as-number 200(as 200)

[r4-bgp]peer 3.3.3.3 connect-interface loopback 0(连接静态look 0)

[r4-bgp]peer 3.3.3.3 next-hop-local(下一跳指定此处)

[r4-bgp]peer 5.5.5.5 as-number 200(as 200)

[r4-bgp]peer 5.5.5.5 connect-interface loopback 0(连接静态look 0)

[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2(跳数选择 2)

[r4-bgp]ip route-static 5.5.5.5 32 45.1.1.5

[r4-bgp]network 4.4.4.4 32

[r4-bgp]network 5.5.5.5 32

BGP(边界网关协议)实现全网互通

r5

[r4-bgp]peer 4.4.4.4 as-number 300(as 300)

[r4-bgp]peer 4.4.4.4 connect-interface loopback 0(连接静态look 0)

[r4-bgp]peer 4.4.4.4 ebgp-max-hop 2(跳数选择 2)

[r4-bgp]ip route-static 4.4.4.4 32 45.1.1.4

BGP(边界网关协议)实现全网互通