【网络体系搭建】V6:BGP与Router Policy
1. BGP 的定位:为什么有 OSPF 还需要 BGP
OSPF / EIGRP 更适合解决一个 AS 内部的动态路由问题。
BGP 的核心目标则是:
- 在不同 AS 之间交换大量 Prefix
- 根据策略而不仅仅是链路 Cost 进行选路
- 利用 Path Attributes 控制出口和入口
- 支撑 Internet、大型 IDC、运营商和大型企业网络
AS(Autonomous System)
AS 可以理解为:
在统一管理和外部路由策略下运行的一组网络。
BGP 分为:
- eBGP:不同 AS 之间建立 BGP
- iBGP:同一个 AS 内部建立 BGP
例如:
1 | AS65001 ── eBGP ── AS65002 |
iBGP 不能替代 OSPF/EIGRP。
常见设计:
1 | IGP(OSPF / IS-IS 等) |
2. BGP Neighbor 与 FSM
BGP 不像 OSPF 一样依靠 Hello 自动发现邻居,而是显式指定 Neighbor。
1 | router bgp 65001 |
BGP 使用:
1 | TCP Port 179 |
因此建立 BGP 的基础条件之一是:
1 | 底层 IP 可达 |
BGP FSM
核心状态:
1 | Idle |
简化理解:
- Idle:初始状态
- Connect:尝试建立 TCP
- Active:TCP 建立失败后等待/重试
- OpenSent:TCP 已建立,交换 OPEN
- OpenConfirm:OPEN 已确认,等待 KEEPALIVE
- Established:BGP Session 正常,可以交换 UPDATE
长期停留在 Active:
1 | 优先检查: |
主要 BGP Message
1 | OPEN |
3. BGP 路由始发:network 与 OSPF network 的区别
BGP:
1 | network 192.168.10.0 mask 255.255.255.0 |
含义:
将指定 Prefix 始发进入本地 BGP。
一般要求本地 RIB 中存在精确匹配的 Prefix。
例如:
1 | RIB: |
则:
1 | network 192.168.10.0 mask 255.255.255.0 |
可以正常始发。
但是如果只有:
1 | 192.168.10.0/25 |
并不能满足:
1 | network 192.168.10.0 mask 255.255.255.0 |
因为 RIB 中没有精确的:
1 | 192.168.10.0/24 |
BGP 不会自动把两个 /25 合并成 /24。
与 OSPF network 的区别
OSPF:
1 | network 192.168.10.0 0.0.0.255 area 0 |
核心作用:
1 | 用 wildcard 匹配本 Router 的接口 IP |
BGP:
1 | network Prefix mask Subnet-Mask |
核心作用:
1 | 指定要始发进入 BGP 的 Prefix |
4. AS_PATH 与 BGP 防环
BGP 是 Path Vector Protocol。
重要属性:
1 | AS_PATH |
例如:
1 | R1 AS65001 |
R1 始发 Prefix:
1 | 192.168.10.0/24 |
R3 最终可能看到:
1 | AS_PATH = 65002 65001 |
左边通常是最近经过的 AS。
当 eBGP 向其他 AS 通告路由时,会在 AS_PATH 中加入自己的 AS。
如果 R3 收到:
1 | AS_PATH = ... 65003 ... |
发现自己的 AS 已经存在:
1 | → 说明路由绕回来了 |
AS-PATH Prepending
可以人为重复自己的 AS:
1 | 400 400 400 500 |
让路径看起来比:
1 | 600 500 |
更长。
常用于:
尝试降低外部 AS 选择该入口的意愿。
注意:
AS-PATH Prepending 只能影响对方的 BGP Best Path 判断,不能保证对方一定按照预期选择,因为对方可能存在更高优先级的 Local Preference 等策略。
5. NEXT_HOP 与 next-hop-self
BGP Route 不只有 Prefix,还包含:
1 | NEXT_HOP |
例如:
1 | R1 10.0.12.1 ── eBGP ── 10.0.12.2 R2 |
R1 向 R2 通告:
1 | 192.168.10.0/24 |
R2 通常看到:
1 | Prefix = 192.168.10.0/24 |
NEXT_HOP 必须可达,否则 BGP Path 无法正常用于转发。
iBGP NEXT_HOP 问题
1 | ISP ── eBGP ── Edge ── iBGP ── Core |
Edge 从 ISP 学到:
1 | 8.8.8.0/24 |
再通过 iBGP 告诉 Core 时,默认通常保留 NEXT_HOP:
1 | Core: |
如果 Core 不知道如何到达 ISP 的地址,就会出现 NEXT_HOP 不可达。
常见解决:
1 | router bgp 65001 |
变成:
1 | Core: |
然后利用内部 OSPF/IGP 到达 Edge。
核心:
1 | eBGP 对外通告 |
6. iBGP Full Mesh 与 Route Reflector
iBGP 有重要规则:
从一个 iBGP Peer 学到的路由,默认不能继续通告给另一个普通 iBGP Peer。
原因之一:
在同一个 AS 内传播时不会像 eBGP 那样不断向 AS_PATH 加入新的 AS,因此不能简单依赖 AS_PATH 完成 AS 内部防环。
因此普通 iBGP 要求 Full Mesh。
如果有 n 台 iBGP Router:
1 | Session 数量: |
例如:
1 | 4 台 Router |
规模增大后 Full Mesh 扩展性很差。
Route Reflector
RR 打破普通 iBGP 的传播限制。
1 | Client |
RR 可以将 Client 学来的 iBGP Route 反射给其他 Client。
优点:
1 | 减少 iBGP Session 数量 |
RR 防环
重要属性:
1 | ORIGINATOR_ID |
用于避免 Route Reflection 环境中的路由环路。
注意:
RR 反射的是 BGP 路由信息。
不是:
1 | 收到一个 BGP Packet |
而是:
1 | 收到 BGP UPDATE |
7. BGP Best Path 主干
当同一个 Prefix 存在多条 BGP Path 时,需要进行 Best Path Selection。
Cisco 常见考试/学习主干可以记为:
1 | 1. Weight |
实际平台/版本的完整 Best Path 流程可能包含更多条件和细节,应以对应平台文档为准。
Weight
Cisco 本地属性:
1 | 越大越优 |
特点:
1 | 只在本 Router 有效 |
Neighbor 学到的 Route:
1 | Weight 通常默认 0 |
Cisco 本地产生的 BGP Route:
1 | Weight 通常默认 32768 |
Local Preference
1 | 越大越优 |
在 AS 内通过 iBGP 传播。
典型用途:
控制整个 AS 更喜欢从哪个出口出去。
例如:
1 | ISP1 → R1:LocalPref 500 |
一句话:
1 | Weight |
AS_PATH
在前面的高优先级属性相同后:
1 | AS_PATH 越短通常越优 |
但:
1 | AS_PATH 短 |
只表示 AS 层面的 Path 更短。
Origin
优先级:
1 | i < e < ? |
即:
1 | i 最优 |
常见:
1 | BGP network |
i 不代表这条路一定来自 OSPF/EIGRP。
MED
1 | 越小越优 |
典型作用:
告诉相邻 AS,希望它从哪个入口进入我的 AS。
例如:
1 | 入口 A:MED 50 |
默认情况下 MED 通常主要比较来自同一个相邻 AS 的 Path。
不同相邻 AS 的 MED 默认不一定直接比较;相关行为可以通过 BGP 配置改变。
eBGP vs iBGP
前面的属性打平后:
1 | eBGP Path |
IGP Metric to NEXT_HOP
如果前面继续打平:
1 | Path A NEXT_HOP |
这体现了:
1 | BGP 决定走哪个出口 |
8. BGP Best Path、AD 与 LPM 不要混淆
这是三个不同层次。
BGP Best Path
解决:
同一个 Prefix 有多条 BGP Path,BGP 自己选哪条?
使用:
1 | Weight |
Administrative Distance
解决:
不同路由来源对同一个 Prefix 都提供路由,RIB 更信任谁?
Cisco 常见默认值:
1 | Connected 0 |
AD 越小越优。
例如相同 Prefix:
1 | eBGP AD 20 |
Longest Prefix Match
真正转发 Packet 时:
1 | 先选择最长 Prefix Match |
例如:
1 | OSPF:8.8.8.0/24 |
访问:
1 | 8.8.8.8 |
优先匹配:
1 | /24 |
不能因为 eBGP AD 更小就忽略更具体的 /24。
9. BGP Route Policy
Prefix-list
作用:
1 | 匹配 Prefix + Prefix Length |
例如:
1 | ip prefix-list PL-IN permit 10.0.0.0/8 ge 16 le 24 |
含义:
1 | 匹配 10.0.0.0/8 范围内 |
可以直接用于 Neighbor:
1 | router bgp 65001 |
此时:
1 | permit → 允许 |
末尾存在 implicit deny。
也可以作为 Route-map 的 Match 条件:
1 | route-map POLICY permit 10 |
AS-path ACL + Filter-list
AS-path ACL:
1 | ip as-path access-list 10 deny _65003_ |
用于匹配:
1 | BGP AS_PATH |
然后:
1 | router bgp 65001 |
关系:
1 | AS-path ACL |
Route-map
Route-map 核心:
1 | MATCH |
即:
1 | 匹配哪些路由 |
例如:
1 | ip prefix-list PL1 permit 10.0.0.0/8 |
按 AS_PATH 匹配:
1 | route-map POLICY permit 10 |
注意:
1 | match as-path 10 |
匹配的是:
1 | AS-path ACL 10 |
不是 filter-list。
三者快速判断
1 | 按 Prefix 过滤 |
10. In/Out、Multipath、配置验证与排障
In / Out 永远站在本 Router 视角
1 | ISP ───── R1 |
R1:
1 | neighbor ISP route-map POLICY in |
表示:
1 | ISP → R1 |
处理收到的 BGP Route。
而:
1 | neighbor ISP route-map POLICY out |
表示:
1 | R1 → ISP |
处理向 ISP 通告的 BGP Route。
Local Preference
典型:
1 | ISP → Edge |
收到外部 Route 后提高 Local Preference:
1 | route-map SET-LP permit 10 |
控制:
1 | 我的 AS 怎么出去 |
注意:
1 | 控制的是“出站业务流量” |
业务流量方向和 BGP UPDATE 方向不能混淆。
AS-PATH Prepending
典型应用:
1 | 我的 AS → 外部 AS |
通过拉长向外通告 Route 的 AS_PATH:
1 | set as-path prepend 65001 65001 65001 |
尝试影响:
1 | 外部 AS 如何进入我的 AS |
BGP Multipath
BGP 默认核心行为:
1 | 多条 Path |
如果希望安装多条符合条件的 BGP Path,需要显式启用 Multipath。
例如常见 Cisco:
1 | router bgp 65001 |
iBGP 场景可能使用:
1 | maximum-paths ibgp 2 |
具体等价条件和命令应根据平台确认。
数据平面通常使用 Flow Hash 进行 ECMP,而不是简单逐包轮询。
基础配置示例
R1:
1 | router bgp 65001 |
重要 Show 命令
1 | show ip bgp summary |
查看:
1 | Neighbor |
1 | show ip bgp |
查看:
1 | BGP Table |
查看具体 Prefix:
1 | show ip bgp 8.8.8.0/24 |
查看 BGP Neighbor:
1 | show ip bgp neighbors |
查看进入 RIB 的 BGP Route:
1 | show ip route bgp |
检查 NEXT_HOP:
1 | show ip route <next-hop> |
BGP 排障顺序
第一层:Neighbor 不起来
1 | show ip interface brief |
长期 Active:
1 | 优先考虑 TCP / Reachability / BGP 参数问题 |
第二层:Established 但收不到 Prefix
检查:
1 | 对端有没有该 Prefix? |
第三层:BGP Table 有,但 RIB 没有
检查:
1 | NEXT_HOP 是否可达? |
第四层:RIB 有,但业务不通
进入数据平面:
1 | RIB / FIB |
V6 最终核心链条
1 | 底层 IGP 提供 IP Reachability |
最终记忆
1 | OSPF: |
1 | Weight |
1 | Prefix-list |



