BGP路由协议基础
约 1816 字大约 6 分钟
bgprouting
2025-07-15
概述
BGP(Border Gateway Protocol)是互联网的核心路由协议,负责在自治系统(AS)之间交换路由信息。它是唯一一个驱动整个互联网路由系统的协议,目前使用的是BGP-4版本(RFC 4271)。理解BGP对于网络架构设计、多线接入和故障排查至关重要。
自治系统(Autonomous System)
自治系统是由一个或多个网络运营者管理的一组IP网络的集合,对外呈现统一的路由策略。
AS编号分配:
- 2字节ASN: 1-65535
- 私有: 64512-65534
- 4字节ASN: 65536-4294967295 (RFC 6793)
- 私有: 4200000000-4294967294
查看AS信息:
$ whois AS13335 # Cloudflare
$ whois AS4134 # 中国电信iBGP vs eBGP
| 特性 | iBGP | eBGP |
|---|---|---|
| 位置 | 同一AS内部 | 不同AS之间 |
| 邻居要求 | 可以不直连(通过IGP) | 通常需直连(或多跳配置) |
| AS_PATH修改 | 不修改 | 添加本AS号 |
| NEXT_HOP | 不修改(需IGP可达) | 修改为自身地址 |
| TTL | 默认255 | 默认1 |
| 全互联要求 | 需要全互联或路由反射器 | 无 |
BGP路径属性
BGP通过路径属性(Path Attributes)来描述到达某个前缀的路由信息:
关键属性详解
AS_PATH:
路由传播示例:
前缀 203.0.113.0/24 由 AS 300 发起
AS 300 → AS 200: AS_PATH = {300}
AS 200 → AS 100: AS_PATH = {200, 300}
AS 100 收到时看到 AS_PATH = {200, 300}
用途:
1. 环路检测(收到包含自己ASN的路由则丢弃)
2. 路由选择(更短AS_PATH优先)
3. AS_PATH Prepending(人为拉长路径影响选路)LOCAL_PREF:
LOCAL_PREF在AS内部传播,不发送给eBGP邻居
值越大越优先(默认100)
应用场景:
AS 100有两个上游 ISP A 和 ISP B
- 设置到ISP A的路由 LOCAL_PREF = 200(主路径)
- 设置到ISP B的路由 LOCAL_PREF = 100(备用路径)MED:
MED影响入方向流量,告诉邻居AS从哪个入口进入更优
值越小越优先
AS 100 通过两个链路连接到 AS 200:
- 链路1: MED = 100(优先从这里进入)
- 链路2: MED = 200
AS 200 会优先选择MED小的路径BGP路由选择算法
BGP按以下顺序选择最优路由(从上到下,任一步骤确定即停止):
路由选择实例:
收到同一前缀的3条路由:
路由A: LOCAL_PREF=200, AS_PATH={200,300}, MED=100
路由B: LOCAL_PREF=200, AS_PATH={400}, MED=50
路由C: LOCAL_PREF=100, AS_PATH={500}, MED=10
Step 1: LOCAL_PREF → 排除C (100 < 200)
Step 2: AS_PATH长度 → A(2) vs B(1) → 选择B
结果: 路由B胜出BGP配置示例
# FRRouting (FRR) / Quagga BGP配置
router bgp 64512
bgp router-id 10.0.0.1
no bgp default ipv4-unicast
# eBGP邻居
neighbor 203.0.113.1 remote-as 174
neighbor 203.0.113.1 description ISP-A
neighbor 203.0.113.1 password bgp-secret
# iBGP邻居
neighbor 10.0.0.2 remote-as 64512
neighbor 10.0.0.2 update-source loopback0
address-family ipv4 unicast
# 宣告网络
network 198.51.100.0/24
# 邻居策略
neighbor 203.0.113.1 activate
neighbor 203.0.113.1 route-map ISP-A-IN in
neighbor 203.0.113.1 route-map ISP-A-OUT out
neighbor 203.0.113.1 prefix-list ACCEPT-DEFAULT in
neighbor 203.0.113.1 prefix-list MY-PREFIXES out
# iBGP
neighbor 10.0.0.2 activate
neighbor 10.0.0.2 next-hop-self
exit-address-family
# 前缀列表
ip prefix-list MY-PREFIXES seq 10 permit 198.51.100.0/24
ip prefix-list ACCEPT-DEFAULT seq 10 permit 0.0.0.0/0
# Route-map
route-map ISP-A-IN permit 10
set local-preference 200
route-map ISP-A-OUT permit 10
match ip address prefix-list MY-PREFIXES前缀劫持(Prefix Hijacking)
BGP缺乏内建的路由来源验证机制,恶意或误配置的AS可以宣告不属于自己的前缀。
历史案例:
- 2008年 Pakistan Telecom劫持YouTube前缀
- 2018年 Amazon Route53 BGP劫持导致加密货币被盗
- 2019年 多次大规模BGP路由泄漏事件
RPKI(Resource Public Key Infrastructure)
RPKI通过密码学验证BGP路由公告的合法性:
# ROA (Route Origin Authorization) 示例
{
"prefix": "198.51.100.0/24",
"maxLength": 24,
"asn": 64512
}
# 含义:AS 64512被授权宣告 198.51.100.0/24(最大/24)
# RPKI验证结果:
# Valid - ROA存在且匹配
# Invalid - ROA存在但不匹配(应拒绝)
# NotFound - 无ROA(无法判断)
# FRR配置RPKI验证
rpki
rpki cache 10.0.0.100 3323 preference 1
router bgp 64512
address-family ipv4 unicast
neighbor 203.0.113.1 route-map RPKI-FILTER in
route-map RPKI-FILTER deny 10
match rpki invalid
route-map RPKI-FILTER permit 20
match rpki valid notfoundBGP Communities
BGP社区是一种标签机制,用于对路由进行分类和控制策略:
标准社区格式:ASN:值(32位,16:16)
扩展社区:64位
大社区:96位(32:32:32),RFC 8092
知名社区:
- NO_EXPORT (65535:65281): 不向eBGP邻居传播
- NO_ADVERTISE (65535:65282): 不向任何邻居传播
- NO_EXPORT_SUBCONFED: 不向联邦外传播
实际应用:
- 64512:100 → 标记为从ISP-A学到的路由
- 64512:200 → 标记为从ISP-B学到的路由
- 64512:666 → Blackhole(黑洞路由,DDoS防御)
# 配置示例
route-map TAG-ISP-A permit 10
set community 64512:100 additive
# 基于社区的过滤
ip community-list standard BLACKHOLE permit 64512:666
route-map PROCESS-COMMUNITIES permit 10
match community BLACKHOLE
set ip next-hop 192.0.2.1 # Null路由BGP监控与排查
# 查看BGP邻居状态
show bgp summary
show bgp neighbors 203.0.113.1
# 查看BGP路由表
show bgp ipv4 unicast
show bgp ipv4 unicast 198.51.100.0/24
# 查看特定前缀的所有路径
show bgp ipv4 unicast 198.51.100.0/24 bestpath
# 公网BGP信息查询
# Looking Glass: https://lg.he.net/
# BGP Stream: https://bgpstream.com/
# RIPE Stat: https://stat.ripe.net/
# BGP路由泄漏检测
# bgpstream工具
bgpreader -w 1609459200,1609459260 -p routeviews \
-k "198.51.100.0/24"总结
BGP是互联网路由的基石,其设计基于策略而非最短路径。通过LOCAL_PREF、AS_PATH、MED等属性,网络运营者可以灵活控制流量的进出方向。BGP的安全性问题(前缀劫持、路由泄漏)通过RPKI等机制逐步得到改善。掌握BGP的路径属性和选路算法,对于设计多活架构、多线接入和网络故障排查都是必要的技能。
贡献者
更新日志
2026/3/14 13:09
查看所有更新日志
9f6c2-feat: organize wiki content and refresh site setup于