datacom/Datacom-MD/第五章:BGP边界网关协议.md

2273 lines
104 KiB
Markdown
Raw Normal View History

2023-03-26 19:12:35 +08:00
<h1><center>BGP边界网关协议</center></h1>
> 作者:行癫
------
<h3>第一节BGP</h3>
<h4>BGP基础</h4>
为方便管理规模不断扩大的网络网络被分成了不同的ASAutonomous System自治系统。早期EGPExterior Gateway Protocol外部网关协议被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单只发布网络可达的路由信息而不对路由信息进行优选同时也没有考虑环路避免等问题很快就无法满足网络管理的要求
BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGPBGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息
<h5>1.BGP概述</h5>
**AS**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211145759270.png" alt="image-20220211145759270" style="zoom:50%;" />
OSPF、IS-IS等IGP路由协议在组织机构网络内部广泛应用随着网络规模扩大网络中路由数量不断增长IGP已无法管理大规模网络AS的概念由此诞生
AS指的是在同一个组织管理下使用统一选路策略的设备集合
不同AS通过AS号区分AS号存在16bit、32bit两种表示方式。IANA负责AS号的分发
**使用IGP传递路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150023971.png" alt="image-20220211150023971" style="zoom:50%;" />
AS之间需要直连链路或通过VPN协议构造逻辑直连例如GRE Tunnel进行邻居建立
AS之间可能是不同的机构、公司相互之间无法完全信任使用IGP可能存在暴露AS内部的网络信息的风险
整个网络规模扩大,路由数量进一步增加,路由表规模变大,路由收敛变慢,设备性能消耗加大
注意:
VPNvirtual private network虚拟专用网使用虚拟专业网络技术可以从逻辑上建立一个直接连接的网络
**使用BGP传递路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150201640.png" alt="image-20220211150201640" style="zoom:50%;" />
为此在AS之间专门使用BGPBorder Gateway Protocol边界网关协议协议进行路由传递相较于传统的IGP协议
BGP基于TCP只要能够建立TCP连接即可建立BGP
只传递路由信息不会暴露AS内的拓扑信息
触发式更新,而不是进行周期性更新
**BGP发展历史**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150259656.png" alt="image-20220211150259656" style="zoom:50%;" />
目前关于BGP-4最新的RFC是4271相比较于RFC1771对于一些细节进行了进一步说明如事件、状态机以及BGP路由决策流程等
**BGP在企业中的应用**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150326672.png" alt="image-20220211150326672" style="zoom:50%;" />
<h5>2.BGP的基本概念</h5>
BGP是一种实现自治系统AS之间的路由可达并选择最佳路由的矢量性协议。早期发布的三个版本分别是BGP-1RFC1105、BGP-2RFC1163和BGP-3RFC12671994年开始使用BGP-4RFC17712006年之后单播IPv4网络使用的版本是BGP-4RFC4271其他网络如IPv6等使用的版本是MP-BGPRFC4760
**BGP的特点**
BGP使用TCP作为其传输层协议端口号为179使用触发式路由更新而不是周期性路由更新
BGP能够承载大批量的路由信息能够支撑大规模网络
BGP提供了丰富的路由策略能够灵活的进行路由选路并能指导对等体按策略发布路由
BGP能够支撑MPLS/VPN的应用传递客户VPN路由
BGP提供了路由聚合和路由衰减功能用于防止路由振荡通过这两项功能有效地提高了网络稳定性
**BGP特征**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150507695.png" alt="image-20220211150507695" style="zoom:50%;" />
BGP使用TCP为传输层协议TCP端口号179。路由器之间的BGP会话基于TCP连接而建立
运行BGP的路由器被称为BGP发言者BGP Speaker或BGP路由器
两个建立BGP会话的路由器互为对等体PeerBGP对等体之间交换BGP路由表
BGP路由器只发送增量的BGP路由更新或进行触发式更新不会周期性更新
BGP能够承载大批量的路由前缀可在大规模网络中应用
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150541964.png" alt="image-20220211150541964" style="zoom:50%;" />
BGP通常被称为路径矢量路由协议Path-Vector Routing Protocol
每条BGP路由都携带多种路径属性Path attributeBGP可以通过这些路径属性控制路径选择而不像IS-IS、OSPF只能通过Cost控制路径选择因此在路径选择上BGP具有丰富的可操作性可以在不同场景下选择最合适的路径控制方式
**BGP对等体关系**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150614495.png" alt="image-20220211150614495" style="zoom:50%;" />
与OSPF、IS-IS等协议不同BGP的会话是基于TCP建立的。建立BGP对等体关系的两台路由器并不要求必须直连
**BGP存在两种对等体关系类型EBGP及IBGP**
EBGPExternal BGP位于不同自治系统的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系必须满足两个条件
两个路由器所属AS不同即AS号不同
在配置EBGP时Peer命令所指定的对等体IP地址要求路由可达并且TCP连接能够正确建立
IBGPInternal BGP位于相同自治系统的BGP路由器之间的BGP邻接关系
**BGP对等体关系建立**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211150914518.png" alt="image-20220211150914518" style="zoom:50%;" />
先启动BGP的一端先发起TCP连接如左图所示R1先启动BGPR1使用随机端口号向R2的179端口发起TCP连接完成TCP连接的建立
三次握手建立完成之后R1、R2之间相互发送Open报文携带参数用于对等体建立参数协商正常之后双方相互发送Keepalive报文收到对端发送的Keepalive报文之后对等体建立成功同时双方定期发送Keepalive报文用于保持连接
**Open报文中携带**
My Autonomous System自身AS号
Hold Time用于协商后续Keepalive报文发送时间
BGP Identifier自身Router ID
**注意:**
BGP建立对等体的对等体都会发起TCP三次握手所以会建立两个TCP连接但是实际BGP只会保留其中一个TCP连接从Open报文中获取对端BGP Identifier之后BGP对等体会比较本端的Router ID和对端的Router ID大小如果本端Router ID小于对端Router ID则会关闭本地建立的TCP连接使用由对端主动发起创建的TCP连接进行后续的BGP报文交互
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151102726.png" alt="image-20220211151102726" style="zoom:50%;" />
BGP对等体关系建立之后BGP路由器发送BGP Update更新报文通告路由到对等体
**TCP连接源地址**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151142472.png" alt="image-20220211151142472" style="zoom:50%;" />
一般而言在AS内部网络具备一定的冗余性。在R1与R3之间如果采用直连接口建IBGP邻居关系那么一旦接口或者直连链路发生故障BGP会话也就断了但是事实上由于冗余链路的存在R1与R3之间的IP连通性其实并没有DOWN仍然可以通过R4到达彼此
缺省情况下BGP使用报文出接口作为TCP连接的本地接口
在部署IBGP对等体关系时建议使用Loopback地址作为更新源地址。Loopback接口非常稳定而且可以借助AS内的IGP和冗余拓扑来保证可靠性
在部署EBGP对等体关系时通常使用直连接口的IP地址作为源地址如若使用Loopback接口建立EBGP对等体关系则应注意EBGP多跳问题
**BGP报文类型**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151257115.png" alt="image-20220211151257115" style="zoom:50%;" />
BGP存在5种类型的报文不同类型的报文拥有相同的头部header
不同于常见的IGP协议BGP使用TCP作为传输层协议端口号179这使得BGP支持在非直连的路由器之间建立对等体关系
| **报文名称** | **作用** | **发送时刻** |
| ------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| Open | 协商BGP对等体参数建立对等体关系 | BGP TCP连接建立成功之后 |
| Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
| Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时发送Notification报文将错误通告给BGP对等体 |
| Keepalive | 标志对等体建立维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文将对等体状态置为已建立同时后续定期发送keepalive报文用于保持连接 |
| Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
**BGP报文格式 - 报文头格式**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151344723.png" alt="image-20220211151344723" style="zoom:50%;" />
BGP五种报文都拥有相同的报文头格式如左侧所示主要字段解释如下
Marker16Byte用于标明BGP报文边界所有bit均为“1”
Length2ByteBGP报文总长度包括报文头在内以Byte为单位
Type1ByteBGP报文的类型。其取值从1到5分别表示Open、Update、Notification、Keepalive和Route-refresh 报文
**BGP报文格式 - Open**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151445276.png" alt="image-20220211151445276" style="zoom:50%;" />
Open报文是TCP连接建立之后发送的第一个报文用于建立BGP对等体之间的连接关系主要字段解释如下
VersionBGP的版本号。对于BGP 4来说其值为4
My ASautonomous system本地AS号。通过比较两端的AS号可以判断对端是否和本端处于相同AS
Hold Time保持时间。在建立对等体关系时两端要协商Hold Time并保持一致。如果在这个时间内未收到对端发来的Keepalive报文或Update报文则认为BGP连接中断
BGP IdentifierBGP标识符以IP地址的形式表示用来识别BGP路由器
**BGP报文格式 - Update**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151544930.png" alt="image-20220211151544930" style="zoom:50%;" />
Update报文用于在对等体之间传递路由信息可以用于发布、撤销路由
一个Update报文可以通告具有相同路径属性的多条路由这些路由保存在NLRI网络层可达信息中。同时Update还可以携带多条不可达路由用于告知对方撤销路由这些保存在Withdrawn Routes字段中
主要字段解释如下:
Withdrawn routes不可达路由的列表
Path attributes与NLRI相关的所有路径属性列表每个路径属性由一个TLVType-Length-Value三元组构成
NLRI可达路由的前缀和前缀长度二元组
**BGP报文格式 - Notification**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151735003.png" alt="image-20220211151735003" style="zoom:50%;" />
当BGP检测到错误状态时对等体关系建立时、建立之后都可能发生就会向对等体发送Notification告知对端错误原因。之后BGP连接将会立即中断
Error Code、Error subcode差错码、差错子码用于告知对端具体的错误类型
Data用于辅助描述详细的错误内容长度并不固定
**BGP报文格式 - Keepalive**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151810415.png" alt="image-20220211151810415" style="zoom:50%;" />
BGP路由器收到对端发送的Keepalive报文将对等体状态置为已建立同时后续定期发送keepalive报文用于保持连接
Keepalive报文格式中只包含报文头没有附加其他任何字段
**BGP报文格式 - Route-refresh**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211151958751.png" alt="image-20220211151958751" style="zoom:50%;" />
Route-refresh报文用来要求对等体重新发送指定地址族的路由信息一般为本端修改了相关路由策略之后让对方重新发送Update报文本端执行新的路由策略重新计算BGP路由
AFIAddress Family Identifier地址族标识如IPv4
Res.保留8个bit必须置0
SAFISubsequent Address Family Identifier子地址族标识
**BGP状态机**
| **Peer状态名称** | **用途** |
| ---------------- | ------------------------------------------------------------ |
| Idle | 开始准备TCP的连接并监视远程对等体启用BGP时要准备足够的资源 |
| Connect | 正在进行TCP连接等待完成中认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态反复尝试连接 |
| Active | TCP连接没建立成功反复尝试TCP连接 |
| OpenSent | TCP连接已经建立成功开始发送Open包Open包携带参数协商对等体的建立 |
| OpenConfirm | 参数、能力特性协商成功自己发送Keepalive包等待对方的Keepalive包 |
| Established | 已经收到对方的Keepalive包双方能力特性经协商发现一致开始使用Update通告路由信息 |
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211152137691.png" alt="image-20220211152137691" style="zoom:50%;" />
1.Idle状态是BGP初始状态。在Idle状态下BGP拒绝对等体发送的连接请求。只有在收到本设备的Start事件后BGP才开始尝试和其它BGP对等体进行TCP连接并转至Connect状态
Start事件是由一个操作者配置一个BGP过程或者重置一个已经存在的过程或者路由器软件重置BGP过程引起的
任何状态中收到Notification报文或TCP拆链通知等Error事件后BGP都会转至Idle状态
2.在Connect状态下BGP启动连接重传定时器Connect Retry等待TCP完成连接
如果TCP连接成功那么BGP向对等体发送Open报文并转至OpenSent状态
如果TCP连接失败那么BGP转至Active状态
如果连接重传定时器超时BGP仍没有收到BGP对等体的响应那么BGP继续尝试和其它BGP对等体进行TCP连接停留在Connect状态
3.在Active状态下BGP总是在试图建立TCP连接
如果TCP连接成功那么BGP向对等体发送Open报文关闭连接重传定时器并转至OpenSent状态
如果TCP连接失败那么BGP停留在Active状态
如果连接重传定时器超时BGP仍没有收到BGP对等体的响应那么BGP转至Connect状态
4.在OpenSent状态下BGP等待对等体的Open报文并对收到的Open报文中的AS号、版本号、认证码等进行检查
如果收到的Open报文正确那么BGP发送Keepalive报文并转至OpenConfirm状态
如果发现收到的Open报文有错误那么BGP发送Notification报文给对等体并转至Idle状态
5.在OpenConfirm状态下BGP等待Keepalive或Notification报文。如果收到Keepalive报文则转至Established状态如果收到Notification报文则转至Idle状态
6.在Established状态下BGP可以和对等体交换Update、Keepalive、Route-refresh报文和Notification报文
如果收到正确的Update或Keepalive报文那么BGP就认为对端处于正常运行状态将保持BGP连接
如果收到错误的Update或Keepalive报文那么BGP发送Notification报文通知对端并转至Idle状态
Route-refresh报文不会改变BGP状态
如果收到Notification报文那么BGP转至Idle状态
如果收到TCP拆链通知那么BGP断开连接转至Idle状态
**BGP状态机详解**
![image-20220211152605702](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211152605702.png)
![image-20220211152617184](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211152617184.png)
**BGP对等体表**
```shell
<R1>display bgp peer
BGP local router ID : 10.0.1.1
Local AS number : 100
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.12.2 4 100 25719 25714 0 0428h32m Established 1
```
在设备上通过display bgp peer命令查看BGP对等体表其中主要参数含义
Peer对等体地址
Vversion版本号
AS对等体AS号
Up/Down该对等体已经存在up或者down的时间
State对等体状态这里显示的为BGP状态机的状态
PrefRcvprefix received从该对等体收到的路由前缀数目
**BGP路由表**
```shell
<R1>display bgp routing-table
BGP Local router ID is 10.0.1.1
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 10.0.45.0/24 10.0.4.4 0 100 0 ?
* i 10.0.4.4 0 100 0 ?
```
在设备上通过display bgp routing-table查看BGP路由表
Network路由的目的网络地址以及网络掩码
NextHop下一跳地址
如果想要查看某条路由更加详细的信息可以通过查看该命令会将匹配的BGP路由信息详细展示
```shell
display bgp routing-table ipv4-address { mask | mask-length}
```
```shell
<R1>display bgp routing-table 10.0.45.0 24
BGP local router ID : 10.0.1.1
Local AS number : 100
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.2.2 (10.0.2.2) #标明路由来源
Route Duration: 06h19m44s
Relay IP Nexthop: 10.0.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.4.4 #路由下一跳地址
Qos information : 0x0
AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 2 #路径属性、是否被优选
Originator: 10.0.4.4
Cluster list: 10.0.2.2
Not advertised to any peer yet
```
**BGP路由的生成**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211153357320.png" alt="image-20220211153357320" style="zoom:50%;" />
不同于IGP路由协议BGP自身并不会发现并计算产生路由BGP将IGP路由表中的路由注入到BGP路由表中并通过Update报文传递给BGP对等体
**BGP注入路由的方式有两种**
Network
import-route
**Network注入路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211153111518.png" alt="image-20220211153111518" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211153732346.png" alt="image-20220211153732346" style="zoom:50%;" />
AS200内的BGP路由器已经通过IGP协议OSPF学习到了两条路由10.1.0.0/24和10.2.0.0/24在BGP进程内通过network命令注入这两条路由这两条路由将会出现在本地的BGP路由表中
AS200内的BGP路由器通过Update报文将路由传递给AS300内的BGP路由器
AS300内的BGP路由器收到路由后将这两条路由加入到本地的BGP路由表中
注意:
Network方式注入的路由必须是已经存在于IP路由表中的路由条目否则不会被成功注入到BGP路由表中
**import-route方式注入路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211153810479.png" alt="image-20220211153810479" style="zoom:50%;" />
Network方式注入路由虽然是精确注入但是只能一条条配置逐条注入IP路由表中的路由如果注入的路由条目很多配置命令将会非常复杂为此可以使用import-route方式
直连路由
静态路由
OSPF路由
IS-IS路由等协议的路由注入到BGP路由表中
**BGP聚合路由**
与众多IGP协议相同BGP同样支持路由的手工聚合在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合在BGP已经学习到相应的明细路由情况下设备会向BGP注入指定的聚合路由
![image-20220211153918170](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211153918170.png)
执行聚合之后在本地的BGP路由表中除了原本的明细路由条目之外还会多出一条聚合的路由条目
如果在执行聚合时指定了detail-suppressed则BGP只会向对等体通告聚合后的路由而不通告聚合前的明细路由
在聚合时配置抑制明细路由的参数R3上查看路由表只能看到BGP路由10.1.0.0/22无法看到聚合前的明细路由
**通告原则**
BGP通过network、import-route、aggregate聚合方式生成BGP路由后通过Update报文将BGP路由传递给对等体
BGP通告遵循以下原则
只发布最优路由
从EBGP对等体获取的路由会发布给所有对等体
IBGP水平分割从IBGP对等体获取的路由不会发送给IBGP对等体
**BGP路由通告原则一**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211154204358.png" alt="image-20220211154204358" style="zoom:50%;" />
第一条原则:只发布最优且有效(即下一跳地址可达)路由
通过display bgp routing-table命令可以查看BGP路由表
```
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.1.0.0/24 11.1.0.1 0 100 0 ?
*i 11.1.0.2 0 100 0 ?
```
在BGP路由表中同时存在以下两个标志的路由为最优、有效
* : 代表有效
> : 代表最优
**BGP路由通告原则二**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211154307855.png" alt="image-20220211154307855" style="zoom:50%;" />
第二条原则从EBGP对等体获取的路由会发布给所有对等体。R2从EBGP对等体获取的BGP路由会发布给所有EBGP、IBGP对等体。
**BGP路由通告原则三**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211154349426.png" alt="image-20220211154349426" style="zoom:50%;" />
第三条原则从IBGP对等体获取的BGP路由不会再发送给其他IBGP对等体
该条原则也被称为“IBGP水平分割”
如果IBGP对等体学习到的路由会继续传递给其他的IBGP对等体R2将一条路由传递给了IBGP对等体R3、R3收到路由之后传递给IBGP对等体R1、R1继续传递给IBGP对等体R2路由环路形成
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211154454686.png" alt="image-20220211154454686" style="zoom:50%;" />
第三条原则可能会带来新的问题如左侧所示当BGP路由器R2将路由传递给BGP路由器R1时由于第三条原则限制R1无法将BGP路由传递给R3R3将无法学习到路由
为解决该问题可以采用AS内IBGP全互联的方式R2、R3之间建立非直连的IBGP对等体关系以此让BGP路由器R2将路由传递给BGP路由器 R3
**BGP路由通告原则四**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211154528589.png" alt="image-20220211154528589" style="zoom:50%;" />
第四条原则当一台路由器从自己的IBGP对等体学习到一条BGP路由时这类路由被称为IBGP路由它将不能使用该条路由或把这条路由通告给自己的EBGP对等体除非它又从IGP协议例如OSPF等此处也包含静态路由学习到这条路由该条规则也被称为BGP同步原则
BGP路由器R4上存在一条路由10.0.4.0/24R4将其传递给了R2
R2将路由传递给非直连IBGP对等体R3
R3将路由传递给R5
之后R5向10.0.4.4发起访问
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211160636858.png" alt="image-20220211160636858" style="zoom:50%;" />
R5访问10.0.4.4
R5查找路由表将报文发送给R3
R3收到报文后查找路由表匹配到一条BGP路由其下一跳为R2但是R2为非直连下一跳需要进行路由迭代通过IGP学习到的路由迭代出下一跳为R1。R3将报文发送给R1
R1收到报文后查找路由表因为R1并非BGP路由器未与R2建立IBGP对等体关系因此R1上并无BGP路由10.0.4.0/24路由查找失败R1将报文丢弃
<h5>3.BGP的基本配置</h5>
![image-20220211163108702](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220211163108702.png)
<h5>4.配置案例</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213132301393.png" alt="image-20220213132301393" style="zoom:50%;" />
BGP对等体关系、AS号、设备互联地址如图所示
所有设备的Loopback1接口地址为10.0.x.x/32其中x为设备编号所有设备都使用Loopback1地址作为Router ID
R1、R2、R3之间建立OSPF并使R1和R3的loopback建立TCP连接
R1、R3之间使用Loopback1地址作为更新源地址建立IBGP对等体关系R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系
**R1的配置如下**
```shell
[R1] bgp 100
[R1-bgp] router-id 10.0.1.1
[R1-bgp] peer 10.0.3.3 as-number 100
[R1-bgp] peer 10.0.3.3 connect-interface LoopBack1
```
**R3的配置如下**
```shell
[R3] bgp 100
[R3-bgp] router-id 10.0.3.3
[R3-bgp] peer 10.0.1.1 as-number 100
[R3-bgp] peer 10.0.1.1 connect-interface LoopBack1
[R3-bgp] peer 10.0.34.4 as-number 200
```
**R4的配置如下**
```shell
[R4] bgp 200
[R4-bgp] router-id 10.0.4.4
[R4-bgp] peer 10.0.34.3 as-number 100
```
**在R3上查看BGP对等体状态**
```shell
<R3> display bgp peer
BGP Local router ID : 10.0.3.3
local AS number : 100
Total number of peers : 2
Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.0.1.1 4 100 0 0 0 00:00:07 Established 0
10.0.34.4 4 200 32 35 0 00:17:49 Established 0
```
<h3>第二节BGP路径属性与路由反射器</h3>
<h4>BGP路径属性</h4>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134050784.png" alt="image-20220213134050784" style="zoom:50%;" />
任何一条BGP路由都拥有多个路径属性
当路由器将BGP路由通告给它的对等体时一并被通告的还有路由所携带的各个路径属性
BGP的路径属性将影响路由优选
<h5>1.路径属性分类</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134145268.png" alt="image-20220213134145268" style="zoom:50%;" />
公认属性是所有BGP路由器都必须能够识别的属性公认属性可以分为两类
公认必遵Well-known Mandatory必须包括在每个Update消息里
公认任意Well-known Discretionary可能包括在某些Update消息里
可选属性不需要都被BGP路由器所识别可选属性可以分为两类
可选过渡Optional TransitiveBGP设备不识别此类属性依然会接受该类属性并通告给其他对等体
可选非过渡Optional Non-transitiveBGP设备不识别此类属性会忽略该属性且不会通告给其他对等体
**BGP Update报文举例**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134331807.png" alt="image-20220213134331807" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134425890.png" alt="image-20220213134425890" style="zoom:50%;" />
该属性为公认必遵属性是前往目标网络的路由经过的AS号列表
作用确保路由在EBGP对等体之间传递无环另外也作为路由优选的衡量标准之一
路由在被通告给EBGP对等体时路由器会在该路由的AS_Path中追加上本地的AS号路由被通告给IBGP对等体时AS_Path不会发生改变
**AS_Path防止环路**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134537954.png" alt="image-20220213134537954" style="zoom:50%;" />
R1从R4收到的BGP路由更新中AS_Path属性数值为400 300 200 100存在自身AS号不接收该路由从而防止了路由环路的产生
**AS_Path影响路由优选**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134625579.png" alt="image-20220213134625579" style="zoom:50%;" />
AS_Path的重要作用之一便是影响BGP路由的优选在上图中R5同时从R2及R4学习到去往10.0.1.0/24网段的BGP路由在其他条件相同的情况下R5会优选R2通告的路由因为该条路由的AS_Path属性值较短也即AS号的个数更少
**AS_Path类型**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213134920074.png" alt="image-20220213134920074" style="zoom:50%;" />
路由聚合解决了两类问题一是减轻了设备的负担二是隐藏了明细的路由信息减少了路由震荡的影响。但是路由聚合后AS_Path属性丢失存在产生环路的风险为此可以通过AS_SET类型的AS_Path属性携带聚合前的AS路径信息
当发生路由聚合后如果需要聚合路由携带所有明细路由中AS_Path属性携带的AS号防止环路则在配置聚合的命令中增加as-set参数
在AS_SET的示例中AS 300内发生了路由聚合并配置了as-set参数则聚合路由会将明细路由的AS_Path信息用一个AS-Set集表示放在中括号{}里的AS号信息该集合内的AS号没有先后顺序在聚合路由中携带用以防止环路
除了AS_SET、AS_AS_SEQENCE之外AS_Path还存在另外两种类型AS_Confed_Sequence、AS_Confed_Set这两种类型应用于BGP联邦中
**修改AS_Path**
使用Route-Policy修改BGP路由的AS_Path属性时可以使用以下三种方式
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213135117825.png" alt="image-20220213135117825" style="zoom:50%;" />
<h5>2.Origin</h5>
| **起源名称** | **标记** | **描述** |
| ------------ | -------- | ------------------------------------------------------------ |
| IGP | i | 如果路由是由始发的BGP路由器使用network命令注入到BGP的那么该BGP路由的Origin属性为IGP |
| EGP | e | 如果路由是通过EGP学习到的那么该BGP路由的Origin属性为EGP |
| Incomplete | ? | 如果路由是通过其他方式学习到的则Origin属性为Incomplete不完整的。例如通过import-route命令引入到BGP的路由 |
该属性为公认必遵属性它标识了BGP路由的起源。如上表所示根据路由被引入BGP的方式不同存在三种类型的Origin
当去往同一个目的地存在多条不同Origin属性的路由时在其他条件都相同的情况下BGP将按如Origin的下顺序优选路由IGP > EGP > Incomplete
**Origin在BGP表中的显示**
```shell
[R2] display bgp routing-table
BGP Local router ID is 10.0.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.1.0/24 10.0.12.1 0 200 0 i
* i 10.0.23.3 0 100 0 i
```
<h5>3.Next_Hop</h5>
该属性是一个公认必遵属性,用于指定到达目标网络的下一跳地址
当路由器学习到BGP路由后需对BGP路由的Next_Hop属性值进行检查该属性值IP地址必须在本地路由可达如果不可达则这条BGP路由不可用
在不同的场景中设备对BGP路由的缺省Next_Hop属性值的设置规则如下
BGP路由器在向EBGP对等体发布某条路由时会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
BGP路由器将本地始发路由发布给IBGP对等体时会把该路由信息的下一跳属性设置为本地与对端建立BGP邻居关系的接口地址
路由器在收到EBGP对等体所通告的BGP路由后在将路由传递给自己的IBGP对等体时会保持路由的Next_Hop属性值不变
如果路由器收到某条BGP路由该路由的Next_Hop属性值与EBGP对等体更新对象同属一个网段那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体
**Next_Hop的缺省操作**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213135740114.png" alt="image-20220213135740114" style="zoom:50%;" />
路由器将BGP路由通告给自己的EBGP对等体时将该路由的Next_Hop设置为自己的TCP连接源地址
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213135834341.png" alt="image-20220213135834341" style="zoom:50%;" />
路由器在收到EBGP对等体所通告的BGP路由后在将路由传递给自己的IBGP对等体时会保持路由的Next_Hop属性值不变
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213135850400.png" alt="image-20220213135850400" style="zoom:50%;" />
如果路由器收到某条BGP路由该路由的Next_Hop属性值与EBGP对等体更新对象同属一个网段那么该条路由的Next_Hop地址将保持不变并传递给它的BGP对等体
**修改Next_hop属性**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213140152334.png" alt="image-20220213140152334" style="zoom:50%;" />
使用peer next-hop-local命令可以在设置向IBGP对等体通告路由时把下一跳属性设为自身的TCP连接源地址
缺省情况下R2通告给R3的BGP路由10.0.1.0/24的NextHop属性值为10.0.12.1若R2未将到达10.0.12.0/24的路由发布到AS200的IGP协议中那么R3将无法获知到达10.0.12.1的路由此时BGP路由10.0.1.0/24的NextHop不可达该路由将被视为无效
<h5>4.Local_Preference</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213140245592.png" alt="image-20220213140245592" style="zoom:50%;" />
在R1及R3上分别对R2部署路由策略使得R1发送给R2的10.0.45.0/24路由的Local_Preference为200而R3则保持缺省那么对于R2而言会优选R1传递过来的10.0.45.0/24路由
Local_Preference即本地优先级属性是公认任意属性可以用于告诉AS中的路由器哪条路径是离开本AS的首选路径
Local_Preference属性值越大则BGP路由越优。缺省的Local_Preference值为100
该属性只能被传递给IBGP对等体而不能传递给EBGP对等体
**在BGP路由表中查看Local_Preference**
```shell
[R2] display bgp routing-table
BGP Local router ID is 10.0.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.12.1 0 200 0 i
* i 10.0.23.3 0 100 0 i
```
Local_Preference为200的BGP路由优于Local_Preference为100的BGP路由在BGP路由表中来自10.0.12.1的BGP路由为最优
**Local_Preference注意事项**
Local_Preference属性只能在IBGP对等体间传递除非做了策略否则Local_Preference值在IBGP对等体间传递过程中不会丢失而不能在EBGP对等体间传递如果在EBGP对等体间收到的路由的路径属性中携带了Local_Preference则会进行错误处理
但是可以在AS边界路由器上使用Import方向的策略来修改Local_Preference属性值。也就是在收到路由之后在本地为路由赋予Local_Preference
使用bgp default local-preference命令修改缺省Local_Preference值该值缺省为100
路由器在向其EBGP对等体发送路由更新时不能携带Local_Preference属性但是对方接收路由之后会在本地为这条路由赋一个缺省Local_Preference值100然后再将路由传递给自己的IBGP对等体
本地使用network命令及import-route命令引入的路由 Local_Preference为缺省值100并能在AS内向其他IBGP对等体传递传递过程中除非受路由策略影响否则Local_Preference不变
<h5>5.Community</h5>
**Community技术背景**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141342499.png" alt="image-20220213141342499" style="zoom:50%;" />
AS100内有大量的路由被引入BGP这些路由分别用于生产及办公网络。现在AS200的BGP路由器需要分别针对这些路由执行不同的策略如果使用ACL、IP Prefix-list这样的工具效率就非常低下了
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141427003.png" alt="image-20220213141427003" style="zoom:50%;" />
有了Community属性我们可以为不同种类的路由打上不同的Community属性值这些属性值会随着BGP路由更新给AS200那么在AS200内的BGP路由器上只需要根据Community属性值来执行差异化的策略即可而不用去关心具体的路由前缀
**Community属性**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141545848.png" alt="image-20220213141545848" style="zoom:50%;" />
Community团体属性为可选过渡属性是一种路由标记用于简化路由策略的执行
可以将某些路由分配一个特定的Community属性值之后就可以基于Community值而不是网络前缀/掩码信息来匹配路由并执行相应的策略了
**Community属性格式**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141614306.png" alt="image-20220213141614306" style="zoom:50%;" />
Community属性值长度为32bit也就是4Byte。可使用两种形式呈现
十进制整数格式
AANN格式其中AA表示AS号NN是自定义的编号
**公认Community属性**
| **团体属性名称** | **团体属性号** | **说明** |
| ------------------- | ------------------------ | ------------------------------------------------------------ |
| Internet | 00x00000000 | 设备在收到具有此属性的路由后可以向任何BGP对等体发送该路由。缺省情况下所有的路由都属于Internet团体 |
| No_Advertise | 42949670420xFFFFFF02 | 设备收到具有此属性的路由后将不向任何BGP对等体发送该路由 |
| No_Export | 42949670410xFFFFFF01 | 设备收到具有此属性的路由后将不向AS外发送该路由 |
| No_Export_Subconfed | 42949670430xFFFFFF03 | 设备收到具有此属性的路由后将不向AS外发送该路由也不向AS内其他子AS发布此路由 |
<h5>6.MED</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141734160.png" alt="image-20220213141734160" style="zoom:50%;" />
在R2、R3上部署路由策略使得R2通告给R4的BGP路由MED值为10而R3通告的路由MED值为20。当其他条件相同时R4将优选R2传递过来的BGP路由
MEDMulti-Exit Discriminator多出口鉴别器是可选非过渡属性是一种度量值用于向外部对等体指出进入本AS的首选路径即当进入本AS的入口有多个时AS可以使用MED动态地影响其他AS选择进入的路径
MED属性值越小则BGP路由越优
MED主要用于在AS之间影响BGP的选路。MED被传递给EBGP对等体后对等体在其AS内传递路由时携带该MED值但将路由再次传递给其EBGP对等体时缺省不会携带MED属性
**关于MED的一些注意事项**
缺省情况下路由器只比较来自同一相邻AS的BGP路由的MED值也就是说如果去往同一个目的地的两条路由来自不同的相邻AS则不进行MED值的比较
一台BGP路由器将路由通告给EBGP对等体时是否携带MED属性需要根据以下条件进行判断:
如果该BGP路由是本地始发本地通过network或import-route命令引入则缺省携带MED属性发送给EBGP对等体
如果该BGP路由为从BGP对等体学习到那么该路由传递给EBGP对等体时缺省不会携带MED属性
在IBGP对等体之间传递路由时MED值会被保留并传递除非部署了策略否则MED值在传递过程中不发生改变也不会丢失
**MED的默认操作**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141855655.png" alt="image-20220213141855655" style="zoom:50%;" />
如果路由器通过IGP学习到一条路由并通过network或import-route的方式将路由引入BGP产生的BGP路由的MED值继承路由在IGP中的metric。例如上图中如果R2通过OSPF学习到了10.0.1.0/24路由并且该路由在R2的全局路由表中OSPF Cost=100那么当R2将路由network进BGP后产生的BGP路由的MED值为100
如果路由器将本地直连、静态路由通过network或import-route的方式引入BGP那么这条BGP路由的MED为0因为直连、静态路由cost为0
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213141917565.png" alt="image-20220213141917565" style="zoom:50%;" />
如果路由器通过BGP学习到其他对等体传递过来的路由那么将路由更新给自己的EBGP对等体时默认是不携带MED的。这就是所谓的“MED不会跨AS传递”。例如在上图中如果R3从R2学习到一条携带了MED属性的BGP路由则它将该路由通告给R4时缺省是不会携带MED属性的
可以使用default med命令修改缺省的MED值default med命令只对本设备上用import-route命令引入的路由和BGP的聚合路由生效。例如在R2上配置default med 999那么R2通过import-route及aggregate命令产生的路由传递给R3时路由携带的MED为999
<h5>7.Atomic_Aggregate及Aggregator</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142001062.png" alt="image-20220213142001062" style="zoom:50%;" />
Atomic_Aggregate属于公认任意属性而Aggregator属性属于可选过渡属性
R3上通过aggregate命令将BGP路由10.0.1.0/24、10.0.2.0/24、10.0.3.0/24、10.0.4.0/24聚合成了10.0.0.0/16并使用detail-suppressed抑制了明细路由的对外发布R3只会将聚合后的BGP路由传递给R4而不传递聚合前的明细路由
Atomic_Aggregate是一个公认自由决定属性它只相当于一种预警标记而并不承载任何信息。当路由器收到一条BGP路由更新且发现该条路由携带Atomic_Aggregate属性时它便知道该条路由可能出现了路径属性的丢失此时该路由器把这条路由再通告给其他对等体时需保留路由的Atomic_Aggregate属性。另外收到该路由更新的路由器不能将这条路由再度明细化
另一个重要的属性是Aggregator这是一个可选传递属性当路由聚合被执行时执行路由聚合操作的路由器可以为该聚合路由添加Aggregator属性并在该属性中记录本地AS号及自己的Router-ID因此Aggregator属性用于标记路由聚合行为发生在哪个AS及哪台BGP路由器上
**查看聚合之后的路由**
```shell
[R4]display bgp routing-table 10.0.0.0 16
BGP local router ID : 10.0.4.4
Local AS number : 400
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 10.0.0.0/16:
From: 10.0.34.3 (10.0.3.3)
Route Duration: 00h00m21s
Direct Out-interface: GigabitEthernet0/0/0
Original nexthop: 10.0.34.3
Qos information : 0x0
AS-path 300, origin igp, pref-val 0, valid, external, best, select, active, pre 255
Aggregator: AS 300, Aggregator ID 10.0.3.3, Atomic-aggregate
Not advertised to any peer yet
```
在BGP路由详细信息中可与看到Aggregator属性记录了聚合设备的AS号、Router ID同时通过Atomic-Aggregate属性标明该路由为聚合路由
<h5>8.Preferred-Value介绍</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142127556.png" alt="image-20220213142127556" style="zoom:50%;" />
在R2上部署路由策略Import策略将R1传递过来的10.0.13.0/24路由的Preferred-Value值设定为300而R3传递过来的路由的Preferred-Value值设置为200。如此一来关于10.0.13.0/24R2会优选R1传递过来的路由
Preferred-Value协议首选值是华为设备的特有属性该属性仅在本地有效。当BGP路由表中存在到相同目的地的路由时将优先选择Preferred-Value值高的路由
取值范围0~65535该值越大则路由越优先
Preferred-Value只能在路由器本地配置而且只影响本设备的路由优选。该属性不会传递给任何BGP对等体
**在BGP路由表中查看Preferred-Value**
```shell
[R2] display bgp routing-table
BGP Local router ID is 10.0.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.13.0/24 10.0.12.1 0 300 100 i
* 10.0.23.3 0 200 100 i
```
Preferred-Value为300的BGP路由优于Preferred-Value为0的路由在BGP路由表中来自10.0.12.1的BGP路由为最优
Preferred-value在路由表中简写为PrefVal
<h4>BGP路由反射器</h4>
<h5>1.中转AS中的IBGP问题</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142428093.png" alt="image-20220213142428093" style="zoom:50%;" />
由于水平分割的原因为了保证中转AS200所有的BGP路由器都能学习到完整的BGP路由就必须在AS内实现IBGP全互联。然而实现IBGP全互联存在诸多短板
路由器需维护大量的TCP及BGP连接尤其在路由器数量较多时
AS内BGP网络的可扩展性较差
为此可以采用路由反射器技术
<h5>2.路由反射器角色</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142531294.png" alt="image-20220213142531294" style="zoom:50%;" />
引入路由反射器之后存在两种角色:
RRRoute Reflector路由反射器
ClientRR客户端
RR会将学习的路由反射出去从而使得IBGP路由在AS内传播无需建立IBGP全互联
将一台BGP路由器指定为RR的同时还需要指定其Client。至于Client本身无需做任何配置它并不知晓网络中存在RR
<h5>3.路由反射规则</h5>
**RR在接收BGP路由时**
如果路由反射器从自己的非客户对等体学习到一条IBGP路由则它会将该路由反射给所有客户
如果路由反射器从自己的客户学习到一条IBGP路由则它会将该路由反射给所有非客户以及除了该客户之外的其他所有客户
如果路由学习自EBGP对等体则发送给所有客户、非客户IBGP对等体
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142705169.png" alt="image-20220213142705169" style="zoom:50%;" />
如果路由反射器从自己的非客户对等体学习到一条IBGP路由则它会将该路由反射给所有客户
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142721076.png" alt="image-20220213142721076" style="zoom:50%;" />
如果路由反射器从自己的客户学习到一条IBGP路由则它会将该路由反射给所有非客户以及除了该客户之外的其他所有客户
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142739927.png" alt="image-20220213142739927" style="zoom:50%;" />
如果路由学习自EBGP对等体则发送给所有客户、非客户IBGP对等体
**注意:**
RR将路由反射时不会修改以下的BGP路径属性Next_Hop、AS_Path、 Local_Preference、MED如果反射器修改这几个路径属性的值则有可能产生路由环路
<h5>4.RR场景下的路由防环</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142834508.png" alt="image-20220213142834508" style="zoom:50%;" />
RR的设定使得IBGP水平分割原则失效这就可能导致环路的产生为此RR会为BGP路由添加两个特殊的路径属性来避免出现环路Originator_ID、Cluster_List
Originator_ID、Cluster_List属性都属于可选过渡类型
**Originator ID**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213142922701.png" alt="image-20220213142922701" style="zoom:50%;" />
R3收到来自R2的BGP路由10.0.2.0/24在反射给R1时会添加上Originator_ID10.0.2.2R1收到之后再次反射给其客户端R2时携带Originator_ID属性R2收到之后查看Originator_ID属性值存在自身的Router ID忽略该路由更新
RR将一条BGP路由进行反射时会在反射出去的路由中增加Originator_ID其值为本地AS中通告该路由的BGP路由器Router ID
若AS内存在多个RR则Originator_ID属性由第一个RR创建并且不被后续的RR若有所更改
当BGP路由器收到一条携带Originator_ID属性的IBGP路由并且Originator_ID属性值与自身的Router ID相同则它会忽略关于该条路由的更新
**路由反射簇 (Cluster)**
路由反射簇包括反射器RR及其Client。一个AS内允许存在多个路由反射簇
每一个簇都有唯一的簇IDCluster_ID缺省时为RR的BGP Router ID
当一条路由被反射器反射后该RR该簇的Cluster_ID就会被添加至路由的Cluster_list属性中
当RR收到一条携带Cluster_list属性的BGP路由且该属性值中包含该簇的Cluster_ID时RR认为该条路由存在环路因此将忽略关于该条路由的更新
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213143028180.png" alt="image-20220213143028180" style="zoom:50%;" />
**Cluster_List**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213143043437.png" alt="image-20220213143043437" style="zoom:80%;" />
R2发送给R1的路由经过R1反射给R3时除了添加Originator_ID之外还会添加Cluster_List10.0.1.1。R3再次反射给R4时 Cluster_List值为10.0.3.3 10.0.1.1R4再次反射给R1时Cluster_List值为10.0.4.4 10.0.3.3 10.0.1.1
当R4将路由反射给R1时R1发现Cluster_List包含了自身Cluster_ID判断存在环路从而忽略该路由更新
<h5>5.RR应用举例</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213143135049.png" alt="image-20220213143135049" style="zoom:50%;" />
R1向BGP发布了10.0.1.0/24路由R2会从R1学习到该路由并且将其通告给R3但是R3从R2学习到的这条IBGP路由由于水平分割规则的存在故而不能够再被通告给R4及R5为此可以将R3设置为RRR4、R5作为其客户端这样R4、R5即可正常学习到BGP路由10.0.1.0/24
**配置**
![image-20220213143200131](https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213143200131.png)
<h5>6.配置案例</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213143243308.png" alt="image-20220213143243308" style="zoom:50%;" />
所有设备Loopback0地址为10.0.x.x/32其中x为设备编号所有设备都使用Loopback0地址作为BGP Router ID
R1、R2、R3属于AS100AS100内运行OSPF将所有直连接口宣告进OSPF
AS100内使用环回口作为发送IBGP报文的源接口R2作为路由反射器R3为其客户端
R4属于AS200与R3使用互联接口地址建立EBGP对等体R4将10.4.4.0/24宣告进BGP
**R1的配置如下**
```shell
[R1] bgp 100
[R1-bgp] router-id 10.0.1.1
[R1-bgp] peer 10.0.2.2 as-number 100
[R1-bgp] peer 10.0.2.2 connect-interface LoopBack0
```
**R2的配置如下**
```shell
[R2] bgp 100
[R2-bgp] router-id 10.0.2.2
[R2-bgp] peer 10.0.1.1 as-number 100
[R2-bgp] peer 10.0.1.1 connect-interface LoopBack0
[R2-bgp] peer 10.0.3.3 as-number 100
[R2-bgp] peer 10.0.3.3 connect-interface LoopBack0
[R2-bgp] peer 10.0.3.3 reflect-client
```
**R3的配置如下**
```shell
[R3] bgp 100
[R3-bgp] router-id 10.0.3.3
[R3-bgp] peer 10.0.2.2 as-number 100
[R3-bgp] peer 10.0.2.2 connect-interface LoopBack0
[R3-bgp] peer 10.0.34.4 as-number 200
```
**R4的配置如下**
```shell
[R4] bgp 200
[R4-bgp] router-id 10.0.4.4
[R4-bgp] peer 10.0.34.3 as-number 100
[R4-bgp] network 10.4.4.0 24
```
**分别在R3、R1查看BGP路由10.4.4.0/24**
```shell
[R3-bgp]display bgp routing-table 10.4.4.0 24
BGP local router ID : 10.0.3.3
Local AS number : 100
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 10.4.4.0/24:
From: 10.0.34.4 (10.0.4.4)
Route Duration: 00h04m36s
Direct Out-interface: GigabitEthernet0/0/1
Original nexthop: 10.0.34.4
Qos information : 0x0
AS-path 200, origin igp, MED 0, pref-val 0, valid, external, best, select, active, pre 255
Advertised to such 1 peers:
10.0.2.2
```
```shell
[R1]display bgp routing-table 10.4.4.0 24
……….
BGP routing table entry information of 10.4.4.0/24:
From: 10.0.2.2 (10.0.2.2) #来自R2
Route Duration: 00h00m19s
Relay IP Nexthop: 10.0.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.34.4 #下一跳地址未改变
Qos information : 0x0
AS-path 200, origin igp, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 3
Originator: 10.0.3.3 #路由来自10.0.3.3
Cluster list: 10.0.2.2 #Cluster_ID为R2的Router ID
Not advertised to any peer yet
```
<h3>第三节BGP路由优选</h3>
<h4>一:路由优先</h4>
<h5>1.BGP路由优选规则</h5>
**当到达同一个目的网段存在多条路由时BGP通过如下的次序进行路由优选**丢弃下一跳不可达的路由
优选Preferred-Value属性值最大的路由
优选Local_Preference属性值最大的路由
本地始发的BGP路由优于从其他对等体学习到的路由本地始发的路由优先级优选手动聚合>自动聚合>network>import>从对等体学到的
优选AS_Path属性值最短的路由
优选Origin属性最优的路由。Origin属性值按优先级从高到低的排列是IGP、EGP及Incomplete
优选MED属性值最小的路由
优选从EBGP对等体学来的路由EBGP路由优先级高于IBGP路由
优选到Next_Hop的IGP度量值最小的路由
优选Cluster_List最短的路由
优选Router IDOrginator_ID最小的设备通告的路由
优选具有最小IP地址的对等体通告的路
**注意:**
前两条取值越大越优,剩余的取值越小越优
上述规则依序排列BGP进行路由优选时从第一条规则开始执行如果根据第一条规则无法作出判断例如路由的Preferred-Value属性值相同则继续执行下一条规则如果根据当前的规则BGP能够决策出最优的路由则不再继续往下执行
<h5>2.拓扑说明</h5>
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213165945577.png" alt="image-20220213165945577" style="zoom:50%;" />
AS、设备互联地址如图所示所有设备均创建Loopback0接口IP地址为10.0.x.xx为设备编号所有设备使用环回口地址作为Router ID
AS200内运行OSPF在内部互联接口不包含连接外部AS的接口、Loopback接口上激活OSPF
**注意:**
通过import-router命令引入到BGP路由表中的路由的ORIGIN(起点)属性为Incomplete
使用network命令发布到BGP路由表中的网段路由的ORIGIN属性为IGP
```shell
[Huawei]ip ip-prefix 1 permit 10.0.45.0 24
[Huawei-bgp]import-route direct route-policy 1
```
**丢弃下一跳不可达的路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213180106425.png" alt="image-20220213180106425" style="zoom:50%;" />
```shell
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
i 10.0.45.0/24 10.0.24.4 0 100 0 100?
i 10.0.35.5 0 100 0 300?
```
R4、R5将BGP路由10.0.45.0/24通告给AS200时Next_Hop属性值为10.0.24.4、10.0.34.5
R2、R3将路由通告给R1时不修改Next_Hop属性值R1学习到的两条BGP路由10.0.45.0/24下一跳为10.0.24.4、10.0.35.5
R1进行BGP路由下一跳迭代查询时由于R2、R3未在连接外部AS的接口上激活OSPF导致路由迭代失败R1上的BGP路由10.0.45.0/24下一跳不可达
在R1上通过display bgp routing查看BGP路由表此时BGP路由10.0.45.0/24为非有效路由条目
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213180630621.png" alt="image-20220213180630621" style="zoom:50%;" />
如无特殊说明后续所有案例的初始配置都为基础配置加R2、R3开启了next-hop-local
在R2、R3上通过next-hop-local命令修改Next_Hop属性值为本地更新源地址
R2、R3向R1通告BGP路由时Next_Hop属性值将会变为10.0.2.2、10.0.3.3
这两个下一跳地址在R1上能够成功进行路由迭代BGP路由的下一跳地址将会变成可达
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213181019884.png" alt="image-20220213181019884" style="zoom:50%;" />
两条BGP路由下一跳都可达的情况下为什么下一跳为10.0.2.2的BGP路由为最优
**修改Preferred-Value**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213181202095.png" alt="image-20220213181202095" style="zoom:50%;" />
使用preferred-value命令修改R3通告的BGP路由其Preferred-Value为100 优于R2通告BGP路由的默认Preferred-Value R1将会优选R3通告的BGP路由10.0.45.0/24
```shell
bgp 200
peer 10.0.3.3 preferred-value 100
```
查看R1 BGP路由表
```shell
[R1] display bgp routing-table
BGP Local router ID is 10.0.1.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes: 4
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 100 300 i
* i 10.0.2.2 0 0 100 i
```
R310.0.3.3通告的BGP路由拥有更高的Preferred-Value100因此R1将会优选R3通告的BGP路由10.0.45.0/24
**修改Local_Preference**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213181540309.png" alt="image-20220213181540309" style="zoom:50%;" />
R3上执行如下操作
```shell
ip ip-prefix local_pref index 10 permit 10.0.45.0 24
#
route-policy local_pref permit node 10
if-match ip-prefix local_pref
apply local-preference 200
route-policy local_pref permit node 20
#
bgp 200
peer 10.0.1.1 route-policy local_pref export
```
R3上通过路由策略修改通告给R1的BGP路由10.0.45.0/24其Local_Preference属性值
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213182323822.png" alt="image-20220213182323822" style="zoom:50%;" />
```sehll
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 200 0 300?
* i 10.0.2.2 0 100 0 100?
```
下一跳可达、相同Preferred-Value的情况下将会比较Local_PreferenceR3通告的BGP路由Local_Preference值为200高于R2通告的BGP路由R1将会优选R3通告的BGP路由
**本地优先**
本条规则可以概括为在相同条件下,优选本地生成的路由,从对等体学习到的路由条目为次优
同时本地生成的路由也可能存在多种途径,当本地存在多种途径学习到相同路由时,从高到低优先级如下:
手动聚合手动通过aggregate命令在BGP视图内聚合生成的聚合路由
自动聚合Summary automatic命令生成的自动聚合路由
Network方式注入的路由
Import-route方式注入的路由
**手动聚合**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213182811975.png" alt="image-20220213182811975" style="zoom:50%;" />
R3上执行如下操作
```shell
ip route-static 10.0.45.0 255.255.255.128 null0
ip route-static 10.0.45.128 255.255.255.128 null0
bgp 200
aggregate 10.0.45.0 255.255.255.0 detail-suppressed
import-route static
```
为了在R3上进行手动聚合在R3上配置两条指向null0的静态路由用于注入到BGP
R3上配置两条静态路由将静态路由通过import-route注入到BGP并通过aggregate命令进行手动聚合同时增加关键字detail-suppressed抑制明细路由的对外通告
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213183308268.png" alt="image-20220213183308268" style="zoom:50%;" />
R3上查看BGP路由表存在两条BGP路由10.0.45.0/24
本地产生的静态路由注入到BGP中由手动聚合产生
对等体通告由对等体R510.0.35.5)通告
在R3上这两条路由都不存在local_preference、Preferred-Value值此时比较路由来源手动聚合最优R3将会优选本地手动聚合产生的BGP路由
BGP路由表中“s”标志代表该路由条目被抑制
```shell
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.45.0/24 127.0.0.1 0 ?
* 10.0.35.5 0 0 300?
s> 10.0.45.0/25 0.0.0.0 0 0 ?
s> 10.0.45.128/25 0.0.0.0 0 0 ?
```
```shell
[R3]display bgp routing-table 10.0.45.0 24
BGP local router ID : 10.0.3.3
Local AS number : 200
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 10.0.45.0/24:
Aggregated route.
Route Duration: 00h00m14s
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, active,
pre 255
Aggregator: AS 200, Aggregator ID 10.0.3.3, Atomic-aggregate
Advertised to such 2 peers:
10.0.35.5
10.0.1.1
```
R3上通过display bgp routing-table 10.0.45.0 24查看BGP路由10.0.45.0/24的详细信息存在两条有效路由其中最优的为手动聚合产生的路由
**自动聚合**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213183709182.png" alt="image-20220213183709182" style="zoom:50%;" />
R3上执行如下操作
```shell
ip route-static 10.0.45.0 255.255.255.128 null0
ip route-static 10.0.45.128 255.255.255.128 null0
bgp 200
summary automatic
import-route static
```
R3上配置两条静态路由将静态路由通过import-route注入到BGP并开启自动聚合BGP将按照自然网段聚合路由例如非自然网段A类地址10.1.1.1/24和10.2.1.1/24将聚合为自然网段A类地址10.0.0.0/8并且BGP只向对等体通告聚合后的路由
在R3上将会看到路由被聚合为10.0.0.0/8
R5上又注入了路由10.0.0.0/8并通告给了R3
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213184150988.png" alt="image-20220213184150988" style="zoom:50%;" />
```shell
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.0.0 127.0.0.1 0 ?
* 10.0.35.5 0 0 300?
```
R3上查看BGP路由表存在两条BGP路由10.0.0.0
本地产生静态路由注入到BGP中自动聚合产生
对等体通告由对等体R510.0.35.5)通告
在R3上这两条路由都不存在local_preference、Preferred-Value值此时比较路由来源本地产生优于从对等体学习到的R3将会优选本地自动聚合产生的BGP路由
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213184530008.png" alt="image-20220213184530008" style="zoom:50%;" />
在R3上执行手动聚合
```shell
bgp 200
aggregate 10.0.0.0 255.0.0.0 detail-suppressed
```
查看R3的BGP路由表
```shell
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.0.0 127.0.0.1 0 ?
* 127.0.0.1 0 ?
* 10.0.35.5 0 0 300?
```
优选的依旧是本地产生的BGP路由但是可以看到本地产生的BGP路由有两条从该表项无法判断出优选的为手动聚合还是自动聚合产生的BGP路由
```shell
BGP local router ID : 10.0.3.3
Local AS number : 200
Paths: 3 available, 1 best, 1 select
BGP routing table entry information of 10.0.0.0/8:
Aggregated route.
Route Duration: 00h08m17s
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, active,
pre 255
Aggregator: AS 200, Aggregator ID 10.0.3.3, Atomic-aggregate
Advertised to such 2 peers:
10.0.35.5
10.0.1.1
```
R3上通过display bgp routing-table 10.0.0.0 查看BGP路由10.0.0.0/8的详细信息存在三条有效路由其中最优的条目由聚合产生并且存在Atomic-aggregate属性由此可以看出该聚合条目为手动聚合产生的条目
R3上相同的BGP聚合路由手动聚合 > 自动聚合
在该案例中我们验证了手动聚合产生的BGP路由优于自动聚合产生的BGP路由
**优选AS_Path最短**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213184802632.png" alt="image-20220213184802632" style="zoom:50%;" />
R2上通过路由策略修改通告给R1的BGP路由其AS_Path属性值
```shell
ip ip-prefix as_path index 10 permit 10.0.45.0 24
#
route-policy as_path permit node 10
if-match ip-prefix as_path
apply as-path 400 additive
route-policy as_path permit node 20
#
bgp 200
peer 10.0.1.1 route-policy local_pref export
```
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213185639293.png" alt="image-20220213185639293" style="zoom:50%;" />
```shell
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 100 0 300?
* i 10.0.2.2 0 100 0 400 100?
```
R3通告的BGP路由拥有更短的AS_Path在前几条优选规则一致的情况下R1优选R3通告的BGP路由
**Origin属性验证 **
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213185757569.png" alt="image-20220213185757569" style="zoom:50%;" />
```shell
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.2.2 0 100 0 100?
* i 10.0.3.3 0 100 0 300?
```
R4、R5上默认采用import-route方式将路由10.0.45.0/24注入到BGPR1的BGP路由表中两条BGP路由10.0.45.0/24其Origin属性都是“此时R1优选R4注入的BGP路由
在R5上修改注入路由的方式为network,之后在R1上再次查看BGP路由表
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213190023969.png" alt="image-20220213190023969" style="zoom:50%;" />
此时R5注入的BGP路由10.0.45.0/24其Origin属性为“i”在前几条优选规则相同情况下起源类型为“i”的BGP路由成为优选路由
```shell
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 100 0 300i
* i 10.0.2.2 0 100 0 100?
```
**优选MED最小**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213190359185.png" alt="image-20220213190359185" style="zoom:50%;" />
R2上通过路由策略修改通告给R1的BGP路由其MED属性值
```shell
ip ip-prefix med index 10 permit 10.0.45.0 24
#
route-policy med permit node 10
if-match ip-prefix med
apply cost 20
route-policy med permit node 20
#
bgp 200
peer 10.0.1.1 route-policy med export
compare-different-as-med
```
默认情况下BGP只会对来自同一个AS的相同路由比较MED值可以通过命令开启来自不同AS的相同路由也比较MED值
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213190826909.png" alt="image-20220213190826909" style="zoom:50%;" />
R4发布的BGP路由MED值为20R5发布的BGP路由不携带MED值不携带默认为0R5发布的BGP路由拥有更小的MED值R1优选R5发布的BGP路由
```shell
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.0.45.0/24 10.0.3.3 0 100 0 300
* i 10.0.2.2 20 100 0 100?
```
**优选从EBGP对等体学来的路由**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213191121948.png" alt="image-20220213191121948" style="zoom:50%;" />
**R1上执行如下操作**
```shell
ip route-static 10.0.45.0 255.255.255.0 null0
ip ip-prefix ebgp index 10 permit 10.0.45.0 24
#
route-policy ebgp permit node 10
if-match ip-prefix ebgp
apply as-path 500 additive
route-policy ebgp permit node 20
#
bgp 200
import-route static
peer 10.0.3.3 route-policy ebgp export
```
在R1上创建一条10.0.45.0/24的静态路由指向null0将该条路由发布到BGP同时为了保证R1、R5通告给R3的BGP路由AS_Path长度相同使用路由策略为R1通告给R3的路由加上AS_Path属性其值为500
R3上将会同时收到R1、R5通告的BGP路由10.0.45.0/24并且前面的优选规则无法比较出优选路由
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213191209692.png" alt="image-20220213191209692" style="zoom:50%;" />
```shell
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 10.0.45.0/24 10.0.35.5 0 0 300?
* i 10.0.1.1 0 100 0 500?
```
此时比较通告路由的对等体类型R5为EBGP对等体R1为IBGP对等体EBGP对等体通告的BGP路由优于IBGP对等体通告的BGP路由R3优选R5通告的BGP路由
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.1.1 (10.0.1.1)
Route Duration: 00h06m43s
Relay IP Nexthop: 10.0.13.1
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.1.1
Qos information : 0x0
AS-path 500, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 1, not preferred for peer type
Not advertised to any peer yet
```
R3上通过display bgp routing-table 10.0.45.0 24查看BGP路由的详细信息可以看到如下内容
not preferred for peer type表明该路由因为对等体类型没有被优选
**IGP Cost **
```shell
BGP local router ID : 10.0.1.1
Local AS number : 200
Paths: 2 available, 1 best, 1 select
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.3.3 (10.0.3.3)
Route Duration: 00h22m35s
Relay IP Nexthop: 10.0.13.3
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 10.0.3.3
Qos information : 0x0
AS-path 300, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, best, select, active, pre 255, IGP cost 1
Not advertised to any peer yet
```
在BGP路由详细信息中存在IGP cost值这一内容该值为本地IP路由表中去往Original nexthop地址的路由Cost值
```shell
Destination/Mask Proto Pre Cost NextHop Interface
10.0.3.3/32 OSPF 10 1 10.0.13.3 GigabitEthernet0/0/1
```
当前7条优选规则无法比较出优选BGP路由时将会比较前往下一跳地址的IGP cost值
优选IGP Cost值最小
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213191516950.png" alt="image-20220213191516950" style="zoom:50%;" />
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220213191539842.png" alt="image-20220213191539842" style="zoom:50%;" />
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.2.2 (10.0.2.2)
Route Duration: 00h24m07s
Relay IP Nexthop: 10.0.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.2.2
Qos information : 0x0
AS-path 100, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 10, not preferred for IGP cost
Not advertised to any peer yet
```
R1上通过display bgp routing-table 10.0.45.0 24 查看BGP路由的详细信息下一跳10.0.2.2的BGP路由其IGP cost值变为了10而下一跳为10.0.3.3的BGP路由其IGP cost为默认值1所以R1优选下一跳为10.0.3.3的路由
在R1的路由详细信息中可以看到如下内容not preferred for IGP cost表明该路由因为IGP cost未被优选
<h5>BGP路由等价负载分担</h5>
在大型网络中到达同一目的地通常会存在多条有效BGP路由设备只会优选一条最优的BGP路由将该路由加载到路由表中使用这一特点往往会造成很多流量负载不均衡的情况
通过配置BGP负载分担可以使得设备同时将多条等代价的BGP路由加载到路由表实现流量负载均衡减少网络拥塞
值得注意的是尽管配置了BGP负载分担设备依然只会在多条到达同一目的地的BGP路由中优选一条路由并只将这条路由通告给其他对等体
在设备上使能BGP负载分担功能后只有满足条件的多条BGP路由才会成为等价路由进行负载分担
注意:
默认情况下设备只会对AS_Path完全相同的路由进行负载分担可以使用load-balancing as-path-ignore忽略AS_Path路径不一致
在公网中到达同一目的地的路由形成负载分担时系统会首先判断最优路由的类型。若最优路由为IBGP路由则只是IBGP路由参与负载分担若最优路由为EBGP路由则只是EBGP路由参与负载分担即公网中到达同一目的地的IBGP和EBGP路由不能形成负载分担
**形成BGP路由等价负载分担的条件**
Preferred-Value属性值相同
Local_Preference属性值相同
都是聚合路由或者非聚合路由
AS_Path属性长度相同
Origin类型IGP、EGP、Incomplete相同
MED属性值相同
都是EBGP路由或都是IBGP路由
AS内部IGP的Metric相同
AS_Path属性完全相同
**配置BGP路由负载分担**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214095414614.png" alt="image-20220214095414614" style="zoom:50%;" />
以左侧拓扑为例R1上两条BGP路由在不做任何路由策略、配置的情况下前8条优选规则无法比较出优选路由。因此可以配置IBGP路由的负载分担
**配置BGP路由负载分担后**
IP路由表中出现了到达10.0.45.0/24的等价路由
```shell
[R1]display ip routing-table 10.0.45.0 24
Route Flags: R - relay, D - download to fib
-------------------------------------------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 2
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.0.45.0/24 IBGP 255 0 RD 10.0.2.2 GigabitEthernet0/0/0
IBGP 255 0 RD 10.0.3.3 GigabitEthernet0/0/1
```
BGP路由表中依旧只有一条最优的路由
```shell
[R1]display bgp routing-table
BGP Local router ID is 10.0.1.1
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 10.0.45.0/24 10.0.2.2 0 100 0 45?
* i 10.0.3.3 0 100 0 45?
```
**优选Cluster_List最短案例**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100405685.png" alt="image-20220214100405685" style="zoom:50%;" />
对拓扑做如下修改:
只在R5上将10.0.45.0/24发布到BGP
配置R1为RRR3为R1的客户端
R2、R3之间基于环回口建立IBGP对等体关系
R2上将收到R3通告的BGP路由10.0.45.0/24、R1反射的BGP路由10.0.45.0/24
默认配置下前面介绍的规则无法比较出优选路由此时将根据Cluster_List进行优选
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100507749.png" alt="image-20220214100507749" style="zoom:50%;" />
从BGP路由表中无法看出优选的是R1反射的BGP路由还是R3通告的BGP路由此时可以通过命令display bgp routing 10.0.45.0 24查看BGP路由详细信息
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.1.1 (10.0.1.1)
Route Duration: 00h03m10s
Relay IP Nexthop: 10.0.12.1
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.3.3
Qos information : 0x0
AS-path 300, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 2, not preferred for Cluster List
Originator: 10.0.3.3
Cluster list: 10.0.1.1
Not advertised to any peer yet
```
经由R1反射的路由不是最优路由原因也被标出not preferred for Cluster List
R3直接通告给R2的BGP路由因为没有经过路由反射器不存在Cluster_List属性即被认为Cluster_List长度为0小于由R1反射的BGP路由其Cluster_List长度1所以R3通告的BGP路由为优选路由
**优选Router ID最小**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100610262.png" alt="image-20220214100610262" style="zoom:50%;" />
在我们的讲解拓扑中默认配置下R1从R2、R3都会收到BGP路由10.0.45.0/24并且前面的优选规则无法比较出优选路由最终将会根据本条规则优选Router ID最小的对等体通告的BGP路由在本案例中也就是R2通告的BGP路由
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.3.3 (10.0.3.3)
Route Duration: 00h40m15s
Relay IP Nexthop: 10.0.13.3
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 10.0.3.3
Qos information : 0x0
AS-path 300, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 1, not preferred for router ID
Not advertised to any peer yet
```
查看R1的BGP路由表详细信息来自10.0.3.3的BGP路由因Router ID原因没有被优选not preferred for router ID
**优选Orginator_ID最小**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100712555.png" alt="image-20220214100712555" style="zoom:50%;" />
如果BGP路由携带Originator_ID属性则在本条规则的优选过程中将比较Originator_ID的大小并优选Originator_ID最小的BGP路由
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100729453.png" alt="image-20220214100729453" style="zoom:50%;" />
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.3.3 (10.0.3.3)
Route Duration: 00h33m15s
Relay IP Nexthop: 10.0.13.3
Relay IP Out-Interface: GigabitEthernet0/0/1
Original nexthop: 10.0.5.5
Qos information : 0x0
AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, internal, pre 255, IGP cost 2, not preferred for router ID
Originator: 10.0.5.5
Cluster list: 10.0.3.3
Not advertised to any peer yet
```
R3反射过来的BGP路由未被优选原因标注的还是Router ID这里的Router ID其实是指Originator ID其中携带的内容为原始路由发布者的Router ID
**优选具有最小IP地址的对等体**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100814562.png" alt="image-20220214100814562" style="zoom:50%;" />
当前面所有规则都无法比较出优选路由时,此时会根据对等体地址大小来进行优选,对等体地址较小者发送的路由较优
修改前一条规则的验证拓扑R2、R3都与R4相连R4作为RR客户端只在R4上将路由发布到BGP此时R2、R3反射的BGP路由将拥有相同的Originator ID10.0.4.4
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214100839883.png" alt="image-20220214100839883" style="zoom:50%;" />
```shell
BGP routing table entry information of 10.0.45.0/24:
From: 10.0.3.3 (10.0.3.3)
Route Duration: 00h01m07s
Relay IP Nexthop: 10.0.12.2
Relay IP Out-Interface: GigabitEthernet0/0/0
Original nexthop: 10.0.4.4
Qos information : 0x0
AS-path Nil, origin incomplete, MED 0, localpref 100, pref-val 0, valid, intern
al, pre 255, IGP cost 2, not preferred for peer address
Originator: 10.0.4.4
Cluster list: 10.0.3.3
Not advertised to any peer yet
```
R3反射过来的BGP路由未被优选原因为对等体地址较大来自R2反射的路由对等体地址为10.0.2.2而R3反射的路由对等体地址为10.0.3.3,因此未被优选
<h3>第四节BGP EVPN基础</h3>
<h4>MP-BGP</h4>
MP-BGPMultiprotocol Extensions for BGP-4在RFC4760中被定义用于实现BGP-4的扩展以允许BGP携带多种网络层协议例如IPv6、L3VPN、EVPN等。这种扩展有很好的后向兼容性即一个支持MP-BGP的路由器可以和一个仅支持BGP-4的路由器交互
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101250549.png" alt="image-20220214101250549" style="zoom:50%;" />
<h5>1.BGP-4扩展</h5>
BGP-4中IPv4特有的三个信息是NEXT_HOP属性、AGGREGATOR和IPv4 NLRI。因此为了支持多种网络层协议BGP-4需要增加两种能力关联其他网络层协议下一跳信息的能力、关联其他网络层协议NLRI的能力
这种两种能力被互联网数字分配机构IANA统称为地址族Address FamilyAF
为了实现后向兼容性协议规定MP-BGP增加两种新的属性MP_REACH_NLRI和MP_UNREACH_NLRI分别用于表示可达的目的信息和不可达的目的信息。这两种属性都属于可选非过渡optional and non-transitive
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101358995.png" alt="image-20220214101358995" style="zoom:50%;" />
BGP-4规定IPv4的NEXT_HOP和AGGREGATOR属于Path attributes字段IPv4的NLRI中携带IPv4的路由条目
MP-BGP新增Path attributes的字段将对应的网络层协议的NEXT_HOP字段和NLRI归属于MP_REACH_NLRI。MP_REACH_NLRI为Path attributes的新增字段
**MP_REACH_NLRI**
MP_REACH_NLRI被携带于BGP Update报文中有以下作用
通告可达的路由给BGP邻居
通告可达路的路由的下一跳给BGP邻居
其详细字段如下:
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101546653.png" alt="image-20220214101546653" style="zoom:50%;" />
**MP_UNREACH_NLRI**
MP_UNREACH_NLRI被携带于BGP Update报文中用于撤销不可达的路由
其详细字段如下:
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101617706.png" alt="image-20220214101617706" style="zoom:50%;" />
<h4>EVPN</h4>
<h5>1.EVPN简介</h5>
**MPLS简介**
MPLS Multiprotocol Label Switching多协议标记交换位于TCP/IP协议栈中的数据链路层和网络层之间在两层之间增加了额外的MPLS头部。报文转发直接基于MPLS头部。MPLS头部又被称为MPLS标签Label;MPLS以标签交换替代IP转发实现了基于标签的快速转发
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101731111.png" alt="image-20220214101731111" style="zoom:50%;" />
MPLS起源于IPv4Internet Protocol version 4其核心技术可扩展到多种网络协议包括IPv6Internet Protocol version 6、IPXInternet Packet Exchange、Appletalk、DECnet、CLNPConnectionless Network Protocol等。MPLS中的“Multiprotocol”指的就是支持多种网络协议
MPLS以标签交换替代IP转发。标签是一个短而定长的、只具有本地意义的连接标识符与ATM的VPI/VCI以及Frame Relay的DLCI类似
MPLS域MPLS Domain一系列连续的运行MPLS的网络设备构成了一个MPLS域
**VPLS简介**
VPLSVirtual Private LAN Service是一种基于以太网的二层VPN技术它在MPLS网络上提供了类似LAN的业务允许用户可以从多个地址位置接入网络、相互访问
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101833140.png" alt="image-20220214101833140" style="zoom:50%;" />
**传统L2VPN**
传统的L2VPN业务例如VPLSVirtual Private LAN Service提供用户远程站点之间二层连接服务。它组建二层交换网像二层交换机一样透传以太报文。本例中PE1和PE2组建的VPLS网络透传CE1和CE2之间的VLAN流量
因此在传统L2VPN中对于远端MAC地址的学习依靠ARP广播泛洪PE设备将需要承载广播流量。广播占用较多的接口带宽这是传统L2VPN的一个典型问题
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101914378.png" alt="image-20220214101914378" style="zoom:50%;" />
**EVPN的诞生**
随着新技术和新场景对网络需求VPLS被暴露出更多的问题无法满足二层VPN的需求。业界重新审视了对Ethernet VPN的需求RFC 7209提出新的解决方案EVPNEthernet VPN
EVPN最初在RFC 7432中被定义EVPN引入控制平面用于更好的控制MAC地址学习过程
EVPN的控制平面采用MP-BGP数据平面支持MPLS LSPs或者IP/GRE tunneling
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214101947745.png" alt="image-20220214101947745" style="zoom:50%;" />
**EVPN的优势**
EVPN颠覆了传统L2 VPN数据面学习的方式引入控制面学习MAC和IP指导数据转发实现了转控分离
EVPN解决传统L2 VPN的典型问题带来双活快速收敛简化运维等更多的价值
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102025087.png" alt="image-20220214102025087" style="zoom:50%;" />
EVPN其他优势
支持CE多活接入PE
支持PE成员自动发现
环路避免
广播流量优化
支持ECMP
<h5>2.EVPN常见路由</h5>
**EVPN NLRI**
EVPN定义了一种新的BGP NLRINetwork Layer Reachable Information来承载所有的EVPN路由被称为EVPN NLRI
EVPN NLRI是MP-BGP的新型扩展被包含于MP_REACH_NLRI中定义了新的NLRI。它规定了EVPN的AFIAddress Family Identifier是25SAFISubsequent Address Family Identifier是70
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102215683.png" alt="image-20220214102215683" style="zoom:50%;" />
**EVPN路由**
EVPN NLRI格式采用TLVType-Length-Value三元组结构使得报文具有很强的灵活性和扩展性
Route Type定义了不同的EVPN路由。RFC 7432中首先定义了四类路由
Length定义了字段的长度
Route Type Specifc则表示不同的路由类型有不同的字段填充
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102256990.png" alt="image-20220214102256990" style="zoom:50%;" />
**EVPN更多类型路由及作用**
EVPN不仅限于二层VPN的应用随着其EVPN路由类型的增加支持更多的应用例如L3 VPN功能
| **路由类型** | **作用** | **RFC** |
| ----------------------------------- | ---------------------------------------------- | ----------------------------------------- |
| (Type 1) Ethernet A-D Route | • 别名• MAC地址批量撤销• 多活指示• 通告ESI标签 | RFC 7432 |
| (Type 2) MAC/IP Advertisement Route | • MAC地址学习通告• MAC/IP绑定• MAC地址移动性 | |
| (Type 3) Inclusive Multicast Route | 组播隧道端点自动发现&组播类型自动发现 | |
| (Type 4) Ethernet Segment Route | ES成员自动发现DF选举 | |
| (Type 5) IP Prefix Route | IP Prefix通告支持L3 VPN | draft-ietf-bess-evpn-prefix-advertisement |
**EVPN协议标准**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102438115.png" alt="image-20220214102438115" style="zoom:50%;" />
<h5>3.EVPN典型应用场景</h5>
**EVPN在广域IP承载网的应用**
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102541931.png" alt="image-20220214102541931" style="zoom:50%;" />
**EVPN在数据中心网络的应用**
在云数据中心采用EVPN的NVONetwork Virtualization Overlay解决方案RFC 8365
推荐数据平面使用VXLAN封装与控制平面EVPN结合构建灵活的数据中心Overlay网络
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102613347.png" alt="image-20220214102613347" style="zoom:50%;" />
**EVPN在园区网的应用**
园区网虚拟化园区解决方案同在云数据中心相同采用EVPN的NVO解决方案RFC 8365
在不同的底层组网上使用VXLAN封装与控制平面EVPN结合构建灵活的数据中心Overlay网络
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102642985.png" alt="image-20220214102642985" style="zoom:50%;" />
**EVPN在SD-WAN的应用**
SD-WAN是新一代的企业分支互联解决方案支持智能动态选路、ZTP和可视化等特性
SD-WAN解决方案中在RR与CPE之间部署EVPN用于在控制平面传播SD-WAN的Overlay VPN路由数据平面采用IPSec VPN构建安全的转发通道
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214102721347.png" alt="image-20220214102721347" style="zoom:50%;" />
<h4>企业级部署BGP/MPLS IP VPN实现互通 </h4>
<h5>1. MPLS VPN技术原理与配置</h5>
连接客户的边缘设备叫做PE 设备
在运营商网络中除了PE设备就是P设备
客户连接运营商的设备叫做CE设备
在PE设备和CE设备间运行BGP
VRF叫做VPN实例表解决地址重叠问题
**VPN 配置解释**
**路由传递**
```
1.保证PE 能学到本地CE的路由。
*创建VRF表
#ip vpn-instance 1 建立一个VPN实例列表。PE设备为每个CE设备创建一个路由表表里有CE设备的路由。
#ipv4-family 开启IPV4功能。
#route-distinguisher 100100 rd是一个和ipv4地址绑定的标识。传送过程中地址不能重叠。解决在传送过程中地址重叠问题
#vpn-target 100100 export target 出 import target 入,标识应该收那些路由
解决对端设备在收路由时应该放入那个实例表的问题
*接口加入VRF
进入接口——ip binding vpn-instance 1 接口ip绑定vpn实例。(配完后接口命令全部清空将原接口的路由本身在全局路由表内现将全部配置到VRF表中所以需要清空
dis ip routing-table vpn-instance 1 验证一下路由表与dis ip routing-table作比较
]ping -vpn-instance 1 +ip地址
*在PE和CE之间运行IGP协议。
ospf 1 vpn-instance 1 isis 1 vpn-instance 2
display ospf peer brief display Isis peer vpn-instance 2
2.保证PE 能从对方PE 学到路由
配置IGP
*display ospf peer 查看ospf邻居
*display ip routing-table 查看ip路由表
配置MPLS
*display mpls ldp session 检查ldp邻居
*验证lspdisplay mpls lsp
配置BGP VPNV4
*bgp 100
*peer 4.4.4.4 as 100 peer IGP 邻居
*peer 4.4.4.4 connect-int loopback 0
*peer 4.4.4.4 ne
*ipv4-family vpnv4
*peer 4.4.4.4 enable
*验证display bgp vpnv4 all peer 查看bgp vpnv4邻居
配置DR
*ip vpn-instance 1
*route-distinguisher 100100
*vpn-target 100100
将VRF内的IGP引入BGP
ipv4-family vpn-instance 1
peer 12.1.1.1 as-number 200
import-route ospf 2
配置RT
*ip vpn-instance 1
*vpn-target 100100
检查PE是否受到PC的路由表display bgp vpnv4 vpn-instance 3 routing-table
检查IP的路由表 display ip routing-table vpn-instance 3
保证CE能学到对方CE的路由
import-route bgp
```
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20220214104236177.png" alt="image-20220214104236177" style="zoom:50%;" />
**组网需求:**
CE1、CE3属于vpna
CE2、CE4属于vpnb
vpna使用的VPN-target属性为111:1vpnb为222:2
不同VPN用户之间不能互相访问
PE之间必须使用32位掩码的Loopback接口地址来建立MP-IBGP对等体关系以便能够迭代到隧道
**配置PE1**
```
sysname PE1
#
ip vpn-instance vpna //创建VPN实例vpna
ipv4-family
route-distinguisher 100:1 //路由标识符
vpn-target 111:1 export-extcommunity
vpn-target 111:1 import-extcommunity
#
ip vpn-instance vpnb //创建VPN实例vpnb
ipv4-family //开启IPV4功能
route-distinguisher 100:2
vpn-target 222:2 export-extcommunity
vpn-target 222:2 import-extcommunity
#
mpls lsr-id 1.1.1.9 //配置MPLS
mpls
#
mpls ldp //建立LDP
#
interface GE0/0/0 //绑定VPN实例
ip binding vpn-instance vpna
ip address 10.1.1.2 255.255.255.0
#
interface GE0/0/1
ip binding vpn-instance vpnb //绑定VPN实例
ip address 10.2.1.2 255.255.255.0
#
interface GE0/0/2 //接口使能MPLS
ip address 172.1.1.1 255.255.255.0
mpls
mpls ldp
#
interface LoopBack1
ip address 1.1.1.9 255.255.255.255
#
bgp 100 //配置MP-IBGP对等体
peer 3.3.3.9 as-number 100
peer 3.3.3.9 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
peer 3.3.3.9 enable
#
ipv4-family vpnv4 //使能对等体交换VPNv4路由信息的能力
policy vpn-target
peer 3.3.3.9 enable
#
ipv4-family vpn-instance vpna //配置PE与CE之间建立EBGP对等体关系 引入VPN路由
peer 10.1.1.1 as-number 65410
import-route direct
#
ipv4-family vpn-instance vpnb //配置PE与CE之间建立EBGP对等体关系 引入VPN路由
peer 10.2.1.1 as-number 65420
import-route direct
#
ospf 1 //配置公网路由
area 0.0.0.0
network 172.1.1.0 0.0.0.255 network 1.1.1.9 0.0.0.0
```
**配置P**
```
sysname P
#
mpls lsr-id 2.2.2.9 //配置MPLS mpls
#
mpls ldp
#
interface GE0/0/0
ip address 172.1.1.2 255.255.255.0 mpls
mpls ldp
#
interface GE0/0/1
ip address 172.2.1.1 255.255.255.0 mpls
mpls ldp
#
interface LoopBack1
ip address 2.2.2.9 255.255.255.255
#
ospf 1 //配置公网路由
area 0.0.0.0
network 172.1.1.0 0.0.0.255 network 172.2.1.0 0.0.0.255 network 2.2.2.9 0.0.0.0
#
```
**配置PE2**
```
sysname PE2
#
ip vpn-instance vpna
ipv4-family
route-distinguisher
//创建VPN实例vpna
200:1
vpn-target 111:1 export-extcommunity vpn-target 111:1 import-extcommunity
#
ip vpn-instance vpnb ipv4-family
route-distinguisher //创建VPN实例vpnb
200:2
vpn-target 222:2 export-extcommunity vpn-target 222:2 import-extcommunity
#
mpls lsr-id 3.3.3.9 //配置MPLS LSR
mpls
#
mpls ldp
#
interface Ethernet1/0/0 //绑定VPN实例
ip binding vpn-instance vpna
ip address 10.3.1.2 255.255.255.0
#
interface Ethernet2/0/0 //绑定VPN实例
ip binding vpn-instance vpnb
ip address 10.4.1.2 255.255.255.0
#
interface Ethernet2/0/1 //接口使能MPLS
ip address 172.2.1.2 255.255.255.0
mpls
mpls ldp
#
interface LoopBack1
ip address 3.3.3.9 255.255.255.255
#
bgp 100 //配置MP-IBGP对等体
peer 1.1.1.9 as-number 100
peer 1.1.1.9 connect-interface LoopBack1
#
ipv4-family unicast
undo synchronization
peer 1.1.1.9 enable
#
ipv4-family vpnv4 //使能对等体交换VPNv4路由信息的能力
policy vpn-target
peer 1.1.1.9 enable
#
ipv4-family vpn-instance vpna //配置PE与CE之间建立EBGP对等体关系 引入VPN路由
peer 10.3.1.1 as-number 65430
import-route direct
#
ipv4-family vpn-instance vpnb //配置PE与CE之间建立EBGP对等体关系 引入VPN路由
peer 10.4.1.1 as-number 65440
import-route direct
#
ospf 1 //配置公网路由
area 0.0.0.0
network 172.2.1.0 0.0.0.255
network 3.3.3.9 0.0.0.0
#
```
**配置CE1**
```
sysname CE1
#
interface GE0/0/0
ip address 10.1.1.1 255.255.255.0
#
bgp 65410 //在PE与CE之间建立EBGP对等体关系
peer 10.1.1.2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct //引入直连路由
peer 10.1.1.2 enable
#
```
**配置CE2**
```
sysname CE2
#
interface GE0/0/0
ip address 10.2.1.1 255.255.255.0
#
bgp 65420 //在PE与CE之间建立EBGP对等体关系
peer 10.2.1.2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct //引入直连路由
peer 10.2.1.2 enable
```
**配置CE3**
```
sysname CE3
#
interface GE0/0/0
ip address 10.3.1.1 255.255.255.0
#
bgp 65430 //在PE与CE之间建立EBGP对等体关系
peer 10.3.1.2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct //引入直连路由
peer 10.3.1.2 enable
#
```
**配置CE4**
```
sysname CE4
#
interface GE0/0/0
ip address 10.4.1.1 255.255.255.0
#
bgp 65440 //在PE与CE之间建立EBGP对等体关系
peer 10.4.1.2 as-number 100
#
ipv4-family unicast
undo synchronization
import-route direct //引入直连路由
peer 10.4.1.2 enable
```
**测试**
属于同一个VPN实例的路由器之间可以实现互相通信
保证PE 能从对方PE 学到路由
display ospf peer 查看ospf邻居
```
OSPF Process 1 with Router ID 1.1.1.9
Neighbors
Area 0.0.0.0 interface 172.1.1.1(GigabitEthernet0/0/2)'s neighbors
Router ID: 172.1.1.2 Address: 172.1.1.2
State: Full Mode:Nbr is Master Priority: 1
DR: 172.1.1.1 BDR: 172.1.1.2 MTU: 0
Dead timer due in 40 sec
Retrans timer interval: 5
Neighbor is up for 01:24:54
Authentication Sequence: [ 0 ]
```
display ip routing-table 查看ip路由表
display mpls ldp session 检查ldp邻居
display mpls lsp 验证lsp
```
LSP Information: BGP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
10.1.1.0/24 1026/NULL -/- vpna
10.2.1.0/24 1027/NULL -/- vpnb
-------------------------------------------------------------------------------
LSP Information: LDP LSP
-------------------------------------------------------------------------------
FEC In/Out Label In/Out IF Vrf Name
2.2.2.9/32 NULL/3 -/GE0/0/2
2.2.2.9/32 1024/3 -/GE0/0/2
1.1.1.9/32 3/NULL -/-
3.3.3.9/32
3.3.3.9/32 NULL/1025 1025/1025 -/GE0/0/2 -/GE0/0/2
```
VRF叫做VPN实例表 解决地址重叠问题
转发等价类(FEC) 是一个用在多协议标签交换(MPLS)中的术语
display bgp vpnv4 vpn-instance vpnb routing-table
display ip routing-table vpn-instance vpnb