BGP 企业网络架构设计:边界 eBGP + 内部 iBGP
单 ISP 用静态路由就够了,但多 ISP、多云接入时,BGP 架构设计决定了网络的稳定性和可扩展性。边界 eBGP + 内部 iBGP 是业界最佳实践。
文章目录
- BGP 企业网络架构设计:边界 eBGP + 内部 iBGP
- 一、企业为什么需要设计 BGP 架构
- 1.1 从单 ISP 到多 ISP/多云
- 1.2 架构设计的核心挑战
- 二、设计原则
- 2.1 AS 号分配原则
- 2.2 协议分层原则
- 三、推荐架构:边界 eBGP + 内部 iBGP
- 3.1 架构图
- 3.2 设计要点
- 3.3 三厂商配置
- Cisco 配置(边界FW)
- 华为配置(边界FW)
- FortiGate 配置(边界FW)
- 3.4 Next-Hop 问题详解
- 四、不推荐架构:纯 eBGP 串联
- 4.1 架构图
- 4.2 问题分析
- 4.3 对比表格
- 五、生产环境关键设计
- 5.1 双 RR 冗余设计
- 5.2 Loopback 接口建邻居
- 5.3 OSPF + BGP 联动
- 5.4 路由过滤
- 企业接 ISP 时:收默认路由还是收全表?
- 出向路由过滤
- 5.5 出入向流量不对称问题
- 哪些场景会有问题?
- 解决思路:两个层级
- 源进源出 vs BGP 属性控制:怎么选?
- 六、三云专线 BGP 对接速查
- 七、小结
- 架构选型一句话总结
- 与前 5 章的关联
- 参考资料
- 系列文章
一、企业为什么需要设计 BGP 架构
1.1 从单 ISP 到多 ISP/多云
很多企业的网络演进路径是这样的:
阶段 1:单 ISP 接入 企业网络 ─── 静态默认路由 ─── ISP 问题:没有,简单够用 阶段 2:双 ISP 接入(主备) 企业网络 ─── 静态路由 + 浮动路由 ─── ISP1(主)/ ISP2(备) 问题:还能应付,但切换慢(依赖静态路由的链路检测) 阶段 3:多 ISP / 多云接入 企业网络 ─── ISP1 / ISP2 / 阿里云 / AWS / 腾讯云 问题:静态路由搞不定,需要 BGP 动态选路多 ISP/多云场景的核心问题:
- 出向流量:从哪条链路出去?(选路控制)
- 入向流量:对端从哪条链路进来?(流量引导)
- 故障切换:链路断了怎么快速切换?
- 路由传递:内部设备怎么共享外部路由?
答案:边界用 eBGP(跨 AS),内部用 iBGP(同 AS 内传递路由),两者配合解决所有问题。
1.2 架构设计的核心挑战
设计 BGP 企业网络架构,需要解决 4 个核心问题:
| 问题 | 解决方案 |
|---|---|
| 边界怎么连 ISP/云 | eBGP(跨 AS) |
| 内部怎么传递路由 | iBGP(同 AS) |
| iBGP 全网状连接太多 | Route Reflector(RR) |
| iBGP Next-Hop 不可达 | OSPF + next-hop-self/local |
二、设计原则
2.1 AS 号分配原则
🏗️ 什么是 AS 号规划?
AS(Autonomous System,自治系统)是统一路由策略的网络,每个 AS 有一个唯一编号。
公有 AS vs 私有 AS:
- 公有 AS(1-64511):需要在 RIR(APNIC/ARIN)注册,互联网可见
- 私有 AS(64512-65534 或 4200000000-4294967294):仅用于内部,不出现在互联网路由表
企业网络 AS 号规划:
- 边界设备(FW/边界路由器):统一用一个私有 AS(如 AS65001),与 ISP 建立 eBGP
- 内部设备(核心/汇聚/接入):同一个私有 AS(如 AS65001),建立 iBGP
- 避免问题:内部设备使用不同 AS 号会导致配置复杂、AS-Path 膨胀
示例:
ISP1(AS4666,公有) ISP2(AS4788,公有) ↓ eBGP ↓ eBGP 边界FW(AS65001,私有) ↓ iBGP 核心SW(AS65001,私有) ↓ iBGP 汇聚SW(AS65001,私有)2.2 协议分层原则
企业网络按功能分层,每层使用不同协议:
| 层级 | 设备 | 协议 | 说明 |
|---|---|---|---|
| 边界层 | FW / 边界路由器 | eBGP + OSPF | 与 ISP/云建立 eBGP,内部用 OSPF 传递路由 |
| 核心层 | 核心交换机 | iBGP + OSPF | 作为 RR,传递 BGP 路由,OSPF 解决 Next-Hop |
| 汇聚层 | 汇聚交换机 | iBGP + OSPF | 作为 RR Client,接收 BGP 路由 |
| 接入层 | 接入交换机 | 默认路由 + OSPF | 不需要运行 BGP,使用默认路由上网 |
为什么这样分层:
- 边界 eBGP:跨 AS 必须用 BGP,ISP 不会跟你跑 OSPF
- 内部 iBGP:同 AS 内传递外部路由,避免 AS-Path 膨胀
- OSPF:解决 iBGP Next-Hop 可达性问题(下一节详解)
三、推荐架构:边界 eBGP + 内部 iBGP
3.1 架构图
架构说明:
云/ISP(公有 AS) ↓ eBGP(物理接口) 边界FW(AS65001)← 公有 AS 与私有 AS 的分界点 ↓ iBGP(Loopback 接口) 核心SW(AS65001)← RR(路由反射器) ↓ iBGP(Loopback 接口) 汇聚SW(AS65001)← RR Client ↓ 默认路由(OSPF 传递) 接入SW(无 BGP)3.2 设计要点
1. AS 号分配
- 云/ISP:各自公有 AS(如 AS4666、AS4788)
- 企业内部:统一一个私有 AS(如 AS65001)
- 边界 FW 作为 AS65001 的一部分,不属于公有 AS
2. 邻居关系
| 邻居关系 | 类型 | 接口类型 | 说明 |
|---|---|---|---|
| 云/ISP ↔ FW | eBGP | 物理接口 | 直连,同网段 |
| FW ↔ 核心SW | iBGP | Loopback | 跨多跳,稳定性高 |
| 核心SW ↔ 汇聚SW | iBGP | Loopback | 跨多跳,RR Client |
| 汇聚SW ↔ 接入SW | OSPF | 物理接口 | 接入层不需要 BGP |
3. RR 设计
- 核心SW 作为 RR(路由反射器)
- 汇聚SW 作为 RR Client
- 避免 iBGP 全网状连接(4 台设备只需 3 条 iBGP 会话,而不是 6 条)
4. Next-Hop 处理
这是 iBGP 架构最容易踩的坑,下一节详解。
3.3 三厂商配置
场景:边界 FW 连接阿里云(AS45104),内部核心SW 作为 RR
Cisco 配置(边界FW)
! ===== 边界FW 配置 ===== interface Loopback0 ip address 10.0.0.1 255.255.255.255 description iBGP-Source interface GigabitEthernet0/0 description TO-ALICLOUD ip address 169.254.1.1 255.255.255.252 bfd interval 50 min_rx 50 multiplier 3 ! ↑ BFD 快速故障检测(第 5 章详解) router ospf 1 router-id 10.0.0.1 network 10.0.0.1 0.0.0.0 area 0 network 10.1.1.0 0.0.0.255 area 0 ! FW ↔ 核心SW default-information originate ! 向内部下发默认路由 router bgp 65001 bgp router-id 10.0.0.1 ! eBGP 邻居(阿里云) neighbor 169.254.1.2 remote-as 45104 neighbor 169.254.1.2 description ALICLOUD-VBR neighbor 169.254.1.2 password 7 <md5-key> ! MD5 认证 ! iBGP 邻居(核心SW,作为 RR Client) neighbor 10.0.0.2 remote-as 65001 neighbor 10.0.0.2 description CORE-SW neighbor 10.0.0.2 update-source Loopback0 ! 用 Loopback 建邻居 address-family ipv4 ! eBGP 邻居 neighbor 169.254.1.2 activate neighbor 169.254.1.2 next-hop-self ! 显式指定 next-hop,确保跨版本一致 neighbor 169.254.1.2 fall-over bfd ! BFD 联动 neighbor 169.254.1.2 route-map IDC_TO_CLOUD out ! 只宣告 IDC 前缀 ! iBGP 邻居 neighbor 10.0.0.2 activate neighbor 10.0.0.2 next-hop-local ! 向 iBGP 邻居宣告时改 Next-Hop neighbor 10.0.0.2 route-reflector-client ! 核心SW 是 RR Client neighbor 10.0.0.2 fall-over bfd ! BFD 联动 ! 重分发 OSPF(subnets 确保非主类网络也被重分发) redistribute ospf 1 subnets ! 路由过滤:只宣告 IDC 前缀 ip prefix-list IDC_PREFIXES seq 10 permit 10.10.0.0/16 ip prefix-list IDC_PREFIXES seq 20 permit 10.20.0.0/16 route-map IDC_TO_CLOUD permit 10 match ip address prefix-list IDC_PREFIXES! ===== 核心SW 配置(RR Client)===== interface Loopback0 ip address 10.0.0.2 255.255.255.255 router ospf 1 router-id 10.0.0.2 network 10.0.0.2 0.0.0.0 area 0 network 10.1.1.0 0.0.0.255 area 0 network 10.2.2.0 0.0.0.255 area 0 router bgp 65001 bgp router-id 10.0.0.2 ! iBGP 邻居(边界FW) neighbor 10.0.0.1 remote-as 65001 neighbor 10.0.0.1 update-source Loopback0 neighbor 10.0.0.1 fall-over bfd address-family ipv4 neighbor 10.0.0.1 activate华为配置(边界FW)
# ===== 边界FW 配置 ===== interface LoopBack0 ip address 10.0.0.1 32 description iBGP-Source interface GigabitEthernet0/0 description TO-ALICLOUD ip address 169.254.1.1 255.255.255.252 # OSPF ospf 1 router-id 10.0.0.1 # router-id 在 OSPF 视图内配置 area 0.0.0.0 network 10.0.0.1 0.0.0.0 network 10.1.1.0 0.0.0.255 default-route originate # 向内部下发默认路由 # BGP bgp 65001 router-id 10.0.0.1 # eBGP 邻居(阿里云) peer 169.254.1.2 as-number 45104 peer 169.254.1.2 description ALICLOUD-VBR peer 169.254.1.2 password simple <md5-key> # MD5 认证 peer 169.254.1.2 next-hop-local # 华为用 next-hop-local peer 169.254.1.2 bfd enable # BFD 联动 peer 169.254.1.2 bfd min-tx-interval 50 min-rx-interval 50 detect-multiplier 3 # iBGP 邻居(核心SW,作为 RR Client) peer 10.0.0.2 as-number 65001 peer 10.0.0.2 description CORE-SW peer 10.0.0.2 connect-interface LoopBack0 # 用 Loopback 建邻居 peer 10.0.0.2 next-hop-local # 华为:向 iBGP 邻居改 Next-Hop peer 10.0.0.2 reflect-client # 核心SW 是 RR Client peer 10.0.0.2 bfd enable # 路由过滤:只宣告 IDC 前缀 ipv4-family unicast peer 169.254.1.2 enable peer 169.254.1.2 route-policy IDC_TO_CLOUD export peer 10.0.0.2 enable import-route ospf 1 # 路由策略 ip ip-prefix IDC_PREFIXES index 10 permit 10.10.0.0 16 ip ip-prefix IDC_PREFIXES index 20 permit 10.20.0.0 16 route-policy IDC_TO_CLOUD permit node 10 if-match ip-prefix IDC_PREFIXES# ===== 核心SW 配置(RR Client)===== interface LoopBack0 ip address 10.0.0.2 32 # OSPF ospf 1 router-id 10.0.0.2 area 0.0.0.0 network 10.0.0.2 0.0.0.0 network 10.1.1.0 0.0.0.255 network 10.2.2.0 0.0.0.255 bgp 65001 router-id 10.0.0.2 peer 10.0.0.1 as-number 65001 peer 10.0.0.1 connect-interface LoopBack0 peer 10.0.0.1 bfd enable ipv4-family unicast peer 10.0.0.1 enableFortiGate 配置(边界FW)
config system interface edit"port1"setip169.254.1.1255.255.255.252setdescription"TO-ALICLOUD"next edit"loopback0"setip10.0.0.1255.255.255.255 next end config router ospfsetrouter-id10.0.0.1 config ospf-area edit"0.0.0.0"config ospf-interface edit"port1"setinterface"port1"next edit"loopback0"setinterface"loopback0"next end next endsetdefault-information-originateenable# 向内部下发默认路由end config router bgpsetas65001setrouter-id10.0.0.1 config neighbor# eBGP 邻居(阿里云)edit"169.254.1.2"setremote-as45104setdescription"ALICLOUD-VBR"setpassword<md5-key># MD5 认证next# iBGP 邻居(核心SW,RR Client)edit"10.0.0.2"setremote-as65001setdescription"CORE-SW"setupdate-sourceenable# 用 Loopback 建邻居next end config address-family edit"ipv4"config neighbor edit"169.254.1.2"setactivateenablesetnext-hop-selfenable# 显式指定 next-hop,确保跨版本一致setbfdenable# BFD 联动next edit"10.0.0.2"setactivateenablesetnext-hop-selfenable# 向 iBGP 邻居改 Next-Hopsetroute-reflector-clientenable# 核心SW 是 RR Clientsetbfdenablenext end config redistribute config"ospf"setstatusenableend end next end end三厂商关键命令对比:
| 功能 | Cisco | 华为 | FortiGate |
|---|---|---|---|
| iBGP 改 Next-Hop | next-hop-local(AF 下) | next-hop-local(Peer 级) | next-hop-self enable(AF-Neighbor 下) |
| eBGP 改 Next-Hop | next-hop-self(AF 下) | next-hop-local(Peer 级) | next-hop-self enable(AF-Neighbor 下) |
| iBGP 源接口 | update-source(全局块) | connect-interface(Peer 级) | update-source enable(全局块) |
| RR Client 配置 | route-reflector-client(AF 下) | reflect-client(Peer 级) | route-reflector-client enable(AF-Neighbor 下) |
| BFD 联动 | fall-over bfd(AF 下) | bfd enable(Peer 级) | bfd enable(AF-Neighbor 下) |
| 重分发 OSPF | redistribute ospf 1 subnets(AF 下) | import-route ospf 1(AF 下) | redistribute ospf(AF 下) |
注意:Cisco 和 FortiGate 的 next-hop、BFD、RR 等命令在
address-family ipv4子块下配置;华为 VRP 在 BGP 视图的 Peer 级别直接配置,命令层级不同但效果一致。
3.4 Next-Hop 问题详解
🔄 为什么 Next-Hop 是 iBGP 最大坑点?
问题场景:
阿里云(AS45104)── eBGP ── 边界FW(AS65001)── iBGP ── 核心SW 阿里云宣告路由 10.10.0.0/16,Next-Hop = 169.254.1.2(阿里云地址) 边界FW 传给核心SW 时,Next-Hop 还是 169.254.1.2 核心SW 没有到 169.254.1.2 的路由 → 路由不可达 ❌根因:iBGP 不会修改 Next-Hop(这是 BGP 协议设计)
解决方案:
- next-hop-self(Cisco)/next-hop-local(华为):向 iBGP 邻居宣告路由时,强制把 Next-Hop 改成自己的地址
- OSPF:确保内部所有设备互通,能到达修改后的 Next-Hop
配置位置(注意三厂商命令层级不同):
- Cisco / FortiGate:在
address-family ipv4子块下配置- 华为 VRP:在 BGP 视图的 Peer 级别直接配置
- 边界FW 向 iBGP 邻居宣告时:
next-hop-local- 核心SW 向 iBGP 邻居宣告时:
next-hop-local- 边界FW 向 eBGP 邻居宣告时:
next-hop-self
对比(注意:Cisco/FortiGate 在 address-family 子块下配,华为在 Peer 级直接配):
| 命令 | Cisco(AF 下) | 华为(Peer 级) | FortiGate(AF-Neighbor 下) |
|---|---|---|---|
| iBGP 改 Next-Hop | next-hop-local | next-hop-local | next-hop-self enable |
| eBGP 改 Next-Hop | next-hop-self | next-hop-local | next-hop-self enable |
注意:华为统一使用
next-hop-local(不论 eBGP/iBGP),FortiGate 统一使用next-hop-self enable。
四、不推荐架构:纯 eBGP 串联
4.1 架构图
阿里云(AS45104) ↓ eBGP 边界FW(AS65001) ↓ eBGP(串联) 核心SW(AS65002) ↓ eBGP(串联) 汇聚SW(AS65003) ↓ 默认路由 接入SW4.2 问题分析
1. AS 号浪费
- 每层设备需要不同 AS 号(65001、65002、65003)
- 私有 AS 号虽然够用,但配置复杂
2. 需要 allowas-in
- eBGP 默认拒绝 AS-Path 中包含自己 AS 号的路由
- 纯 eBGP 串联会导致 AS-Path 反复包含内部 AS 号
- 必须配置
bgp allowas-in允许自己的 AS 号
! 核心SW 配置 router bgp 65002 ! eBGP 邻居(边界FW) neighbor 10.1.1.1 remote-as 65001 neighbor 10.1.1.1 next-hop-self ! 允许自己的 AS 号出现在 AS-Path bgp allowas-in3. AS-Path 膨胀
- 每经过一个 AS,AS-Path 增加一个 AS 号
- 从阿里云学到的路由,传到汇聚SW 时 AS-Path =
[45104, 65001, 65002, 65003] - 某些 ISP 会拒绝 AS-Path 过长的路由(>10 个 AS)
4. 没有冗余
- 单点故障会导致整条链路断开
- 无法利用 iBGP 的 RR 机制
4.3 对比表格
| 维度 | 推荐架构(边界eBGP + 内部iBGP) | 不推荐架构(纯eBGP串联) |
|---|---|---|
| AS 号 | 1 个公有 + 1 个私有 | 多个私有 AS |
| 配置复杂度 | 中(RR 简化 iBGP) | 高(每层都要 allowas-in) |
| AS-Path | 不膨胀(iBGP 不加 AS) | 膨胀(每层加 AS) |
| 冗余性 | 高(双 RR) | 低(单点故障) |
| 扩展性 | 好(加 RR Client 即可) | 差(每层都要配新 AS) |
| 生产推荐 | ✅ 推荐 | ❌ 不推荐 |
五、生产环境关键设计
5.1 双 RR 冗余设计
单 RR 的风险:
边界FW ── iBGP ── 核心SW(RR)── iBGP ── 汇聚SW ↓ RR 故障 → 整个 AS 内的 iBGP 路由无法传递 ❌双 RR 设计:
边界FW1 ── iBGP ── 核心SW1(RR1) ↓ ↓ 边界FW2 ── iBGP ── 核心SW2(RR2) ↓ ↓ 汇聚SW(同时与 RR1 和 RR2 建 iBGP)配置要点:
- 所有设备同时与 RR1 和 RR2 建立 iBGP 邻居
- RR1 和 RR2 使用不同的 Cluster ID(避免环路)
- RR1 和 RR2 之间也建 iBGP 邻居(同步路由信息)
! RR1 配置 router bgp 65001 bgp cluster-id 1 neighbor 10.0.0.100 remote-as 65001 neighbor 10.0.0.100 route-reflector-client ! RR2 配置 router bgp 65001 bgp cluster-id 2 neighbor 10.0.0.100 remote-as 65001 neighbor 10.0.0.100 route-reflector-client5.2 Loopback 接口建邻居
为什么 iBGP 用 Loopback 而不是物理接口:
| 接口类型 | 稳定性 | 说明 |
|---|---|---|
| 物理接口 | 低 | 链路故障 → 接口 Down → BGP 邻居断开 |
| Loopback | 高 | 接口永远 Up,只要 OSPF 能找到对端 Loopback,邻居就不掉 |
配置示例:
! 所有内部设备 interface Loopback0 ip address 10.0.0.x 255.255.255.255 description iBGP-Source router bgp 65001 neighbor 10.0.0.y remote-as 65001 neighbor 10.0.0.y update-source Loopback0 ! 用 Loopback 建邻居前提条件:内部运行 OSPF,确保所有 Loopback 互通。
5.3 OSPF + BGP 联动
为什么内部需要运行 OSPF:
- 解决 iBGP Next-Hop 可达性:OSPF 确保所有设备能到达修改后的 Next-Hop
- Loopback 接口互通:iBGP 用 Loopback 建邻居,需要 OSPF 传递 Loopback 路由
- 快速收敛:OSPF 收敛比 BGP 快,链路故障时先收敛 OSPF,再触发 BGP 切换
配置要点:
! 边界FW router ospf 1 network 10.0.0.0 0.255.255.255 area 0 ! 所有 Loopback network 10.1.1.0 0.0.0.255 area 0 ! FW ↔ 核心SW default-information originate ! 向内部下发默认路由 ! 核心SW router ospf 1 network 10.0.0.0 0.255.255.255 area 0 network 10.1.1.0 0.0.0.255 area 0 network 10.2.2.0 0.0.0.255 area 05.4 路由过滤
为什么需要路由过滤:
- 安全:防止不必要的路由进入内部网络
- 减小路由表:内部设备不需要知道互联网所有路由
- 避免路由泄漏:只宣告需要的前缀
企业接 ISP 时:收默认路由还是收全表?
📊 互联网全表有多大?
全球 BGP 路由表已经超过100 万条。如果企业 FW 从 ISP 接收全表,需要大内存路由器,而且绝大部分路由对企业没有意义。
大部分企业不需要学全表,以下是三种常见模式:
| 模式 | 路由条数 | 适用场景 | 配置方式 |
|---|---|---|---|
| 模式 1:只收默认路由 | 1 条 | 单 ISP、双 ISP 主备(90% 的企业) | 用 prefix-list 只允许 0.0.0.0/0 |
| 模式 2:默认 + 少量特定前缀 | 几十~几百条 | 多云接入,需要区分云流量走向 | 默认路由 + 云厂商前缀 |
| 模式 3:收全表 | 100 万+ 条 | 大型 ISP、CDN 厂商、内容分发平台 | 需要大内存路由器 |
为什么大部分企业选模式 1?
企业内部用户要访问的是互联网上的任意地址 → 不需要知道每条路由在哪 → 一条默认路由 0.0.0.0/0 就够了 → ISP 帮你选路,你不用操心双 ISP 主备场景(推荐方案):
ISP1(主)── eBGP ── 企业 FW ── eBGP ── ISP2(备) 只从两个 ISP 各收一条默认路由: ISP1 默认路由:Local Preference = 200(主) ISP2 默认路由:Local Preference = 100(备) 正常时:流量走 ISP1 ISP1 断了:自动切到 ISP2 路由表:只有 2 条默认路由什么时候需要模式 2?
场景:企业同时接了阿里云和腾讯云专线 需求:去阿里云的流量走专线 A,去腾讯云的流量走专线 B 做法: 从 ISP1 收默认路由 + 阿里云前缀 从 ISP2 收默认路由 + 腾讯云前缀 路由表:几十到几百条(可控)配置示例(Cisco,只收默认路由):
! 边界FW:只从 ISP 收默认路由,不收全表 ip prefix-list DEFAULT_ONLY permit 0.0.0.0/0 route-map FILTER_IN permit 10 match ip address prefix-list DEFAULT_ONLY router bgp 65001 neighbor 1.1.1.1 remote-as 4666 ! ISP1 neighbor 1.1.1.1 route-map FILTER_IN in ! 只收默认路由 neighbor 2.2.2.2 remote-as 4788 ! ISP2 neighbor 2.2.2.2 route-map FILTER_IN in ! 只收默认路由出向路由过滤
! 边界FW:只宣告 IDC 前缀给 ISP,防止路由泄漏 ip prefix-list IDC_PREFIXES seq 10 permit 10.10.0.0/16 ip prefix-list IDC_PREFIXES seq 20 permit 10.20.0.0/16 route-map IDC_TO_CLOUD permit 10 match ip address prefix-list IDC_PREFIXES router bgp 65001 neighbor 169.254.1.2 route-map IDC_TO_CLOUD out什么时候需要向 ISP/云宣告路由?
这取决于你有没有自己的公网 IP 段(PI 地址):
| 场景 | IP 来源 | 是否宣告路由 | 说明 |
|---|---|---|---|
| ISP 分配公网 IP(PA) | ISP 拥有该 IP 段 | 不发 | ISP 自己覆盖这个段,企业用 NAT 上网 |
| 自带公网 IP(PI)+ ASN | 企业从 RIR 申请 | 发 | 必须宣告,否则互联网找不到你的 IP |
| 云专线对接 | 企业 IDC 私有段 | 发(给云 VBR) | 云 VPC 需要知道 IDC 的 10.x/192.168.x 网段 |
90% 的企业(NAT 上网场景):
企业内网(10.0.0.0/8)── NAT ──> ISP 分配的公网 IP │ ISP 自带该段路由 企业不需要 BGP 宣告企业用 NAT 把内网地址转成 ISP 分配的公网 IP,出口流量走 ISP,不需要向 ISP 宣告任何路由。ISP 本身就有公网段的路由。
什么时候才必须宣告路由?
- 自带 ASN + PI 地址段(如 103.x.x.0/24),双线接入需要告诉两家 ISP “这个段从哪边走”
- 云专线对接 VBR(文章配置示例的场景),需要把 IDC 的私有段(如 10.10.0.0/16)宣告给阿里云 VBR,否则云上 VPC 回不到你的 IDC
⚠️ 核心原则:不要向公网 ISP 宣告私有地址段(10.x/172.16.x/192.168.x)
私有地址上不了互联网,ISP 也不会接收。只有和云 VBR 对接(纯私有互联)时,才互相宣告私有段。
5.5 出入向流量不对称问题
🔄 出入向流量为什么会不对称?
出向和入向由不同主体控制,这是不对称的根本原因:
方向 谁控制 用什么属性 出向(你的流量从哪条链路出去) 你自己 Local Preference、Weight、MED 入向(对端从哪条链路进来) 对端 ISP/云 AS-Path Prepend、MED、Community 你无法控制对端的选路决策,所以进出走不同路径是互联网的常态,不是 bug。
哪些场景会有问题?
大部分普通场景没问题:
- 单设备单出口:同一条物理链路进出,没有不对称问题
- TCP/UDP 转发:路由器逐包做转发决策,进出不对称不影响
- 单台防火墙 NAT:同一条链路进出,会话状态匹配正常
需要关注的三类场景:
| 场景 | 问题 | 后果 |
|---|---|---|
| 主备 FW + 多专线 | 出向走 FW1→专线A,入向被对端选了专线B→FW2 | FW2 没有会话状态 → 丢包 |
| 多出口 NAT | 出向走 ISP1 做了 NAT,回包走 ISP2 进来 | ISP2 不认识 ISP1 的公网 IP → 丢包 |
| iBGP RR + 多 FW | 不同 FW 各自向 ISP 通告路由,ISP 选了不同 FW | 会话状态分散,回包走错 |
解决思路:两个层级
层级 1:BGP 属性控制(协议层)
用 Local Preference + AS-Path Prepend配对控制,让进出走同一条链路:
出向控制:在 FW1 上设置 Local Preference 高 → 出向流量优先走 FW1 入向控制:对 FW2 的 eBGP 邻居做 AS-Path Prepend → 对端认为 FW1 的 AS-Path 更短 → 入向流量也走 FW1 效果:进出都走 FW1 ✅! 出向控制:FW1 优先级高 route-map CLOUD_PREFERENCE permit 10 match ip address prefix-list ALL set local-preference 200 route-map CLOUD_PREFERENCE permit 20 match ip address prefix-list ALL set local-preference 100 router bgp 65001 neighbor 169.254.1.2 route-map CLOUD_PREFERENCE in ! 主链路 neighbor 169.254.2.2 route-map CLOUD_PREFERENCE in ! 备链路! 入向控制:备链路做 AS-Path Prepend route-map PREPEND_AS permit 10 set as-path prepend 65001 65001 65001 router bgp 65001 neighbor 169.254.2.2 route-map PREPEND_AS out ! 备链路加长路径层级 2:设备级源进源出(会话绑定)
🔧 什么是源进源出?
源进源出是防火墙/路由器的设备级特性,核心思路:入向流量从哪个接口进来,回包就从哪个接口出去。
传统行为(无源进源出): 阿里云专线A → FW → 企业网络 → FW → 阿里云专线B ← 回包走了另一条链路 ❌ 源进源出: 阿里云专线A → FW → 企业网络 → FW → 阿里云专线A ← 回包走同一条链路 ✅实现原理:首次建连时记录"入接口→出接口"绑定,后续同一会话的包固定走同一条路径。
各厂商叫法:
| 厂商 | 功能名称 | 说明 |
|---|---|---|
| 华为 USG | 源进源出(firewall session link-group) | 会话绑定入接口和出接口 |
| Fortinet | Session Sync + Interface Bind | HA 同步会话 + 接口绑定 |
| Palo Alto | Source-based Routing | 基于源 IP 路由 |
| Cisco | Policy-Based Routing (PBR) + IP SLA | 基于策略路由实现类似效果 |
配置示例(华为 USG 源进源出):
# 启用源进源出功能 firewall session link-group enable # 可选:基于源 IP 的路由策略 route-policy source_based_route permit node 10 if-match source-ip 10.10.0.0 16 apply preference 100# FortiGate 会话同步(HA 环境) config system ha set session-pickup enable set session-pickup-connection-without-hardware-assistance enable end # 接口绑定(确保回包从入接口出) config system interface edit "port1" set alias "isp1" next end源进源出 vs BGP 属性控制:怎么选?
| 维度 | 源进源出(设备级) | BGP 属性控制(协议级) |
|---|---|---|
| 作用范围 | 单设备 | 全网 |
| 控制粒度 | 会话级(每个连接) | 路由级(每个前缀) |
| 配置复杂度 | 低(一个命令) | 高(需要配 route-map/policy) |
| 依赖条件 | 需要设备支持 | 需要两端都支持 BGP |
| 适用场景 | 单 FW 多出口、NAT 场景 | 多 FW、多设备、运营商场景 |
| 局限性 | 管不了另一台设备 | 控制不了对端行为 |
最佳实践:组合使用
源进源出(兜底) + BGP 属性配对控制(主动) = 端到端路径一致性- 单 FW 场景:源进源出足够,配置简单
- 主备 FW 场景:BGP 属性控制 + 源进源出(HA 同步会话)
- 多 FW 多 ISP 场景:必须 BGP 属性控制,源进源出作为兜底
六、三云专线 BGP 对接速查
如果你的企业接入多个云,以下是三云专线的 BGP 对接要点:
| 特性 | 阿里云 VBR+CEN | AWS DX+TGW | 腾讯云专线GW+CCN |
|---|---|---|---|
| BGP 对端 AS | 45104 | 7224(公有VIF) | 45090 |
| 互联地址 | 169.254.x.x/30 | /30(控制台分配) | /30 |
| 最大 BGP 前缀数 | 100 | 100 | 100 |
| 跨 Region 互联 | CEN TR 自动 | TGW Peering | CCN 自动 |
| 双专线 ECMP | 支持(最多4条) | 需 LAG 或双 VIF | 支持 |
| BFD 支持 | ✅ VBR 支持 | ✅ DX 支持(AWS侧自动启用,客户端需手动配置) | ✅ 支持 |
| 路由过滤 | 路由策略(前缀级) | 前缀过滤列表 | CCN 路由管理 |
关键注意事项:
阿里云 VBR:
- 对端 AS 固定 45104
- 支持 BFD,建议启用(50ms × 3 = 150ms)
- VBR 必须关联到 CEN,否则路由不通
AWS DX:
- 公有 VIF 对端 AS 固定 7224
- AWS 侧自动启用异步 BFD(最小间隔 300ms),客户端路由器需手动配置 BFD 才能联动
- 最多 100 个 BGP 前缀,超过会 reset session
腾讯云 CCN:
- 对端 AS 固定 45090
- 跨地域带宽需单独购买(默认 10Kbps,不购买几乎断掉)
- CCN 内 VPC 网段重叠会导致路由冲突
七、小结
架构选型一句话总结
- 边界 eBGP:跨 AS 连 ISP/云,必须用 BGP
- 内部 iBGP:同 AS 内传递路由,避免 AS-Path 膨胀
- RR 设计:避免 iBGP 全网状,双 RR 冗余
- Next-Hop:next-hop-self(eBGP)/ next-hop-local(iBGP)+ OSPF
与前 5 章的关联
- 第 1 章:BGP 状态机(邻居建立)
- 第 2 章:BGP 属性(Local Preference、AS-Path、Next-Hop)
- 第 3 章:BGP 选路(13 条规则)
- 第 4 章:BGP 防环(iBGP 水平分割、RR)
- 第 5 章:BGP+BFD(快速故障检测)
- 第 6 章:BGP 企业网络架构(边界 eBGP + 内部 iBGP)
下一篇:BGP 常见故障排查——7 个典型场景的排查思路与解决方法。
参考资料
- RFC 4271: A Border Gateway Protocol 4 (BGP-4) - BGP 协议核心标准
- RFC 4456: BGP Route Reflection - BGP 路由反射器规范
- IP Routing Configuration Guide, Cisco IOS XE 17.x - Cisco IOS XE BGP 配置指南
- Huawei BGP Configuration Guide - 华为 NE 系列路由器 BGP 配置指南
- 阿里云 VBR BGP 配置指南 - 阿里云边界路由器 BGP 配置
- AWS Direct Connect Documentation - AWS DX BGP 配置指南
- 腾讯云专线接入文档 - 腾讯云专线网关 BGP 配置
系列文章
- 上一篇:05-实战篇-BGP+BFD快速切换-180秒到150毫秒的故障检测|BGP+BFD 快速切换:从 180 秒到 150 毫秒
- 当前文章:BGP 企业网络架构设计:边界 eBGP + 内部 iBGP
- 下一篇:07-运维排障篇-BGP常见故障排查-7个典型场景