BGP基础 - 教程
前言:
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议
BGP是为了取代最初的EGP设计的一种网关协议,不同于最初的EGP,BGP能够进行路由优选,避免路由环路,更高效率的传递路由和维护路由信息,主要解决大规模网络中的路由传播和路径选择问题
AS (Autonomous System,自治系统)
定义:
自治系统(AS)是一个由单一组织(如企业、ISP)管理的网络集合,该网络内部使用统一的路由策略和规则。AS通过唯一的 AS编号(ASN, Autonomous System Number) 标识,AS号分为2字节AS号和4字节AS号,其中2字节AS号的范围为1至65535,4字节AS号的范围为1至4294967295作用:
AS的主要目的是将互联网划分为多个管理域,每个AS可以独立控制内部路由策略,同时通过BGP协议与其他AS交换路由信息,实现跨网络的数据传输,是实现 AS 间路由协议 BGP 的关键前提
IGP传递路由:
IGP(内部网关协议)仅限于AS内部,用于同一自治系统(AS)内路由器之间的路由传递,路由生成基于拓扑(链路状态 OSPF)或跳数(距离矢量 RIP),路由传播会自动泛洪到整个AS内部BGP传递路由:
BGP(边界网关协议)专为跨AS路由设计,用于不同自治系统之间的路由传递,路由生成基于策略和路径属性,路由传播需要配置(手动)邻居,手动控制通告的路由
BGP
边界网关协议BGP(Border Gateway Protocol)是一种实现自治系统AS(Autonomous System)之间的路由可达,并选择最佳路由的距离矢量路由协议
特点:
BGP能够承载大量的路由信息,可以支持大规模网络
BGP提供了丰富的路由策略,每条路由都携带多种路由属性(Path attribute),能够灵活的进行路由选路,并能指导对等体按策略发布路由,具有丰富的可操作性
BGP提供了路由聚合和路由衰减功能用于防止路由振荡,有效提高了网络的稳定性
BGP使用TCP作为其传输层协议(端口号为179),路由器之间的BGP会话基于TCP连接而建立,使用触发式路由更信,而不是周期性路由更新
BGP能够支持MPLS/VPN的应用,传递客户VPN路由
BGP对等体
对等体(Peer):
指运行BGP协议并建立TCP连接(端口179)的两台路由器
建立BGP对等体关系的两台路由器并不是要求必须直连
BGP对等体之间相互交换BGP路由表
BGP的两种对等体关系的类型
- IBGP(Internal BGP):同一AS内的BGP路由器之间的对等体关系
- EBGP(External BGP):不同AS之间的BGP路由器之间的对等体关系,两台路由器之间要建立EBGP对等体关系必须满足两个条件:1 AS号不同 2 在配置EBGP时,peer命令所指定的对等体IP地址要求路由可达,并且TCP连接能正确建立
TCP连接源地址:
源地址是BGP路由器发起TCP连接时使用的IP地址,通常需要满足以下条件:
- 路由可达性:源地址必须与对端BGP路由器的地址在同一网络(或通过IGP/静态路由可达)
- IBGP对等体:推荐使用Loopback接口的IP地址作为源地址,因为Loopback接口永远不会down,即使物理链路故障也能保持BGP会话
- EBGP对等体:通常使用直连接口的IP地址作为源地址,如果使用Loopback接口建立EBGP对等体之间的关系,则需要注意EBGP多跳问题
EBGP 多跳和更新源地址:
EBGP 多跳问题 :
默认行为: EBGP 邻居默认要求直连。BGP协议规定,EBGP 会话的默认
TTL
值为 1。这意味着 BGP 报文只能传递一跳(即到达直连的对端设备)。如果下一跳不是直连的(比如中间隔着一个或多个路由器),TTL 在穿越第一台设备后就会减为 0,导致报文被丢弃何时需要: 当你尝试使用非直连接口(通常是环回口
Loopback
)来建立 EBGP 邻居关系时,或者物理上连接的 EBGP 邻居之间间隔了其他三层设备(如防火墙、路由器等,即使逻辑上配置了静态路由使其可达),就需要配置 EBGP 多跳后果: 如果不配置,即使路由可达,BGP 邻居状态也无法进入
Established
状态(通常是Active
或Connect
),因为 TCP 连接(端口 179)无法成功建立解决:配置
peer ebgp-max-hop
(允许非直连)命令,必须在两个对端路由器上做
更新源地址问题 :
默认行为: BGP 发送报文时,默认使用到达邻居最优路由的出接口的IP地址作为源IP 地址
何时需要:
默认情况下,路由器使用去往邻居地址的出接口的主IP地址作为建立 TCP 连接的源 IP 地址
如果使用环回接口地址作为邻居地址,路由器尝试建立 TCP 连接时,其源 IP 地址通常会是某个物理接口的 IP 地址(指向邻居路径的出接口 IP),而不是配置的环回接口 IP 地址
对端路由器配置的邻居 IP 地址是你的环回接口 IP 地址,但它收到的 TCP SYN 包的源 IP 却是一个物理接口 IP 地址。源 IP 与配置的邻居 IP 不匹配,导致对端拒绝建立连接
后果: 对端路由器发现收到的 BGP 报文的源 IP (G0/0/0) 与它配置的邻居 IP (你的环回口地址) 不匹配。出于安全考虑,BGP 会拒绝建立连接。邻居状态同样无法达到
Established
解决:
配置peer connect-interface
(指定更新源),必须在两个对端路由器上做
BGP对等体表:
上述主要参数的涵义 | |
peer | 对等体地址 |
V | 对等体版本号 |
AS | 对等体AS号 |
Up/Down | 该对等体已经存在Up/Down的时间 |
State | 对等体的状态 |
PrefPcv | 从该对等体收到的路由前缀数目 |
BGP路由的生成:
不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递到BGP对等体
BGP获取路由的方式共有三种:
Network 命令注入:
这是最常用、最推荐的方式,用于将本地路由器路由表中已经存在的、稳定的路由注入到 BGP 进程中
来源: 这些路由通常由 IGP(如 OSPF、IS-IS、RIP)或静态路由学习到,并存在于设备的 IP 路由表中
配置:
宣告网段(需与路由表中的网段完全一致) [Huawei-bgp-af-ipv4] network network> mask> 实例: [R1] bgp 65000 [R1-bgp] ipv4-family unicast [R1-bgp-af-ipv4] network 192.168.1.0 255.255.255.0
注意:如果路由表中不存在该精确路由,
network
命令不会生效,BGP 不会通告该网络
Import 引入:
这种方式是将整个路由表或通过路由策略筛选的特定路由从其他路由协议(如 OSPF、IS-IS、静态路由、直连路由)或另一个 BGP 实例引入到当前的 BGP 进程中
来源: 其他路由协议学习到的路由或配置的静态/直连路由
配置:
引入其他协议的路由(如OSPF、静态路由) [Huawei-bgp-af-ipv4] import-route protocol> [cost cost-value>] [tag tag-value>] 实例: [R1] bgp 65000 [R1-bgp] ipv4-family unicast [R1-bgp-af-ipv4] import-route ospf 1 # 引入OSPF进程1的路由
注意:
引入的路由不一定需要在 IP 路由表中是最优或活跃的(取决于具体协议和配置),只要该路由协议有这条路由,BGP 就可能引入它
被引入路由的 Origin 属性会被标记为
incomplete
(?
)
路由聚合:
这不是生成新路由的源头,而是对已经存在于 BGP 表中的、更具体的路由进行汇总,生成并通告一条聚合路由
来源: BGP 表中的具体路由(这些路由本身是通过
network
或import
获得的)配置:
生成聚合路由(可选参数:detail-suppressed、as-set等) [Huawei-bgp-af-ipv4] aggregate network> mask> [detail-suppressed] [as-set] 实例: [R1] bgp 65000 [R1-bgp] ipv4-family unicast [R1-bgp-af-ipv4] aggregate 192.168.0.0 16 as-set as-set:在聚合路由中保留所有明细路由的AS路径信息(防止环路)
注意:
只有在 BGP 表中存在至少一条属于该聚合地址范围内的具体路由时候,聚合才会生效
默认情况下,通告聚合路由的同时,仍然会通告所有具体路由
聚合路由的 Origin 属性默认为 IGP (
i
)
BGP基础配置:
[Router1] bgp 65001 启动 BGP 进程,AS 号为 65001
[Router1-bgp] router-id 1.1.1.1 设置 BGP Router-ID(通常用环回口地址)
配置直连 EBGP 邻居(不同 AS)
[Router1-bgp] peer 10.1.1.2 as-number 65002 指定邻居 IP 和对方 AS 号
[Router1-bgp] ipv4-family unicast 进入 IPv4 单播地址族视图
[Router1-bgp-af-ipv4] peer 10.1.1.2 enable 激活 IPv4 邻居
[Router1-bgp] peer 2.2.2.2 ebgp-max-hop 2 允许最大跳数(默认直连为1跳)
[Router1-bgp] peer 2.2.2.2 connect-interface LoopBack 0 指定源接口
配置 IBGP 邻居(相同 AS)
[Router1-bgp] peer 2.2.2.2 as-number 65001 邻居为同 AS 设备
[Router1-bgp] peer 2.2.2.2 connect-interface LoopBack 0 强制使用环回口建邻
[Router1-bgp-af-ipv4] peer 2.2.2.2 next-hop-local 关键!通告路由时下一跳改为自身
[Router1-bgp-af-ipv4] peer 2.2.2.2 enable
在当前地址族(IPv4 单播)下激活与邻居 2.2.2.2 的路由交换能力
peer 2.2.2.2 as-number 65001(BGP 视图仅建立 TCP 连接(BGP邻居状态可达Established)
peer 2.2.2.2 enable(地址族视图)才是开启路由传递的关键步骤
实例配置
[Huawei] bgp 65000
[Huawei-bgp] router-id 1.1.1.1
[Huawei-bgp] ipv4-family unicast
[Huawei-bgp-af-ipv4] peer 192.168.1.2 as-number 65001
[Huawei-bgp-af-ipv4] peer 192.168.1.2 ebgp-max-hop 2
[Huawei-bgp-af-ipv4] peer 192.168.2.2 connect-interface LoopBack0
[Huawei-bgp-af-ipv4] network 192.168.1.0 255.255.255.0
[Huawei-bgp-af-ipv4] import-route ospf 1
[Huawei-bgp-af-ipv4] peer 192.168.2.2 next-hop-local