云计算百科
云计算领域专业知识百科平台

FRR实现BGP详细版

边界网关协议(BGP)

目录

边界网关协议(BGP)

BGP 概述

BGP 基础概念与术语

BGP 协议操作

BGP 路径属性详解

BGP 路由策略

FRR实现BGP

BGP 故障排查


BGP 概述

  • 核心特性:
    • 路径矢量协议:携带完整的 AS 路径信息。
    • 基于策略的路由:强大的路由策略控制能力。
    • 使用 TCP 传输:可靠性保障(端口 179)。
    • 增量更新:高效的路由信息传播。
  • 主要功能: 实现 AS 间的互联互通和路由可达性。
  • 应用场景: 大型企业多出口、ISP 骨干网互联、互联网交换中心(IXP)、云服务提供商网络。

BGP 基础概念与术语

  • 自治系统(Autonomous System, AS):
    • 定义:一个在单一管理域下运行的网络集合。
    • AS 号(ASN):全球唯一的标识符(公共 ASN 和私有 ASN)。
  • BGP 对等体(Peers):
    • 定义:建立 BGP 会话的两台路由器。
    • 类型:
      • EBGP(External BGP):位于不同 AS 的对等体(通常直连或多跳)。
      • IBGP(Internal BGP):位于同一 AS 的对等体(通常非直连)。
  • BGP 路由(前缀): 需要通告的网络可达性信息(例如:192.0.2.0/24)。
  • BGP 属性(Attributes): 描述路由特性、用于路径选择和策略应用的关键参数集合(例如:AS_PATH, NEXT_HOP, LOCAL_PREF, MED, Community 等)。

BGP 协议操作

  • BGP 有限状态机(FSM): 描述会话建立和维护的各种状态(Idle, Connect, Active, OpenSent, OpenConfirm, Established)。
  • 建立 BGP 对等会话:
    • TCP 连接建立。
    • 交换 OPEN 消息:协商参数(BGP 版本、ASN、Hold Time、BGP Identifier 等)。
  • 路由信息交换:
    • UPDATE 消息:用于通告新路由、撤销旧路由或更新路由属性。
    • 路由通告规则(例如:IBGP 水平分割)。
  • 保持连接: KEEPALIVE 消息的作用。

BGP 路径属性详解

  • 公认必遵属性: 所有 BGP 实现必须识别且包含在 UPDATE 消息中。
    • ORIGIN:路由来源(IGP, EGP, Incomplete)。
    • AS_PATH:记录路由经过的 AS 序列。
    • NEXT_HOP:到达目的网络的下一跳 IP 地址。
  • 公认任意属性: 所有 BGP 实现都能识别,但可以选择性包含。
    • LOCAL_PREF(本地优先级):用于 IBGP 内部选路(值越高越优先)。
    • ATOMIC_AGGREGATE:表示路由被聚合且丢失了部分路径信息。
  • 可选传递属性: 接收方可以不识别,但会继续传递给其他对等体。
    • AGGREGATOR:标识执行路由聚合的路由器及其 AS。
    • Community:一个强大的标签机制,用于简化路由策略应用。
  • 可选非传递属性: 接收方可以不识别,且不会传递给其他对等体。
    • MULTI_EXIT_DISC(MED):用于向邻居 AS 建议首选入口点(值越低越优先)。
    • ORIGINATOR_ID:用于路由反射场景,防止环路。
    • CLUSTER_LIST:用于路由反射场景,防止环路。

BGP 路由策略

  • 策略的核心: 基于属性操纵来控制路由的接收、通告和优选。
  • 入口策略(Import Policy): 控制从对等体接收哪些路由以及如何修改其属性。
  • 出口策略(Export Policy): 控制向对等体通告哪些路由以及如何修改其属性。
  • 常用策略工具:
    • 访问控制列表(ACL)和前缀列表(Prefix-list):用于路由过滤。
    • 路由映射(Route-map):强大的策略工具,用于匹配路由并修改属性或执行动作(允许/拒绝)。
    • 团体属性(Community):标记路由,实现策略的模块化和简化。
    • 正则表达式:用于匹配复杂的 AS_PATH 模式。
  • 典型策略应用场景: 流量工程、多宿主环境负载分担/备份、联盟、路由反射器配置等。

