BGP local-as 用法详解
🔀 BGP local-as 用法详解
AS 号迁移利器 | 让邻居看到的 AS 号与本机实际 AS 号不同
一、什么是 BGP local-as
一句话:让路由器在与某个特定邻居建立 BGP 时,使用一个"假的"AS 号(local-as),而不是自己真正的 AS 号。
本质:路由器对外"伪装"自己属于另一个 AS,使邻居认为它是在和那个旧 AS 号做 eBGP peer。
核心价值:在 AS 号变更/合并/迁移时,不需要修改对端(如运营商)的 BGP 配置,实现平滑过渡。
本质:路由器对外"伪装"自己属于另一个 AS,使邻居认为它是在和那个旧 AS 号做 eBGP peer。
核心价值:在 AS 号变更/合并/迁移时,不需要修改对端(如运营商)的 BGP 配置,实现平滑过渡。
工作机制
当配置
① OPEN 消息:向该邻居发送的 BGP OPEN 包中,My AS 字段填的是 local-as(旧AS号),不是真正的 AS 号
② AS_PATH 出方向:向该邻居发送路由时,在 AS_PATH 前面先加 local-as,再加真实 AS
③ AS_PATH 入方向:从该邻居收到路由时,在 AS_PATH 中加入 local-as
④ 对其他邻居无影响:只针对配置了 local-as 的那个邻居生效
neighbor x.x.x.x local-as 旧AS号 后:① OPEN 消息:向该邻居发送的 BGP OPEN 包中,My AS 字段填的是 local-as(旧AS号),不是真正的 AS 号
② AS_PATH 出方向:向该邻居发送路由时,在 AS_PATH 前面先加 local-as,再加真实 AS
③ AS_PATH 入方向:从该邻居收到路由时,在 AS_PATH 中加入 local-as
④ 对其他邻居无影响:只针对配置了 local-as 的那个邻居生效
二、AS_PATH 变化详解
场景: R1(AS 100) ←→ R2(真实AS 200, local-as 65000 给R1) ←→ R3(AS 300)
R2 对 R1 伪装为 AS 65000
┌──────┐ ┌──────┐ ┌──────┐
│ R1 │ eBGP │ R2 │ eBGP │ R3 │
│AS 100│◄──────────────►│AS 200│◄──────────────►│AS 300│
└──────┘ R1 认为对端 └──────┘ └──────┘
是 AS 65000 │
│ neighbor R1 local-as 65000
│
AS_PATH 变化 (R2 → R1 方向发送路由):
R3 发来的路由 AS_PATH = [300]
R2 转给 R1 时 AS_PATH = [65000, 200, 300]
↑ ↑
local-as 真实AS
AS_PATH 变化 (R1 → R2 方向接收路由):
R1 发来的路由 AS_PATH = [100]
R2 收到后内部看到 AS_PATH = [65000, 100]
↑
local-as 被插入
三、命令语法与选项
3.1 Cisco IOS / IOS-XE
router bgp 200
neighbor 10.0.0.1 remote-as 100
neighbor 10.0.0.1 local-as 65000
3.2 关键选项
| 选项 | 效果 | 使用场景 |
|---|---|---|
local-as 65000 |
默认行为:AS_PATH 中同时出现 local-as 和真实 AS 出方向: [65000, 200, ...] |
标准迁移场景 |
local-as 65000 no-prepend |
从邻居收到的路由不在 AS_PATH 中插入 local-as (只影响入方向) |
避免入方向 AS_PATH 变长导致路径次优 |
local-as 65000 no-prepend replace-as |
出方向用 local-as 替换真实 AS 出方向: [65000, ...](不出现200) 入方向也不插入 |
完全隐藏真实 AS 号,对邻居透明 |
local-as 65000 no-prepend replace-as dual-as |
同时接受对端用旧AS号或新AS号建邻居 | 过渡期间允许对端随时切换 |
⚠️ 最常用组合:
local-as 65000 no-prepend replace-as — 完全透明替换,对端完全不知道你换了 AS 号。
四、典型使用场景
场景1:企业 AS 号变更(最常见)
背景:公司原来用 AS 65000 和运营商做 BGP 互联。现在公司被收购,需要变更为新的 AS 200。
问题:运营商配置变更流程长(需提工单审批),不可能和你同时改。
方案:你这边先把 AS 改为 200,用 local-as 65000 继续伪装,等运营商改完后再取消 local-as。
问题:运营商配置变更流程长(需提工单审批),不可能和你同时改。
方案:你这边先把 AS 改为 200,用 local-as 65000 继续伪装,等运营商改完后再取消 local-as。
迁移前:
[企业 AS 65000] ←── eBGP ──→ [运营商 AS 4808]
迁移后 (企业侧先改, 运营商暂不动):
[企业 AS 200, local-as 65000] ←── eBGP ──→ [运营商 AS 4808]
(运营商不感知变化)
最终 (运营商完成变更后):
[企业 AS 200] ←── eBGP ──→ [运营商 AS 4808]
(移除 local-as)
! === 企业路由器配置 (迁移期间) ===
router bgp 200 ! 真实新AS号
neighbor 202.96.1.1 remote-as 4808 ! 运营商AS
neighbor 202.96.1.1 local-as 65000 no-prepend replace-as
! ↑ 伪装为旧AS,运营商无感
场景2:两家企业网络合并
背景:A 公司 (AS 100) 收购 B 公司 (AS 200)。合并后统一用 AS 100。
问题:B 公司有大量 BGP 邻居(上游运营商、客户、合作方),不可能同时通知所有人改配置。
方案:B 公司路由器改为 AS 100,对所有外部邻居用 local-as 200 过渡。
问题:B 公司有大量 BGP 邻居(上游运营商、客户、合作方),不可能同时通知所有人改配置。
方案:B 公司路由器改为 AS 100,对所有外部邻居用 local-as 200 过渡。
! === B 公司路由器 (合并后) ===
router bgp 100 ! 统一为 A 公司 AS
! 对运营商1保持旧AS
neighbor 1.1.1.1 remote-as 4134
neighbor 1.1.1.1 local-as 200 no-prepend replace-as
! 对运营商2保持旧AS
neighbor 2.2.2.2 remote-as 4837
neighbor 2.2.2.2 local-as 200 no-prepend replace-as
! 与 A 公司内部用真实AS iBGP
neighbor 10.0.0.1 remote-as 100
场景3:多归属客户 AS 迁移
背景:客户同时接了电信和联通。现在客户要从私有AS 65001 迁移到公有AS 3000。
问题:两个运营商的变更窗口不同,不可能同一时刻一起改。
方案:客户先改 AS 为 3000,对两个运营商分别 local-as 65001,待运营商逐个变更完毕后再逐步取消。
问题:两个运营商的变更窗口不同,不可能同一时刻一起改。
方案:客户先改 AS 为 3000,对两个运营商分别 local-as 65001,待运营商逐个变更完毕后再逐步取消。
! === 客户路由器 (过渡期) ===
router bgp 3000
! 电信还没改完,继续伪装
neighbor 202.97.1.1 remote-as 4134
neighbor 202.97.1.1 local-as 65001 no-prepend replace-as
! 联通已经改完,不再需要 local-as
neighbor 219.158.1.1 remote-as 4837
! (无 local-as,直接用真实 AS 3000)
场景4:数据中心互联 — 隐藏内部 AS 结构
背景:数据中心内部用私有 AS(如 65001-65100)做 Leaf-Spine BGP,但对外只想暴露一个公有 AS。
方案:边界路由器对外部邻居使用 local-as 替换内部AS。
方案:边界路由器对外部邻居使用 local-as 替换内部AS。
! === DC 边界路由器 ===
router bgp 65001 ! 内部私有AS
! 对外部合作伙伴暴露公有AS
neighbor 203.10.1.1 remote-as 500
neighbor 203.10.1.1 local-as 3000 no-prepend replace-as
五、多厂商配置对比
5.1 Cisco IOS-XE / IOS-XR
! IOS-XE
router bgp 200
neighbor 10.0.0.1 remote-as 100
neighbor 10.0.0.1 local-as 65000 no-prepend replace-as
! IOS-XR
router bgp 200
neighbor 10.0.0.1
remote-as 100
local-as 65000 no-prepend replace-as
5.2 华为
! 华为设备
bgp 200
peer 10.0.0.1 as-number 100
peer 10.0.0.1 fake-as 65000
! 华为用 fake-as 实现同样功能
! 可选: peer 10.0.0.1 fake-as 65000 prepend-local-as (等同于默认行为)
! 可选: peer 10.0.0.1 fake-as 65000 (不加 prepend 则等同于 no-prepend replace-as)
5.3 Juniper
! Juniper
protocols bgp group EXTERNAL {
neighbor 10.0.0.1 {
peer-as 100;
local-as 65000 {
private; /* 等同于 no-prepend replace-as */
/* 不加 private 则会在 AS_PATH 中出现两个 AS */
}
}
}
5.4 厂商对照
| 功能 | Cisco | 华为 | Juniper |
|---|---|---|---|
| 基本 local-as | local-as 65000 |
fake-as 65000 |
local-as 65000 |
| 不插入入方向 | no-prepend |
默认行为 | 默认行为 |
| 替换真实AS(出方向) | replace-as |
默认行为(不加prepend-local-as) | private |
| 双AS接受 | dual-as |
dual-as |
alias |
六、验证与排障
! === Cisco 验证命令 ===
! 查看邻居详情(确认 local-as 生效)
show bgp neighbors 10.0.0.1 | include local AS
! 输出示例: For address family: IPv4 Unicast
! Local AS = 65000 (configured), Real AS = 200
! 查看发出去的路由 AS_PATH
show bgp ipv4 unicast neighbors 10.0.0.1 advertised-routes
! 注意看 AS_PATH 中是否只有 local-as (replace-as) 或同时有两个
! 查看收到的路由 AS_PATH
show bgp ipv4 unicast neighbors 10.0.0.1 received-routes
! 查看 BGP OPEN 消息中的 AS 号
debug bgp updates
debug bgp keepalives
! === 华为验证 ===
display bgp peer 10.0.0.1 verbose
display bgp routing-table peer 10.0.0.1 advertised-routes
七、注意事项与限制
1. local-as 不能和真实 AS 相同
local-as 的值不能等于 router bgp 后面的 AS 号,否则报错。
2. local-as 不能和对端 AS 相同
如果 local-as = remote-as,BGP 会认为是 iBGP(或 loop),建议避免。
3. 每个邻居只能配一个 local-as
不能对同一个邻居配两个 local-as。
4. 与 confederation 不兼容
在 BGP confederation 环境中使用 local-as 可能有冲突,需谨慎。
5. AS_PATH 环路检测
默认情况下 local-as 会被加入 AS_PATH,可能触发环路检测。使用
6. 只针对单个邻居
local-as 是 per-neighbor 配置,不影响与其他邻居的 BGP 关系。
7. 迁移完成后及时清理
过渡期结束后应移除 local-as 配置,避免长期维护两套 AS 带来的复杂性。
local-as 的值不能等于 router bgp 后面的 AS 号,否则报错。
2. local-as 不能和对端 AS 相同
如果 local-as = remote-as,BGP 会认为是 iBGP(或 loop),建议避免。
3. 每个邻居只能配一个 local-as
不能对同一个邻居配两个 local-as。
4. 与 confederation 不兼容
在 BGP confederation 环境中使用 local-as 可能有冲突,需谨慎。
5. AS_PATH 环路检测
默认情况下 local-as 会被加入 AS_PATH,可能触发环路检测。使用
allowas-in 可规避特殊场景。6. 只针对单个邻居
local-as 是 per-neighbor 配置,不影响与其他邻居的 BGP 关系。
7. 迁移完成后及时清理
过渡期结束后应移除 local-as 配置,避免长期维护两套 AS 带来的复杂性。
八、完整迁移操作流程(实战步骤)
目标:将 AS 65000 迁移为 AS 200,对端运营商 AS 4808 暂不配合修改。
! ====== 步骤1: 修改 AS 号 + 加 local-as (一个维护窗口内完成) ======
! 先加新配置
router bgp 200
bgp router-id 1.1.1.1
neighbor 202.96.1.1 remote-as 4808
neighbor 202.96.1.1 local-as 65000 no-prepend replace-as
address-family ipv4 unicast
network 103.1.1.0 mask 255.255.255.0
neighbor 202.96.1.1 activate
! 删除旧 BGP 进程(如果 IOS 需要先 no router bgp 65000)
! 注意:改 AS 号会导致所有 BGP 邻居 reset,需维护窗口操作
! ====== 步骤2: 验证 ======
show bgp summary
! 确认邻居状态为 Established
show bgp neighbors 202.96.1.1 | include local
! 确认 Local AS = 65000
! ====== 步骤3: 通知运营商修改对端配置 ======
! 运营商将 remote-as 65000 改为 remote-as 200
! ====== 步骤4: 运营商改完后,移除 local-as ======
router bgp 200
no neighbor 202.96.1.1 local-as
! ====== 步骤5: 最终验证 ======
show bgp summary
show bgp neighbors 202.96.1.1 advertised-routes
BGP local-as 用法详解 | AS 迁移/合并场景 | Cisco / 华为 / Juniper
浙公网安备 33010602011771号