目录
目录
前言
根据AS自治系统可以将动态路由协议划分为IGP和EGP协议。IGP协议是应用在AS内部,如HCIA当中学到的OSPF,RIP等协议,而EGP协议用在AS之间,用于获取不同AS的路由信息,例如BGP协议。
一.BGP协议概述
BGP(Border Gateway Protocol,边界网关协议)是一种在互联网中广泛使用的路由协议。它主要用于在互联网中传递路由信息,帮助互联网上的各个自治网络(AS,Autonomous System)之间建立连接,并进行路由选择。BGP协议是一种自治系统间的协议,用于控制路由的传递和选择。它能够实现异构网络之间的互操作,保证网络的可靠性和可扩展性。BGP协议的主要功能包括:路由选择、路由信息交换、路由策略控制等。
二.BGP协议简介
- BGP通过传递路由条目来获取路由信息
- BGP协议是一种路径矢量型协议
- BGP协议是一种无类别的路由信息
- BGP协议为保证传输可靠性和稳定性使用TCP协议作为传输层协议,端口号179
RIP是距离矢量型协议的一种,使用贝尔曼福特算法,以路由器为跳数计算,而BGP协议是路径矢量型协议的一种,以一个AS为跳数传递信息。
IGP协议的目的是通过自身独有的算法计算出未知网段的信息,根据算法不同将协议分为距离矢量型和链路状态型例如,RIP协议使用贝尔曼福特算法,OSPF使用最短路径优先算法。
BGP协议作为EGP协议的一种,只负责将IGP协议计算完成的路由信息传递给其它AS。
EGP协议特点:
在BGP协议中没有开销值的概念,因此BGP协议并非通过开销值来干涉选路,而是通过 给每一条路由信息赋予特定的属性来干涉选路。
BGP协议具有触发更新,没有周期更新,为了保证可靠性,BGP协议使用TCP协议。
TCP协议的特点是面向连接的协议,需要在传输数据之前建立连接,并且只能同时建立一个连接,导致TCP协议只能实现单波通信,因此BGP协协议无法通过广播的方式自动发现邻居关系,只能手工配置。 然而BGP协议由于是建立在TCP协议基础上的缘故,可以进行非直连建邻。
- 非直连建邻的条件:建邻双方必须能够互相通信
- 运行TCP协议的前提;双方能够正常通信
- BGP的非直连建邻是建立在IGP基础上的原因:AS内部运行IGP协议帮助双方建立通信
EBGP和IBGP概念:
EBGP:运行于不同AS之间的BGP称为EBGP。
IBGP:运行于同一AS内部的BGP称为IBGP。
EBGP对等体关系:建立对等体的两台设备在不同的AS之间
IBGP对等体关系:建立对等体的两台设备在相同的AS之间
为了保证EBGP对等体关系直连建立,EBGP对等体之间的数据包中的TTL值被设置为 1
如果EBGP对等体需要非直连建领,则需要将 TTL值改大,而IBGP对等体之间都是非直连建邻。则IBGP对等体数据包的TTL值被设置为255 。
TTL值概念:
IP数据包在计算机网络中可以存活的时间或者IP数据包在计算机网络中可以转发的最大跳数
二.BGP工作原理
BGP工作中的5类报文:
Open 报文:
是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
Open 报文含有以下几种参数:
- AS号:
open报文中将携带发出设备所在的AS号,对端收到后会和手工配置邻居中指定的AS号进行对比,如果一致,则可以正常建立对等体关系,否则,不可建立。
- Router-id:
open报文中将携带自己发出者的RID ,对端收到后,将和自己的RID进行对比,如果相同,则证明RID冲突,对等体关系将建立失败。
- 保活时间:
在发送open中将携带保活时间,默认180S,如果在保活时间内收到keep-live报文或update报文,将刷新保活时间,时间归零后将判定对等体失效,由于保活时间允许不同,为了实现保活时间的统一执行,选择数值小的作为保活时间执行。
- 认证参数:
BGP可以进行认证,认证参数携带在tcp的选项字段中,认证不通过,将无法正常建立邻居关系
在进行BGP配置时手工配置的对等体IP地址必须和对端的发送的数据包中的IP相同,否则无法建立对等体关系。
Keep-live报文
BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性,从而保活邻居关系。
周期时间根据保活时间来决定,周期发送时间为保活时间的1/3。
Open报文中的Keep-live报文主要充当临时确认报文使用,用来确认open报文中的参数是否符合建邻要求,符合则发送keep-live报文确认之后建邻,而非简单的确认数据是否收到,数据传递的可靠性交给TCP来确认(Tcp三次握手)
Update 报文
用于在对BGP等体之间交换路由信息。
BGP协议中Update报文包含以下信息:
-
需要撤销的路由信息:如果准备发送新的路由信息,就必须撤销旧的路由信息。
-
需要新增的路由信息:包含具体的路由信息,如路由的目的地址、下一跳地址、AS_Path属性等。
-
需要修改的路由信息:更新已经存在的路由信息,例如修改某一路由的属性。
-
需要撤销的路由属性:指定需要撤销的路由信息的属性。
-
需要新增的路由属性:指定需要新增的路由信息的属性。
-
需要修改的路由属性:指定需要更新的路由信息的属性。
-
路由删减通知: 如果收到的Update报文中不包含某些路由,就需要将这些路由从路由表中删除并通知其他路由器。
Notification报文
当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
BGP使用这个报文进行错误告警,告知错误点处。预警机制保障BGP全过程 。
Route-Refresh报文
BGP协议中的Route-Refresh报文是用于更新BGP路由表的一种机制。BGP路由表是由路由器交换的路由信息组成的,当网络拓扑发生变化时,BGP路由表需要及时更新,保证网络的正常运行。Route-Refresh报文可以让BGP路由器重新发送所有的NLRI(描述一个路由器所能到达的目的网络),以便更新路由表。
具体来说,当一台路由器向其邻居发送Route-Refresh报文时,邻居会将所有已经发布的路由信息都清除掉,然后重新发送所有的NLRI给该路由器。这样,该路由器就可以更新自己的路由表,并将新的路由信息传递给其他邻居路由器,从而实现全网的路由信息同步
报文格式
Marker(标记):16字节,固定为1。
Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等
1 – OPEN
2 – UPDATE
3 –NOTIFICATION
4 – KEEPALIVE
三.BGP的状态机
BGP和OSPF不同,OSPF中只要宣告完成,接口被激活同时该接口所对应的直连网段路由信息将会被通告出去。
BGP在邻居关系建立完成后发送一次已发布的路由,后续不再主动发送,除非本地路由条目有更新时才发布更新路由v。OSPF的状态机
BGP协议状态机:
Idle:空闲状态
- BGP建邻之前的初始状态,类似于OSPF中的Down状态,idle状态下的BGP协议会进入一个检查状态,检查完成后进入下一个状态。
- 检查状态:检查需要建邻的路由器是否可达,是否具备TCP会话建立的条件。
为什么要进入检查状态?
- OSPF是以组播或广播的形式通信且OSPF是直连建邻,无需担心通信问题无需检查。
- BGP协议中不仅有直连建邻还有非直连建邻,如果是非直连建邻,则存在建邻目标·数据布可达的问题。
- BGP协议的确认机制是建立在TCP协议之上的,如果建邻目标无法通信,将导致无法进行TCP的三次握手,无法完成TCP的建立。
Connect状态:
- 该状态尝试建立TCP会话
- 建立成功进入送open报文进入OpenSent状态
- 建立失败进入Active状态
注:TCP是建立一个双向的会话,当R1与R2建立BGP邻居时,假设双方都进入Connect状态,R1会找R2.R2会找R1三次握手,由这将导致R1与R2之间建立两条双向的会话通道,导致资源浪费,因此BGP会保留后建立的会话通道,拆除先建立的会话通道
OpenSent状态:
- 在接收到对方的open报文之后,BGP将会检查open报文中的参数(AS号,版本号,认证码等)
- 如果收到的Open报文参数正确,则回复keep-live报文进行确认,并进入Opencomfirm状态
- 如果发现收到的Open报文有错误,那么BGP发送Notification报文给对等体,并转至Idle状态。
Opencomfirm状态
- BGP等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
Established状态
- 如果收到正确的Keepalive报文,那么BGP就认为对端处于正常运行状态,将保持BGP连接,此时双方通过update报文交换路由信息。
- 如果收到错误的Update或Keepalive报文,那么BGP发送Notification报文通知对端,并转至Idle状态。
- Route-refresh报文不会改变BGP状态。 如果收到Notification报文,那么BGP转至Idle状态。
- 如果收到TCP拆链通知,那么BGP断开连接,转至Idle状态。
Peer状态 | 用途 |
Idle | 开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源 |
Connect | 正在进行TCP连接,等待完成连接,认证都是在TCP建立期间完成 如果TCP建立失败则进入Active状态,反复尝试连接 |
Active | TCP连接没建立成功,反复尝试TCP连接 |
OpenSent | TCP连接已经建立成功,开始发送Open包,Open包携带参数协助对等体的建立 |
OpenConfirm | 参数,能力特性协商成功,自己发送keeplive包,等待对方的Keeplive包 |
Established | 收到对方的Keeplive包,双方能力特性经协商发现一致,开始使用Update通告路由信息 |
四.BGP工作过程
- 基于IGP实现IP可达
- 手工指定邻居关系,邻居之间通过单播进行通信,通过三次握手,建立TCP会话通道,之后,BGP的所有报文通过TCP会话通道传递。
- 通过open报文和keep-live报文进行邻居关系的建立,在邻居关系建立完成后,将会把邻居关系收集记录在邻居表中。
- 使用update更新报文携带路由信息传递个邻居,之后BGP会将收集到的路由信息记录在BGP表中
注: update报文包含:目标网络号,掩码以及路径属性
BGP不直接将路由信息刷新到路由表中的原因?
BGP不允许存在负载均衡,当出现多条到达目标网段的路由,BGP会将这些路由信息记录在BGP表中,然后选择最优的路由信息加载到路由表中
- 选择到达目标网段最优路径加载到本地的路由表中
- 收敛完成后,将使用keep-live报文进行周期保活---1/3hold time---默认60s
- 如果全过程中出现错误将使用notification报文进行告警
- 如果发生结构突变则将进行出发更新---直接发送update报文进行更新
五·.路由黑洞
通过下图来清晰了解一下什么是BGP协议的路由黑洞
R1需要将1.0.0.0/8这个网段信息发布到其它AS区域中,保证其它AS区域能够收到该网段信息
网段信息发布过程分为控制层面流量可达和数据流量层面可达
具体过程如下:
控制层面流量可达:一条路由信息可在每个AS区域之间正常传递
- R1通过EBGP对等体关系将网段信息发布给R3,R3收到该网段信息后通过IBGP对等体关系将网段信息通过R4/R5发送给R7,R7通过EBGP对等体关系发送给R2。
数据层面流量可达:数据可正常访问目标网段
- 当报文通过R2访问R1时,R2查看本地路由表发现下一跳是R7,R2将报文发送给R7,R7收到报文之后,查看路由表发现去往R1的路由信息中R3是下一跳,R7路由表中去往R3的路由信息中R4是下一跳,R7会将报文发送给R4,而R4查看本地路由表无法查询目标网段对应的到下一跳,报文将无从转发而被R4丢弃,产生有去无回的路由黑洞。
R4无法查询到下一跳的原因:
R4仅仅充当一个转发的角色,没有运行BGP协议,R4没有权限查看路由信息
解决办法:MPLS
MPLS
在BGP协议中存在路由黑洞,产生黑洞的原因这里不过多赘述,MPLS主要从以下方面解决黑洞:
-
MPLS将流量标记为标签,而不是IP地址,这意味着路由器可以根据标签进行路由,而不需要考虑IP地址的变化。因此,即使BGP路由表中的一些IP地址无法到达目标,其他标签仍然可以被正确转发。
案列分析:
拓扑描述:R1-R2:EBGP R2和R5:非直连建邻IBGP R5-R6:EBGP area 1:运行MPLS
黑洞原因:R1发送给6.6.6.0网段的报文来到R2后,R2查找路由表发现下一跳时R5,想要去往R5,需要通过R3转发,因此R2会将报文转发给R3,报文来到R3后,R3查找路由表并未发现6.6.6.6.0网段的路由信息,报文无从转发将被丢弃,到此黑洞产生。
- R2路由表以及FIB表:
根据R2 FIB表中 6.6.6.0网段的Tunnel隧道标记为0X0,意味着该网段未建立LSP链路,不运行MPLS,报文会转发给下一跳23.0.0.2(R3)产生黑洞。
解决办法:使报文访问通过非直连BGP对等体传递的网段信息时,优先进行标签交换。
让6.6.6.0网段的报文在R3上转发时优先进行标签交换,走LSP链路从而到达R5,将报文交给R5正常转发。(R5含有6.6.6.0网段的路由信息)
配置命令:
#配置如下命令使R2优先使用MPSL隧道转发
[r2]route recursive-lookup tunnel
#查看FIB表细节信息
[r2]dis fib verbose
#R2的BGP对等体也需要配置才能实现回包
[r5]route recursive-lookup tunnel
#使用 ping -a 命令指定发送报文的接口
<r1>ping -a 1.1.1.1 6.6.6.6
六.BGP防环机制:
- As_PATH:AS路径属性。是路由经过的AS的序列,即列出此路由在传递过程中经过了哪些AS。它可以防止路由循环,并用于路由的过滤和选择。
EBGP水平分割:
- BGP协议将路由条目所进过的AS编号记录AS path 中 ,之后接受到的路由条目属性中如果存在本地的AS号,则将拒绝接受,避免环路的出现
IBGP水平分割:
AS-BY-AS原则中,BGP始终将一个AS看作一个整体,默认情况下,一个·AS内部路由属性相同
上图中,R1将10.1.1.0网段通过EBGP协议通告给 R2 ,R2收到该网段信息后会通告给IBGP对等体R3 ,R3通告给R4 ,R4又会通告给 R2 至此环路出现
IBGP水平分割:当路由器从一个IBGP学来一条BGP路由时将不能传递给其它IBGP对等体
IBGP水平分割缺点:
这种机制导致学来的路由在 IBGP对等体内部只能传递一跳,会导致下图的所示通信障碍、
R4收到信息之后,由于水平分割的特点,将无法发送给R5
解决办法:路由反射器/联邦
路由反射器
路由反射器简介:
路由反射器:Router Refliector 简称 RR 为了解决IBGP水平分割的缺点,可以指定AS区域内的一台设备配置为路由反射器,该路由可以将来自其它IBGP对等体发送的路由信息,反射给下一个IBGP对等体。路由反射器和OSPF中的DR设备原理类似。
路由反射器的规则:
- 必须指定至少一台对等体作为 RR 的客户,剩余的路由器称为非客户
- 客户和对等体之间将形成反射簇,使用RR 的RID作为簇ID
- 客户之间+客户与非客户之间不建立邻居关系,客户与非客户仅与RR建立邻居关系。
- 所有客户发来的路由信息,将通过RR反射给 RR 的客户和非客户
- 非客户发来的路由将反射给所有的客户
- 只有可用且优的路由才会被反射
路由反射器解决了水平分割的缺点,同时也打破了水平分割的机制,导致再次存在出现环路的可能,为了防止环路,路由反射器设计了两个属性:
Originator ID(起源者ID)
- 起源者ID为反射该条路由信息的始发者ID,转发过程中不改变
- 当路由器收到的路由信息中的起源者ID和 自身 RID相同,将拒绝学习该路由,以此达到防环目的
环路产生原因:
R1/R2为R3的客户,R1的路由信息发送给R3后,R3将接收的路由信息发送给客户R2,而此时R2同样为RR,同样会将R3收到的路由信息发送给R1,此时产生环路。
解决办法
当R3收到一条路由来自R1的路由信息之后,将给这条路由信息添加起源者ID,当R3反射给R2,R2再次反射给R1时,R1发现该条路由信息中的起源者ID和自身的RID相同,将拒绝学习
Cluster_list(簇列表)、
上图中,R4发送的路由信息经过层层转发和反射来到R2,R2同样会将该路由信息反射给R1,此时该条路由信息的起源者ID为4.4.4.4 和R1的RID不同,R1将不会拒绝学习该条路由信息,但是R1原本就含有该条路由信息,此时环路出现
Cluster_list(簇列表)则能够有效解决上述问题
#指定R3为路由反射器并指定R2为客户
[R3]bgp 2
[R3-bgp]peer 2.2.2.2 reflect-client
- BGP反射簇:是一种BGP网络拓扑结构,它将BGP路由反射器(Route Reflector)组成一个集群(Cluster),并使用集群ID标识,以便于管理和配置
- 当反射路由离开一个反射簇时,将把该反射簇ID记录在簇列表中,将不学习该路由防止回传
上图中,反射器在反射该条路由信息的同时将上一个路由器的RID作为反射簇添加到路由信息中,R1收到之后,发现簇ID和自身RID相同,将拒绝接收该路由信息
配置命令:
联邦
IBGP水平分割机制:当该路由信息是从另一台IBGP路由器学习的,将无法发给该AS区域中的另一台IBGP路由
联邦原理将一个大的AS区域中创建多个小AS,那么这些路由器之间将运行EBGP协议,将不受IBGP水平分割机制的影响小的AS之间将形成联邦对等体关系,这种关系遵循EBGP对等体的传输特性,但是遵守IBGP中AS-BY-AS的规则
联邦路由器的AS_path通常用一系列的AS号码来表示。AS表示自治系统,即一组网络和路由器,它们受同一个管理机构控制,并使用统一的协议来进行路由选择。在AS_path中,AS号码按照数据包通过路由路径的顺序排列。例如,一个AS_path可能表示为:AS100 AS200 AS300。这意味着数据包经过了自治系统100、200和300,从而到达目的地。
联邦配置命令:
- 联邦设备 使用小AS号启动进程
[r2]bgp 64512
- 配置RID
[r2-bgp]router-id 2.2.2.2
- 声明64512在大区域AS 2中
[r2-bgp]confederation id 2
- 建立邻居关系
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
- 在需要建立联邦的EBGP对等体设备上声明对端联邦AS号
[r3-bgp]confederation peer-as 64513
- 联邦对等体之间遵循EBGP传递原则,TTL值将被设置为1 需要修改TTL值
[r3-bgp]peer 3.3.3.3 ebgp-max-hop
七.BGP基本配置:
建邻基本配置
- 启动BGP进程
[r1]bgp 1 #1代表AS号
- 配置Router-ID
[r1-bgp]router-id 1.1.1.1
- EBGP对等体关系建立邻居
[r1-bgp]peer 12.0.0.2 as-number 2
#建邻是双向的,R2同样需要建邻配置
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 12.0.0.1 as-number 1
#EBGP对等体之间需要将TTL值修改为1
[r4-bgp]peer 5.5.5.5 ebgp-max-hop #需要双方都进行修改
- 查看邻居表
[r1]display bgp peer
V | BGP使用的版本号 |
MsgRcvd/MsgSent | 路由器 收到/发送 的数据包数量 |
OutQ | 出栈队列排名号 |
UP/Down | 邻居关系建立消耗的时间 |
PrefRcv | 从该邻居收到的路由条目数量 |
- IBGP对等体关系建立邻居
#为了减少路由新量,减轻路由器负载量
#IBGP对等体一般采用非直连建邻再搭配MPLS防止路由黑洞
[r2-bgp]peer 4.4.4.4 as-number 2
[r2-bgp]peer 4.4.4.4 as-number 2
#为了方便辨认是娜两个路由器之间建立对等体,使用环回接口建邻更直观
[r2-bgp]peer 4.4.4.4 connect-interface loopback 0
[r4-bgp]peer 2.2.2.2 connect-interface loopback 0
#非直连建邻时需要将下一跳改为本地环回接口
#由于上述建邻时将交互接口改为了环回接口,因此邻居表中下一跳显示为邻居的环回接口
[r2-bgp]peer 4.4.4.4 next-hop-local
[r4-bgp]peer 2.2.2.2 next-hop-local
BGP的路由发布
BGP路由发布的方法如下几种方法:
通过network命令发布:
在OSPF中,network命令不仅可以激活接口还可以在接口激活的同时发布路由
该命令在BGP协议中同样可以用于发布路由。
- 使用network命令将路由表中的网段信息发布
[r1-bgp]network 1.1.1.0 24 #将1.1.1.0/24网段信息发布
- 查看BGP路由信息表
[r1]display bgp routing-table
Network | 目标网段和掩码信息 |
NetHop:下一跳 | 发送网段信息的路由器 |
0.0.0.0 | 代表路由器本身是始发 路由器 |
Status codes | 状态码 |
Ogn | 起源码 |
Status codes:状态码
*: 如果下一跳可达,该条路由信息被赋予可达的标识:*
>:优选标识:如果到达同一个目标网段将通属性选择其中最优的赋予优选标记,只有可用且优的路由条目才可以传递给其它的BGP对等体,才可以加到路由表中
i:代表BGP路由是从IBGP对等体发送的
上图可知:BGP中存在AS-BY-AS规则,该规则下IBGP对等体在传递路由时,属性不发生变化,导致下一跳不可达,因此R3收到R2 的路由条目不可用
通过重发布批量发布路由
#该命令无需一条条发布路由,可以按照路由类型发布
[r2-bgp]imporrt-route ospf 1
Ogn:起源码:
i:通过network发布的路由条目,代表该路由起源于IGP协议(包括静态和直连路由)
?:除了i情况发布的路由,其它情况都使用该标识
BGP路由聚合
[r1-bgp]aggregate+(需要聚合的IP地址) 172.16.0.0/22
手工汇总也将生成一条指向汇总的空接口
缺点:
明细没有被抑制,不仅无法减少路由条目数量,反而增加了一条聚合路由
聚合路由不携带明细路由的AS-Path属性将导致路由可能被回传造成路由环路
手工聚合完善:
[r4-bgp]aggregate 172.168.0.0/22 detail-suppressed #在聚合路由的同时抑制明细
八.BGP选路原则
拓扑图
前提:排除所有不可用的路由条目
按照原则序号依次筛选
原则 1
优选preVal值最大的信息:
preVal值(权重属性):
- 路由信息中previal值越大越优
- 华为设备的私有属性
- 仅在本地设备上生效(R1设备上修改的preVal值仅在R1上生效,路由条目到达其它设备后,preVal值仍为默认值)
#修改来自RID为3.3.3.3设备的所有路由条目信息PreVal值为100
[r4]bgp 2
[r4-bgp]peer 3.3.3.3 preferred-value 100
上述配置缺点:
R4上所有来自R3的路由条目信息的PreVal值都被修改为较大值,R4优选PreVal值最大的路由,R4会将所有需要转发的数据全部转发给R3,导致R3压力增大。
负载分担:使不同的流量走不同的路线,分担单一路线的压力
#将10.0.0.0网段路由信息PreVal值单独改大
#使用前缀列表抓取流量
[r4]ip ip-prefix permit 10.0.0.0 24
#创建路由策略
[r4]route-policy 1(策略名) permit node 10
[r4-route-policy]if-match ip-prefix 1
#修改PreVal值
[r4-route-policy]apply preferred-value 100
#放通其余流量
[r4]route-policy 1 permit node 20 #node 20代表空表即放通所有
#调用路由策略
[r4-bgp]peer 3.3.3.3 route-policy 1 import #import 入方向影响自己,export出方向影响他人
#具体查看路由策略博客
原则 2
优选本地优先级(local pref)最高的路由器
local pref:本地优先级
- AS内部最常用的属性,仅可在IBGP对等体之间传递
- 默认值 100
#负载分担
#抓取流量
[r3]ip ip-prefix 2 permit node 10
[r3-route-policy]if-match ip-prefix 2
[r3-route-policy]apply local-preference 200
[r3]route-policy 2 permit node 20
原则 3
到达某网段有两条路由时,优选下一跳是0.0.0.0的路由,次选从对等体学习的路由。
本地始发的路由中:优先手动聚合>自动聚合>network>import (重发布)
#在R2上创建环回接口并在OSPF宣告
[r2]interface loopback 0
[r2]ip address 11.0.0.1 24
[r2-ospf-1-area-0.0.0.0]network 11.0.0.0 0.0.0.255
#R4通过OSPF获得11.0.0.0 网段信息后并发布到BGP中
[r4-bgp]network 11.0.0.0 24
#完成上述操作后,R2将通过R4再次学到由R2发布给R4的路由信息
#R2将优选自己作为下一跳的路由信息,即优选由本地发出的路由信息
原则 4
优选AS(as—path)最短的路由
#AS_Path 携带的AS号 因此只能在EBGP对等体上配置命令
#抓取流量
[r1]ip ip-prefix 1 permit 10.0.0.0 24
#路由策略
[r1]route-policy 1 permit node 10
[r1-route-policy]if-match ip ip-prefix 1
#执行修改AS_Path的动作
#使得AS_path多增加一个AS 11 22 33(可继续添加可添加同样的AS号)
#添加重复的AS号例如 1 1 1 1 即可增加AS_Path长度又可防环
[r1-route-policy]apply as-path 11 22 33 additive # additive代表添加 overwrite代表覆盖
#放通所有
[r1]route-policy 1 permit node 20
#调用路由策略
[r1-bgp]peer 12.0.0.2 route-policy 1 export(出方向)
原则 5
优先OGN属性 I > E >?
[r1]rpute-policy OGN permit 10.0.0.0 24
[r1]route-policy OGN permit node 10
[r1-route-policy]if-match ip-prefix OGN
#将OGN改为?
[r1-route-policy]apply origin ?
#放通所有
#调用
[r1-bgp]peer 12.0.0.2 route-policy OGN export
原则 6
MED,越小越好,控制进入本as流量
- BGP中的MED值用于告诉其他自治系统(AS)通过哪条路径离开本 AS 是最好的选择。MED值的数值越小,表示经过该路径离开本 AS 的成本越低,这样其他 AS 就更可能通过该路径来访问本 AS。
- 默认继承IGP协议开销值。
- 同一个AS内部,IBGP对等体不会将MED值传递给EBGP对等体(边界路由器),此时EBGP对等体默认MED值为0,为了防止邻居AS选择MED默认值为0的对等体,造成选路不佳的问题,需要所有边界设备都发布路由。
[r2]ip ip-prefix MED permit 4.4.4.0 24
[r2]route-policy MED permit node 10
[r2-route-policy]if-match ip-prefix MED
#修改MED值
[R2-route-policy]apply cost 10
#放通所有
[r2-bgp]peer 12.0.0.1 route-policy MED export
#记录ping包经过的路径
[r2]ping -r -a 4.4.4.4 1.1.1.1
原则 7:EBGP优于IBGP路由(联邦EBGP当做IBGP处理)
原则 8:优先最近下一跳(下一跳在路由表中对应的路由条目的比较开销值,无关RIP/OSPF)
原则 9:优先簇列表最短路由
原则 10:优选Router ID最短的设备所通告的路由
注意:如果使用起源者的router id比较必须对方也是也包含起源者属性,起源者属性的router id与正常router id比较,优先选择 正常的router id
原则 11:优选有最小IP地址的对等体所通告的路由
九.BGP过滤
要求:R1发送给R2的路由信息中不包含1.1.1.0网段
1.通过Router-Policy 过滤
#抓取流量
[r1]ip ip-prefix aa permit 1.1.1.0 24
#做策略
[r1]route-policy aa deny node 10
[r1-route0policy]if-match ip-perfix aa
[r1]route-policy aa permit node 20
#调用策略
[r1]bgp 1
[r1-bgp]peer 12.0.0.2 route-policy aa export
2.过滤列表进行过滤
#过滤列表需要借用低阶列表过滤
[r2]acl 2000
[r2-acl-basic-2000]rule deny source 10.0.0.0 0
[r2-acl-basic-2000]rule permit source any
#允许所有
[r2]ip ip-perfix aa permit 0.0.0.0 0 less-equal 32
#调用过滤列表---在BGP建邻时只能调用ACL列表进行过滤
[r2]bgp 2
[r2-bgp]peer 12.0.0.1 filter-policy acl 2000 import
3.前缀列表过滤
[r3]ip ip-perfix aa deny 10.0.0.0 24
[r3]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32
[r3]bgp 2
[r3-bgp]peer 12.0.0.1 ip-perfix aa import