BGP边界网关路由协议基础知识

279 阅读14分钟

前言

边界网关协议(BGP)是运行于 TCP上的一种自治系统的路由协议. BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓扑图并由此清除了路由环路,同时在 AS 级别上可实施策略决策。

AS Autonomous System 自治系统

  • 在Internet中,AS是指在一个实体管辖下的拥有相同选路策略的IP网络

AS号范围

AS号类别2字节AS号4字节AS号
公有AS号1-645111-64511,65536-4294967295
私有AS号64512-6553564512-65535
  • 中国电信163(4134) 中国CN2(4809) 中国网通(9929)
  • AS同时在BGP中关键性的作用:最佳路由的选举,避免环路,路由过滤

图片.png

BGP版本

  • IPV4网络使用的版本是BGP-4(RFC4271) 其他网络(IPV6,组播等)使用版本是MP-BGP(RFC4760)
  • MP-BGP是对BGP-4进行了扩展,来达到不同网络中应用的目的,原有消息机制和路由机制没有改变
  • MP-BGP在IPV6单播网络上的应用称为BGP4+,在IPV4组播网络上的应用称为MBPG(Multicast BGP)

BGP特点

  • 1️⃣ 采用认证GTSM的方式,保证了网络的安全性
  • 2️⃣ 提供了丰富的路由属性,能够进行灵活的路由选路
  • 3️⃣ 提供了路由聚合和路由衰减功能用于防止路由震荡,有效提高了网络的稳定性
  • 4️⃣ 使用TCP(端口号=179),并支持与BFD联动,BGP Tracking和BGP GR和NSR,提高了网络的可靠性
  • 5️⃣ 在邻居数目多,路由量大且大部分邻居具有相同出口策略的场景下,使用按组打包技术极大的提高了打包发包性能.
  • 6️⃣ 仅增量式,触发式更新

使用BGP的三大理由

  • 1️⃣ 大量路由需要承载,IGP只能容纳千条,而BGP可以容纳上万
  • 2️⃣ 支撑MPLS/VPN的应用,传递客户VPN路由
  • 3️⃣ 策略能力强,可以很好的实现路由决策与数据控制

BGP角色

角色备注
Speaker发送BGP报文的设备称为BGP的发言者(Speaker)
Peer相互交换BGP报文的Speaker之间互称对等体(Peer)
  • 邻居关系建立在TCP连接基础上,因此邻居不一定需要直连,可以通过IGP或者静态路由来提供TCP连接的可达性 [IGP建立连接的ttl为1 必须直连]
  • 邻居必须手动指定,而非自动建立
  • 一台BGP路由器只能运行在一个AS内

邻居类型*

类型备注
IBGPInternal/Interior BGP , 内部BGP邻居,位于相同AS
EBGPExternal/Exterior BGP , 外部BGP邻居,位于不同AS

图片.png

邻居配置命令*

bgp 123                          // 声明所在AS号 (创建进程) 
 router-id 1.1.1.1               // 配置RID 必须唯一
 peer 12.0.0.2 as-number 123     // 配置邻居IP地址和所在AS号

display bgp peer                 // 显示BGP邻居状态

router id                        // 如果在进程外routerid 那么是全局的 会被所有路由协议所继承 如果在进程内打 那么进程内优先
bgp 123
 peer 12.0.0.2 as-number 123
 peer 3.3.3.3 as-number 321
 peer 3.3.3.3 connect-interface LoopBack 0      // 使用环回口建立邻居
 address-family ipv4
  peer 3.3.3.3 enable                           // 收到启用邻居
  peer 12.0.0.2 enable

图片.png

邻居建立抓包以及分析

如果只存在arp报文 无tcp则可以检查一下 对端ip是否配置 图片.png

监听12.1.1.2所有端口号的TCP连接 本地发送了179的端口号 监听对端接口号是48960 图片.png

报文分析 TCP三次握手 图片.png

如果使用环回口建立邻居 但是没有指定本端源地址接口类型为环回口 那么路由器将采用物理地址源地址,但是12.1.1.2不在对端路由器邻居列表中(监听TCP),导致TCP一致重置 导致TCP建立失败* 图片.png

使用环回口地址后邻居建立成功 图片.png

对于EBGP环回口建立邻居失败的问题: EBGP默认TTL值为1,如果采用环回口建立邻居,数据包到路由器后查询环回地址路由时,TTL会减1,导致路由不可达.导致TCP邻居建立失败