FRR实现BGP

  • 配置BGP基本参数

sudo sh -c "echo \\"
configure terminal
hostname ${ROLE}
! 配置BGP路由器
router bgp ${LOCAL_AS}
bgp router-id ${LOOPBACK_IP}
no bgp ebgp-requires-policy
no bgp network import-check
end
exit
\\" | vtysh"

  • 配置eBGP邻居关系

for neighbor_info in "${NEIGHBORS[@]}"; do
read -r neighbor_ip neighbor_as <<< "$neighbor_info"
sudo sh -c "echo \\"
configure terminal
hostname ${ROLE}
router bgp ${LOCAL_AS}
neighbor ${neighbor_ip} remote-as ${neighbor_as}
! Keepalive定时器(保持连接定时器) 5s
! Holdtime定时器(保持时间定时器) 15s
neighbor ${neighbor_ip} timers 5 15
end
exit
\\" | vtysh"

done

  • 配置IPv4地址族和路由通告并激活每个邻居

# 配置地址族和路由映射
sudo sh -c "echo \\"
configure terminal
router bgp ${LOCAL_AS}
address-family ipv4 unicast
network ${LOOPBACK_NET}
end
exit
\\" | vtysh"

# 激活每个邻居
for neighbor_info in "${NEIGHBORS[@]}"; do
read -r neighbor_ip neighbor_as <<< "$neighbor_info"
sudo sh -c "echo \\"
configure terminal
router bgp ${LOCAL_AS}
address-family ipv4 unicast
neighbor ${neighbor_ip} activate
neighbor ${neighbor_ip} route-map PERMIT_ALL in
neighbor ${neighbor_ip} route-map PERMIT_ALL out
end
exit
\\" | vtysh"
done
# 配置路由映射
sudo sh -c "echo \\"
configure terminal
route-map PERMIT_ALL permit 10
end
write memory
exit
\\" | vtysh"

  • 查看配置

sudo vtysh -c "show running-config"

  • 可以看到类似这样的结果

configure terminal
hostname router2
route-map PERMIT_ALL permit 10
! 配置BGP路由器
router bgp 65002
bgp router-id 192.168.2.1
no bgp ebgp-requires-policy
no bgp network import-check
! 配置BGP邻居
neighbor 10.0.1.1 remote-as 65001
neighbor 10.0.1.1 description eBGP-peer-AS65001
! Keepalive定时器(保持连接定时器) 5s
! Holdtime定时器(保持时间定时器) 15s
neighbor 10.0.1.1 timers 5 15
! 配置BGP邻居
neighbor 10.0.1.3 remote-as 65003
neighbor 10.0.1.3 description eBGP-peer-AS65003
! Keepalive定时器(保持连接定时器) 5s
! Holdtime定时器(保持时间定时器) 15s
neighbor 10.0.1.3 timers 5 15
!配置地址族和路由映射
address-family ipv4 unicast
network 192.168.2.0/24
!激活每个邻居
neighbor 10.0.1.1 activate
neighbor 10.0.1.1 route-map PERMIT_ALL in
neighbor 10.0.1.1 route-map PERMIT_ALL out
!激活每个邻居
neighbor 10.0.1.3 activate
neighbor 10.0.1.3 route-map PERMIT_ALL in
neighbor 10.0.1.3 route-map PERMIT_ALL out
!配置路由映射
end
write memory
exit

BGP 故障排查

  • 常见问题:邻居无法建立、路由未学习/未通告、路径选择不符合预期、路由波动。
  • 排查工具与方法:
    • 查看 BGP 邻居状态。

sudo vtysh -c "show ip bgp summary"

  • 查看 BGP 路由表。

sudo vtysh -c "show ip bgp ipv4 unicast"
sudo ip route show | grep "bgp"

  • 查看 BGP 通告和接收的路由信息。

sudo vtysh -c "show ip bgp neighbor"

  • 查看 BGP 策略(如路由映射)的匹配和执行情况。

sudo vtysh -c "show route-map"

  • 利用网络监控和可视化工具。
赞(0)
未经允许不得转载:网硕互联帮助中心 » FRR实现BGP详细版
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!