BGP 与多线机房互联
BGP 协议基础(AS、eBGP/iBGP、路径属性与选路)、Anycast 任播、多线机房与专线互联、流量工程与防劫持。
前置知识:路由与转发的基本概念、IGP(OSPF/RIP)的作用域(见 交换与路由)。
学习目标:
- 说清自治系统(AS)与 IGP/BGP 的分工,理解「BGP 是互联网的路由协议」这句话的含义;
- 掌握 eBGP 与 iBGP 的区别、四类 BGP 报文与邻居状态机;
- 理解 AS_PATH / LOCAL_PREF / MED 等关键路径属性,能判断简单场景下的选路结果;
- 知道 BGP 多线机房、Anycast、专线互联与 SD-WAN 各自解决什么问题,以及 RPKI 防劫持的基本思路。
1. 为什么互联网需要 BGP
企业内网跑 OSPF 就够了,但互联网由数万个独立运营的网络组成:电信、联通、谷歌、各大云厂商…… 每个网络都有自己的管理权、自己的地址段和自己的利益。这种「谁也管不了谁」的环境需要一个在不同 管理域之间交换可达性信息的协议。
- AS(Autonomous System,自治系统):由单一机构统一管理、内部路由策略自洽的网络。用
ASN(AS 号)标识,16 位 ASN 0
65535 中 6451265534 为私有,32 位 ASN 由 IANA 统一分配; - IGP(内部网关协议):OSPF、IS-IS 等,目标是在一个 AS 内部找到最优路径,度量标准是 带宽/开销,收敛快;
- BGP(Border Gateway Protocol,边界网关协议,RFC 4271):在 AS 之间传播可达性,路由 决策可以承载商业策略(「优先把流量卖给谁」),因此选路逻辑不是「最短」,而是「最符合策略」。
类比:IGP 是公司内部的快递分拣系统,追求快;BGP 是国与国之间的外交与通邮协议,先讲规则、 条约和立场,速度其次。类比失真提示:外交协议还有谈判回合,BGP 的策略配置是静态的、由网管 预先写死。
一个具体问题就能看出差异:某云厂商同时从电信和联通买了两条链路,希望「去程走电信、回程走联 通」以省钱——这种与带宽/延迟无关、纯商业导向的选路,只有 BGP 的策略机制能表达。
2. BGP 协议基础
2.1 邻居建立
BGP 基于 TCP 179 端口建会话(这是它与 OSPF/RIP 的显著区别:靠 TCP 的可靠传输与保活,自己 不必做复杂的报文确认)。邻居分两种:
| 维度 | eBGP(External) | iBGP(Internal) |
|---|---|---|
| 邻居关系 | 不同 AS 之间 | 同一 AS 内部 |
| 直连要求 | 通常要求直连(TTL=1) | 可跨多跳(TTL=255),常用环回口建邻 |
| AS_PATH | 传出时追加本 AS 号 | 不追加(防止 AS 内环路) |
| 传播规则 | 正常传播给其他邻居 | 从 iBGP 学到的路由不再传给其他 iBGP 邻居 |
iBGP 的「不传」规则意味着 AS 内部所有跑 BGP 的路由器必须两两建邻(full-mesh),规模大了靠 **路由反射器(RR)**或联盟来解决——这是中大型网络最常见的 BGP 设计考点。
四类报文与状态机:
OPEN 建立邻居时交换版本、AS 号、Router-ID、能力协商
UPDATE 携带可达前缀(NLRI)与路径属性 / 撤销路由
KEEPALIVE 周期保活(默认 60s,Hold Time 180s)
NOTIFICATION 出错即发送并断开会话(如 Hold Timer 超时、AS 号不符)
状态机(简化):Idle → Connect/Active → OpenSent → OpenConfirm → Established
排障口诀:卡在 Idle/Active 多为 TCP 不可达(ACL、路由缺失);卡在 OpenSent
多为认证或 AS 号配置错误。
2.2 路径属性与选路
UPDATE 报文里的每条路由都带路径属性,决定「选哪条、传给谁」:
| 属性 | 类型 | 作用 |
|---|---|---|
| AS_PATH | 必遵,周知 | 记录途经的 AS 列表;越短越优,也是 AS 间防环机制 |
| NEXT_HOP | 必遵,周知 | 下一跳地址;eBGP 学到的路由传给 iBGP 邻居时默认不改变,常需修正 |
| LOCAL_PREF | 公认,自决 | AS 出向流量偏好,值越大越优;只在 AS 内传播 |
| MED | 可选,非传递 | 提示对端「从我这多个入口里选哪个进来」,值越小越优 |
| Community | 可选,传递 | 给路由打「标签」,供下游 AS 按约定执行策略(如调整 LOCAL_PREF) |
简化版决策顺序(完整规则十余条,考试与排障记前几条即可):
- 最高 WEIGHT(Cisco 私有,仅本机有效)→ 2. 最高 LOCAL_PREF → 3. 本地始发优先 →
- 最短 AS_PATH → 5. 最低起源类型(IGP < EGP < Incomplete)→ 6. 最低 MED →
- eBGP 优于 iBGP → 8. 到 NEXT_HOP 的 IGP 度量最小 → …… → 最后依赖 Router-ID 大小做决断。
3. 用 FRRouting 搭一个可复现的 eBGP 实验
FRR(FRRouting)是 Linux 上事实标准的开源路由协议栈,两条 Ubuntu 虚拟机即可复现 eBGP 邻居:
# 两侧机器都安装:AS65001 与 AS65002 各一台,互联地址 10.0.0.0/30
sudo apt install frr
# 打开 BGP 守护进程:编辑 /etc/frr/daemons 将 bgpd=no 改为 bgpd=yes 后
sudo systemctl restart frr
! AS65001 侧 /etc/frr/frr.conf 关键片段
router bgp 65001
bgp router-id 1.1.1.1
no bgp ebgp-requires-policy ! FRR 新版默认要求策略,实验环境先关掉
neighbor 10.0.0.2 remote-as 65002
address-family ipv4 unicast
network 192.168.1.0/24 ! 宣告本 AS 的前缀(需已存在于路由表)
exit-address-family
# vtysh 进入 FRR 命令行验证
sudo vtysh -c 'show bgp ipv4 unicast summary'
# 预期:State/PfxRcd 一列为数字(如 1),若为 Idle/Active/Connect 则邻居未建立
sudo vtysh -c 'show bgp ipv4 unicast'
# 预期:可见 192.168.1.0/24 与 192.168.2.0/24 两条,*> 标记表示最优
排障时 BGP 邻居状态的完整观察命令见 Ping、Traceroute 与路径诊断 与 抓包分析入门。
4. BGP 多线机房
4.1 单线、双线与 BGP 多线
国内机房常用「线路」描述接入质量,三种形态对比:
| 形态 | 做法 | 痛点 / 优势 |
|---|---|---|
| 单线 | 只接入一家运营商 | 跨网访问慢,成本低 |
| 双线/多线 | 接多家运营商,静态分流或 NAT 源进源出 | 配置僵硬;回程靠策略路由,链路故障需手工切换 |
| BGP 多线 | 机房有自己的 ASN,向多家运营商同时宣告前缀 | 全网自动择优、单线故障自动收敛;成本高 |
BGP 多线的本质:机房作为独立 AS,与每个上游运营商建立 eBGP 会话并宣告同一前缀。上游网络把这条 路由向全网扩散,互联网上访问者的流量会沿着「当时最优」的路径自然流入机房;某条上游断链,对应 路由被撤销,全网在收敛后自动改道——故障切换不依赖任何人工干预,这是它对双线静态方案的代 际优势。
4.2 Anycast 任播
常规单播是一个地址对应一台主机;Anycast 是「多个站点宣告同一个前缀」,路由协议自动把用户 送到「网络距离最近」的那个站点。它通常就靠 BGP 实现:每个站点都是一个小 AS(或同一 AS 的不 同入口),向本地运营商宣告同一地址段。
用户 A(欧洲)──最优路由──> 法兰克福站点(1.1.1.1)
用户 B(亚太)──最优路由──> 新加坡站点(1.1.1.1)
两个站点对外是同一个 IP,内部互不相干,各自应答各自区域的请求
- 典型应用:公共 DNS(1.1.1.1、8.8.8.8)、根服务器(见 DNS 与 DHCP 中「13 个标识、上千实例」的解释)、CDN 边缘节点;
- 附带收益:单站点故障时路由撤销即可把流量引向其他站点,相当于免费的容灾;
- 注意点:Anycast 节点间状态不同步,不适合有长连接会话粘性要求的业务(连接迁移问题), 除非上层协议自己解决了迁移——QUIC 的连接迁移(连接 ID 机制)正是为此类场景铺路。
5. 机房互联:专线、VPN 与 SD-WAN
多地域机房之间的互联(互通内网网段)三种典型方案:
| 方案 | 载体 | 带宽/延迟保证 | 成本 | 适用 |
|---|---|---|---|---|
| 专线 | 运营商物理电路 / MPLS | 有 SLA,稳定 | 高 | 核心业务、金融类合规要求 |
| IPsec VPN | 公网隧道加密 | 无保证 | 低 | 中小规模、备份链路 |
| SD-WAN | 多条链路智能选路 + 加密 | 部分保证 | 中 | 多分支组网,链路质量参差场景 |
配置实操层面,IPsec/GRE/WireGuard 隧道的搭建见 VPN 与隧道配置 与 隧道技术;本节的要点是组网决策:核心路径走专线、互联网密 链路做备份与分流,是「成本-可靠性」曲线上的常见落点。
6. 流量工程:用属性引导流量走向
BGP 流量工程的目标:去程(出向)与回程(入向)分开控制。
! 出向控制:对本端 AS 生效,提高 LOCAL_PREF 让出向优先走 ISP-A
router bgp 65001
address-family ipv4 unicast
neighbor 10.0.0.2 route-map PREF-IN in
ip prefix-list DEFAULT seq 5 permit 0.0.0.0/0
route-map PREF-IN permit 10
match ip address prefix-list DEFAULT
set local-preference 200 ! 默认 100,越大越优
! 入向控制:影响对端 AS 的选择,向 ISP-A 宣告时追加 AS_PATH(不推荐路径)
route-map PREPEND out
set as-path prepend 65001 65001 ! AS_PATH 变长,对端自动降低该路径优先级
| 目标 | 修改方向 | 常用手段 |
|---|---|---|
| 控制出向流量 | 本 AS 内 | LOCAL_PREF 调整、按前缀粒度路由策略 |
| 控制入向流量 | 对方 AS | MED(相邻 AS 有效)、AS_PATH prepend、Community 约定 |
工程注意:prepend 次数别过量(一般 1~3 个),AS_PATH 长度上限为 255,超长会触发 NOTIFICATION 断会话;MED 只对相邻 AS 有效,跨多 AS 的回程引导要靠 Community 与上游签订策略约定。
7. 陷阱与安全
- iBGP 水平分割导致路由「传不动」:新加的路由器学不到部分前缀,先检查是否缺路由反射器
(
neighbor x.x.x.x route-reflector-client)或 full-mesh 是否完整; - NEXT_HOP 不可达:eBGP 路由传给 iBGP 邻居后,对端因解析不了 NEXT_HOP 而不安装路由;
AS 内需让 IGP 可达该 NEXT_HOP,或配置
next-hop-self; - 前缀劫持:任何 AS 都能宣告不属于自己的前缀,错误(或恶意)宣告会把流量引向错误位置。 治理方案是 RPKI:地址持有人用 ROA 对象声明「哪个 ASN 有权宣告哪个前缀」,验证方拒绝无 有效 ROA 的宣告。主流公共解析器与大型运营商已部署 RPKI 验证,属于当前互联网路由安全的基线 实践;自身上线新前缀前,也应先签发 ROA 并核查全局路由可见性;
- 路由泄漏:把从甲方学来的路由错误转售/传给乙方,会造成劫持级事故;行业以 RFC 9234 的 Route Leak Protection(角色与 only-to-customer 等社区约定)在标准化层面收口,实践上靠 peers/policy 纪律与对账工具(如公开的互联网路由注册库 IRR 过滤);
- 收敛慢是设计使然:BGP 优先稳定而非极速收敛,全表百万级路由下秒级~分钟级收敛正常;对 收敛敏感的关键链路用 BFD(Bidirectional Forwarding Detection)联动把故障检测压到毫秒级。
8. 小结
初学者要点
- AS 是互联网的基本管理单元;AS 内用 IGP 找最快路径,AS 之间用 BGP 讲策略;
- BGP 跑在 TCP 179 上,eBGP 连别人、iBGP 连自己人;iBGP 学的路由不再传给 iBGP 邻居;
- BGP 多线机房 = 自有 ASN 向多家运营商宣告前缀,故障切换自动完成;Anycast = 多地宣告同一地址, 让用户自动访问最近的站点。
进阶注意
- 选路决策记前四步(WEIGHT → LOCAL_PREF → 最短 AS_PATH → MED 相关),能解释绝大多数线上选路 结果;出向调 LOCAL_PREF、入向靠 MED/prepend/Community;
- iBGP full-mesh 扩展性问题用路由反射器解决;NEXT_HOP 不可达与路由泄漏是最常见的两类生产事故;
- 路由安全基线:为自有前缀签发 RPKI ROA,对上游做 IRR 过滤,关键会话配 BFD 联动快速收敛。