peer 3.3.3.3 ebgp-max-hop   // 默认1 可以指定 EBGP环回口建立邻居解决办法:修改TTL最大跳数

邻居建立信息

网络拓扑如下 图片.png

邻居建立成功与初始状态 图片.png

邻居简要信息 图片.png

邻居默认老化时间以及Hello时间* 图片.png

BGP建立邻居条件*

  • 邻居地址可达(有路由)
  • 本地配置中的邻居所在AS号=邻居配置中的声明所在AS号
  • 报文源IP=对方配置的邻居IP(这个源IP也叫更新源,也将作为路由的下一跳)

BGP邻居建立优化*

为了增加稳定性,通常建立使用环回口建立邻居

  • 更新源:建立邻居和邻居所学习到的路由的下一跳
  • 多跳:EBGP邻居建立默认需要直连,因为TTL=1,如果非直连,必须修改TTL
peer 2.2.2.2 connect-interface lo1        // 更新源地址
peer 2.2.2.2 ebgp-max-hop [2]             // 配置TTL,默认=1

BGP身份认证*

peer 2.2.2.2 password simple 123          // 配置身份验证,MD5形式

TCP的Option字段的MD5加密 图片.png

BGP报文结构和类型[所有报文都是单播]

图片.png

邻居间会比对RID与AS号 图片.png

类型备注
Open类似Hello,建立邻居关系
keeplive类似Hello,维护邻居关系,默认周期=60s
Update路由更新,包含丰富的路由属性
Notification当检测到错误,发送后关闭BGP连接
Route-refresh当路由策略发生变化时,触发请求邻居重新通告路由

open报文

图片.png

keeplive报文

图片.png

Route-refresh报文

refresh bgp 1.1.1.1 export    // 请求指定bgp邻居发出通告路由 [出策略时] network引入bgp后发出 为出策略 入策略为import

BGP状态

类型备注
Idle初始,路由器查询路由表,是否有到达邻居的路由
Connect发起TCP连接,等待TCP连接完成
ActiveTCP连接失败,继续尝试TCP连接
Open SentTCP连接成功 发送Open包
Open Confirm已收到对方正确的Open包,如果没收到 进入Active
Established邻居建立完成 开始传递路由

图片.png

图片.png

重连计时器3分钟超时

BGP数据库

图片.png

BGP路由信息处理过程

图片.png

BGP路由宣告原则: BGP协议本身不发现路由*

  • 只有明确宣告的路由才会发布给邻居
  • 宣告的路由必须能精确的在路由表中找到
  • 多条路径时,只选最优的给自己使用和发布给邻居
  • 从IBGP学习到的路由发布给EBGP
  • 从IBGP学习到的路由不会发给IBGP
  • 从EBGP学习到的路由发布给所有的EBGP和IBGP

IBGP学习到的路由不会发给IBGP 解决办法:1.BGP全互联,RR反射器 图片.png

路由宣告*

图片.png

图片.png

network优先级大于import network引入优先级与import引入优先级相同

图片.png

network方式 [i]

图片.png

import方法 [?]

图片.png

BGP下一跳*

  • BGP在给邻居传递路由时的下一跳=更新源 [建立邻居使用物理口那么更新源为物理口 环回口就是环回口]
  • 在EBGP间传递时会修改下一跳为自己的更新源
  • 在IBGP间传递时不会修改下一跳为自己的更新源
peer 2.2.2.2 next-hop-local //修改下一跳更新源为自己 对IBGP生效
修改BGP下一跳配置实验

图片.png

使用环回口建立的EBGP R2传递R3的路由给R1时,不会修改路由下一跳 图片.png

# R2配置
bgp 100
 address-family ipv4
 peer 1.1.1.1 next-hop-local
配置验证

图片.png

图片.png

BGP防环机制*

场景防环机制
AS内-IBGP水平分割
AS间-EBGPAS_Path
  • 水平分割:从IBGP收到的路由不会发布给IBGP邻居,即IBGP路由只传一跳

解决RTD接收不到路由的问题

图片.png

  • IBGP邻居全互联: 配置,维护开销会很大
  • RR反射器(Route-Reflector)
  • 联盟/联邦(Confederation)

AS_Path

BGP路由内的重要属性,代表该路由所经过的AS号,如果接收路由器发现所包含的AS号与本地AS号一致,则丢弃

图片.png

BGP路由聚合*

BGP静态聚合

