运维笔记

BGP Peering 2026:从入门到翻车的实战避坑指南

Networking 技术可视化

兄弟们,BGP 这玩意儿,说简单也简单,说复杂能让你怀疑人生。

最近帮客户搞了一波 AS64500 到 AS65000 的 EBGP 对接,本以为半小时搞定,结果硬是折腾到凌晨两点。为啥?全特么是细节坑。

这篇东西,不扯虚的。直接上 CLI,画拓扑,讲我踩过的坑。2026 年了,BGP 的配置思路没变,但安全要求和自动化程度完全不一样了。

基础拓扑:一个经典的 EBGP 场景

[AS 64500]                  [AS 65000]
   R1 (10.0.12.1) --------- (10.0.12.2) R2
   Loopback0: 1.1.1.1       Loopback0: 2.2.2.2
   Network: 172.16.1.0/24   Network: 192.168.1.0/24

就这?就这。但 90% 的人第一步就翻车。

第一步:最基础的 BGP 配置(别笑,真有人写错)

! R1 Configuration
router bgp 64500
 bgp router-id 1.1.1.1
 neighbor 10.0.12.2 remote-as 65000
 ! 注意:2026年了,别用默认的TTL,EBGP默认TTL=1,必须手动改
 neighbor 10.0.12.2 ebgp-multihop 2
 neighbor 10.0.12.2 timers 10 30
 !
 address-family ipv4 unicast
  network 172.16.1.0 mask 255.255.255.0
  neighbor 10.0.12.2 activate
 exit-address-family
! R2 Configuration
router bgp 65000
 bgp router-id 2.2.2.2
 neighbor 10.0.12.1 remote-as 64500
 neighbor 10.0.12.1 ebgp-multihop 2
 neighbor 10.0.12.1 timers 10 30
 !
 address-family ipv4 unicast
  network 192.168.1.0 mask 255.255.255.0
  neighbor 10.0.12.1 activate
 exit-address-family

翻车点 #1: 很多人忘了 ebgp-multihop。如果你用直连 IP 建邻居,默认 TTL=1 就够了。但一旦你用了 Loopback 或者中间有跳数,不配这个,邻居永远起不来。

翻车点 #2: timers 10 30 是我个人习惯。默认的 Keepalive=60s, Hold=180s 太慢了,故障收敛时间 3 分钟,2026 年的网络谁等得起?我一般压到 10/30,再低 CPU 扛不住。

第二步:验证邻居状态(这条命令救过我无数次命)

show ip bgp summary
show ip bgp neighbors 10.0.12.2

输出长这样:

状态含义常见原因
Idle初始状态或错误邻居 IP 不可达、AS 号不匹配
ConnectTCP 连接建立中路由不通、ACL 过滤
Active主动连接失败对端没配、端口被 ACL 挡
OpenSent发送 OPEN 消息一般正常
OpenConfirm收到 OPEN 确认一般正常
Established邻居建立成功恭喜,你可以下班了

实战经验: 如果卡在 Active 状态超过 30 秒,别瞎折腾。直接 debug ip bgp events,看日志里到底报什么错。我见过最离谱的——对端 ACL 把 TCP 179 端口给 drop 了,查了俩小时。

第三步:路由策略与过滤(2026 年标配)

裸配 BGP 不配过滤策略?那是给自己挖坟。2026 年,每个 EBGP 邻居至少要有:

  1. 入方向前缀过滤 —— 防止对面瞎发路由把你表撑爆
  2. 出方向 AS_PATH 过滤 —— 防止你的私有 AS 泄漏到公网
  3. 最大前缀限制 —— 防 DDoS 攻击
! R1 上配置前缀列表
ip prefix-list ALLOW_FROM_R2 seq 5 permit 192.168.1.0/24

route-map RM_IN_FROM_R2 permit 10
 match ip address prefix-list ALLOW_FROM_R2
 set local-preference 150

route-map RM_OUT_TO_R2 permit 10
 match ip address prefix-list ALLOW_FROM_R2
 set as-path prepend 64500 64500 64500

router bgp 64500
 neighbor 10.0.12.2 route-map RM_IN_FROM_R2 in
 neighbor 10.0.12.2 route-map RM_OUT_TO_R2 out
 neighbor 10.0.12.2 maximum-prefix 100 80 restart 5

这里有个骚操作: maximum-prefix 100 80 restart 5 意思是如果收到的前缀超过 80 条就报警,超过 100 条直接断邻居,5 分钟后自动重连。对付路由泄露神器。

第四步:BGP 安全配置(2026 年必须搞)

以前很多人觉得 BGP 安全无所谓。直到 2024 年某大厂被 BGP 劫持搞挂了 6 小时。

! TCP MD5 认证(老东西但有效)
router bgp 64500
 neighbor 10.0.12.2 password MySuperSecretKey2026

! GTSM (Generalized TTL Security Mechanism)
! 只接受 TTL >= 255 的 BGP 包,防远程攻击
 neighbor 10.0.12.2 ttl-security hops 1

注意: ttl-security hops 1ebgp-multihop 是冲突的,不能同时配。如果你用直连建邻居,用 TTL Security 更安全。如果用 Loopback 多跳,只能用 MD5。

常见问题 FAQ

Q1: 为什么我的 BGP 邻居一直卡在 Idle 状态?

A: 99% 的情况是对端 IP 不可达。先 ping 10.0.12.2 看看通不通。通了再看 AS 号配没配错。我见过有人把 remote-as 写成自己的 AS 号,那肯定起不来。

Q2: EBGP 和 IBGP 的配置区别是什么?

A: EBGP 一般用直连 IP,AS 号不同,TTL=1,不需要 next-hop-self。IBGP 一般用 Loopback 建邻居,AS 号相同,需要 next-hop-self,而且必须全互联或配 Route-Reflector。简单说:EBGP 是跨组织,IBGP 是内部。

Q3: BGP 的 Local Preference 和 MED 怎么选?

A: Local Preference 是出方向的,MED 是入方向的。简单粗暴:你想让流量从哪个出口走,就在那配高 Local Pref。你想让对端优先走你哪个入口,就配低 MED。但注意 MED 只在相同 AS 间比较,不同 AS 的 MED 没有可比性。

总结几个血泪教训

  1. 配完 BGP 一定要 write memory —— 别问我为什么强调这个,问就是重启过。
  2. 先配 maximum-prefix 再上线 —— 2024 年有个案例,对端路由泄露,直接导致全网 BGP 表爆炸,CPU 100%。
  3. BGP 的收敛时间默认太慢 —— 改 timers,配 BFD。2026 年的网络,BFD 不是可选项,是必选项。
  4. 别迷信默认配置 —— 每个厂商的默认行为不一样。Cisco 默认会发送所有直连路由,Juniper 默认不发送。看清楚。

最后说一句:BGP 不难,难的是你永远不知道对端会给你发什么垃圾路由。做好过滤,配好安全,剩下的随缘。