通过配置静态路由汇总明细路由,再用network进行宣告

图片.png

BGP自动聚合[缺陷]

  • 对引入的IGP路由进行主类掩码聚合 /8 /16 /24
  • 而原引入的路由被抑制,不会被优选和发布给BGP邻居
summary automatic             // 开启自动聚合,缺省关闭

BGP手动聚合

  • 引入和本地路由进行聚合
  • 手动聚合>自动聚合
aggregate 172.16.0.0 255.255.252.0  // 缺省聚合和明细同时发布

// detail-suppressed    抑制发布明细路由
// as-set               保留原有明细路由的AS-PATH属性

图片.png

BGP手动聚合配置实验

# 路由通告者
ip route-static 172.16.0.0 24 NULL0
ip route-static 172.16.1.0 24 NULL0
ip route-static 172.16.2.0 24 NULL0

ip prefix-list ip index 10 permit 172.16.1.0 24
ip prefix-list ip index 20 permit 172.16.2.0 24

route-policy 1 permit node 10
 if-match ip address prefix-list ip

bgp 100
 address-family ipv4 unicast
  network 172.16.0.0 24
  network 172.16.1.0 24
  network 172.16.2.0 24
  aggregate 172.16.0.0 255.255.0.0 suppress-policy 1

s代表被抑制的路由条目 图片.png

邻居路由表 图片.png

BGP路由属性*

图片.png

属性分类备注
公认必遵所有BGP设备都可以识别且必须存在于Update报文中
公认认意所有BGP设备都可以识别但不要求必须存在于Update报文中
可选过渡BGP设备可以不识别如果不识别仍然可以传递给邻居
可选非过渡 BGP设备可以不识别如果无法识别丢弃该属性

图片.png

PrefVal 优选值 [路由接收者修改本地路由优先级]

  • 私有属性,代表本地路由的优先级
  • 仅本地有效,不会传播给任何BGP邻居
  • 越大越优先 默认0 范围0-65535
  • 影响自己

图片.png

route-policy bgp_policy permit node 10
 apply preferred-value 100     // 修改匹配路由条目的本地优先级 Specify a preferred value for BGP routes

Origin起源 BGP路由生成方式

代码备注
i=IGP通过network宣告的路由
e=EGP通过EGP学习到的路由
?=incomplete通过import引入的路由
优先级 i>e>?

AS_PATH AS路径,BGP路由在传输的路径中所经历的AS列表

  • EBGP传递更新(加入本地AS号码)
  • 丢弃AS_PATH属性中包含本AS Number的路由(防止AS间环路)
  • AS数量越少越优先

图片.png

Next Hop下一跳=更新源

图片.png

Local-Prefernce 本地优先级[传递路由者修改优先级]

  • 只传播给IBGP邻居(AS内)
  • 越大越优先 默认100
  • 影响AS内部IBGP邻居的路由决策(出站路由-怎么离开AS)

图片.png

MED Multi-Exit-DISC 相当于IGP的度量值

  • 区别到达同一邻居AS的多条入口链路
  • 越小越优先
  • 仅在相邻两个AS之间传递,不会跨AS传递
  • 影响AS外部EBGP邻居的路由决策(入站路由-进入AS)

图片.png

route-policy bgp_policy permit node 10
 apply cost 100               // 设置IGP度量值
  • ⚠️ 缺省情况下,不允许比较来自不同AS邻居的路由信息的MED值,除非能够确认不同的AS采用了同样的IGP和路由选择方式,则可以使用以下命令
compare-different-as-med     // 比较不同AS邻居的MED值

图片.png

属性总结

图片.png

BGP选路原则*

BGP不像IGP,本身并没有路由算法,而是结合丰富的属性进行选路

  • BGP路由选择有三种情况

    • ✅ 该路由是到达目的地的唯一路由,直接优选
    • ✅ 对到达同一目的地的多条路由,优选优先级最高的
    • ✅ 对到达同一目的地且具有相同优先级的多条路由,使用更细的原则比较
  • BGP路由优选规则

    • 1️⃣ 丢弃下一跳不可达到达路由
    • 2️⃣ 优选Preference_Value最高的路由(私有属性,仅本地有效)*
    • 3️⃣ 优选Local_Preference最高的路由*
    • 4️⃣ 优选手动聚合>自动聚合>network>import>从对等体学习到的
    • 5️⃣ 优选AS_PATH最短的路由*
    • 6️⃣ 起源类型IGP>EGP>Incomplete
    • 7️⃣ 对于来自同一AS的路由 优选MED最小的*
    • 8️⃣ 优选从EBGP学来的路由 (EBGP>IBGP)   【能走外边优先走外边】
    • 9️⃣ 优选AS内部IGP的Metir最小的路由   【选择内部开销最小的路由】
    • 🔟 优选Cluster_List最短的路由   【路由反射器】
    • 🔟1️⃣ 优选Orginator_ID最小的路由   【路由反射器】
    • 🔟2️⃣ 优选Router_ID最小的路由器发布的路由
    • 🔟3️⃣ 优选IP地址最小的邻居学来的路由

    ⚠️ 如果比较到第九条全部相同,则为等价路由,可以负载分担(默认关闭,且AS_PATH必须一致)

  • P L L A O M N I

    • P PrefVal本地优先级
    • L Local_Pre本地优先级
    • L Local Route本端路由
    • A AS_path AS_path最短路径
    • O Origin 起源类型 IGP>EGP>incomplete
    • M MED
    • N Neighbor Type
    • I IGP

负载分担相关命令

    maximum load-balancing <1-8>    // 配置最多支持的负载数量
    address-family ipv4
     balance <1-32>            // 配置最多支持负载数量

路由属性修改默认值

命令备注
peer 2.2.2.2 preferred-value 100配置从邻居接口路由的优选值,默认0
default local-preference 200配置本地优先级,默认100
default med 100配置MED,默认0,仅对import和聚合生效

BGP负载分担配置实验

图片.png

R1-R2取消ospf cost50配置 然后开启BGP负载分担功能 然后R1-R4链路 R2/R3负载分担

# R1-BGP配置
bgp 123
 peer 2.2.2.2 as-number 123
 peer 2.2.2.2 connect-interface LoopBack0
 peer 3.3.3.3 as-number 123
 peer 3.3.3.3 connect-interface LoopBack0
 peer 15.0.0.5 as-number 5
 #
 address-family ipv4 unicast
  balance 2
  peer 2.2.2.2 enable
  peer 2.2.2.2 next-hop-local
  peer 3.3.3.3 enable
  peer 3.3.3.3 next-hop-local
  peer 15.0.0.5 enable
#

配置验证

图片.png

BGP路由过滤

相关命令

# 对宣告或接收的路由过滤
filter-policy 2000 export/import
peer 2.2.2.2 filter-policy 2000 export/import
peer 2.2.2.2 as-path-filter 2001 export/import
peer 2.2.2.2 ip-prefix ip_address export/import
peer 2.2.2.2 route-policy 3000 export/import

# 如果同时配置,根据表格顺序进行过滤

AS-path-filter AS过滤器

  • 利用BGP路由携带的AS_path路径进行过滤
  • 使用正则表达式来定义匹配规则

相关命令

  • ip as-path-filter 1 permit 123$
  • ip as-path-filter 2 permit .*

图片.png

BGP团体属性 Community*

  • BGP私有属性,在BGP对等体之间传播,且不受AS的限制
  • 利用团体属性可以使多个AS中的一组BGP设备共享相同的策略
  • 简化路由策略的应用和降低维护管理的难度

公认团体属性*

属性名称备注
Internet向任何BGP邻居宣告
No_Advertise不向任何BGP邻居宣告
No_Export不向EBGP邻居宣告,但可以向联盟内EBGP邻居宣告
No_Export_Subconfed不会向任何EBGP邻居宣告

私有团体属性

  • 自定义规则和应用方法 例如AS:Number
  • 一条路由可以携带多个团体属性值

相关配置

peer 2.2.2.2 advertise-community      // 配置将团体属性发布给邻居 默认不发布
ip community-filter 1 deny internet   // 配置属性过滤器
ip community-filter 100 permit 100:1
router-policy rp permit node 10       // 配置路由策略
 if-match community-filter 1          // 匹配团体属性过滤器
 apply community no-advertise         // 修改团体属性
 
display bgp routing-table community   // 查看带有团体属性的路由

BGP复位操作

reset bgp all          // 复位bgp所有连接
reset bgp as-number    // 复位与指定as间的bgp连接
reset bgp x.x.x.x      // 复位与指定邻居的连接
reset bgp internal     // 复位所有IBGP连接
reset bgp external     // 复位所有EBGP连接
refresh bgp all        // 刷新bgp所有