hello,我是网工小陈。
BGP 是互联网骨干和大规模企业网络必用的外部路由协议。

它不像 OSPF、EIGRP 那样局限在内部网络,邻居建立失败会直接导致跨网段甚至跨运营商网络不可达。
很多新手排障第一反应是看 IP、ASN 或者接口状态,其实真正的隐形敌人往往是防火墙。
只要 TCP 179 端口被阻止,BGP 邻居就无法建立,表面上看起来配置都对,但就是握手失败。
今天深入讲解 BGP 邻居建立失败的原因、排障思路,以及防火墙相关的注意点。
文章目录
1. BGP 邻居建立流程回顾
BGP 使用 TCP 179 建立会话,主要步骤:
三次握手建立 TCP 连接
邻居双方 TCP 三次握手完成,才能进入 BGP FSM(Finite State Machine)状态。
BGP Open 消息交换
交换 ASN、Hold Time、能力(Capability)信息。
Keepalive 消息维持会话
定期发送 Keepalive 消息保持邻居状态。
Update 消息传递路由信息
如果某一步失败,邻居状态就不会变成Established
。常见状态有:
Idle
:初始状态,等待启动Connect
:尝试建立 TCPActive
:TCP 建立失败,继续尝试OpenSent
/OpenConfirm
:TCP 成功,Open 消息交换中Established
:邻居成功建立,可以收发路由
2. 防火墙对 BGP 邻居的影响
2.1 TCP 端口阻断
BGP 使用TCP 179
如果防火墙策略未允许 TCP 179,BGP 无法建立连接
表现:
Active
状态徘徊不前Ping 通对端 IP,但 BGP 握手失败
2.2 ACL 或策略路由
防火墙可能对源 IP、目的 IP 或接口做策略限制 可能只允许特定 IP 建邻居 造成部分邻居无法建立,另一部分邻居正常
2.3 NAT 影响
在 NAT 环境下,如果没有静态 NAT 映射 BGP 源端口或地址,BGP 握手也可能失败
2.4 日志观察
防火墙日志可以查看 TCP 179 被阻止的情况
网工常用命令:
display firewall session
display firewall policy
3. 排障思路
当 BGP 邻居建不起来时,可以按以下顺序排查:
确认接口可达
Ping 对端 IP 是否通 traceroute 检查路由路径是否中断
确认 TCP 179 是否通
使用 telnet <BGP_neighbor_IP> 179
或nc -zv <IP> 179
如果 TCP 握手失败,说明防火墙或 ACL 阻止
检查 BGP 配置
ASN 是否正确 邻居 IP 是否正确 对端 BGP 是否启用
分析防火墙策略
确认防火墙允许TCP 179双向通过 检查策略是否限制源/目的 IP 或接口 在多层防火墙环境下,确保每一跳的策略都放行 BGP 会话
查看 TCP 状态
在路由器上:
display tcp brief
检查是否有 TCP SYN 发送但未收到 ACK
SYN 发出但无 ACK,一般说明中间设备(防火墙、ACL)阻断
确认 NAT 或策略路由
BGP 建邻居时,源 IP 和端口必须保持一致 NAT 或策略路由可能修改源 IP,导致 TCP 握手失败
日志分析
路由器日志查看 BGP FSM 状态变化 防火墙日志查看是否有 TCP 179 被拒绝的记录
4. 防火墙配置注意点
允许 TCP 179 双向
内外网或者不同区域都必须放行 保持源 IP 一致
如果使用 NAT,需要静态 NAT 映射 BGP 对端 IP 考虑高可用与备份链路
多条链路时,每条链路都要放行 BGP 会话 避免策略过细导致误杀
仅放行特定端口和源 IP,避免放行过多,同时保证邻居可达
5. 建立稳定 BGP 邻居的建议
端口固定
TCP 179 默认即可,不建议修改
双向检查
对端路由器和防火墙都要确认策略
定期监控
使用 SNMP 或监控工具监控 BGP 会话状态
模拟断链实验
提前测试防火墙策略,确保链路切换不会影响邻居
文档化配置
所有 BGP 邻居、ASN、防火墙策略要有详细文档,方便排障
6. 总结
BGP 邻居建立失败最常见的隐形原因就是防火墙阻断 TCP 179
Ping 可通 ≠ BGP 成功,必须确认 TCP 三次握手是否完成
排障顺序:接口可达 → TCP 179 测试 → 配置检查 → 防火墙/ACL → 日志分析
稳定邻居建立依赖正确配置、防火墙放行、NAT 注意以及定期监控
一句话总结:BGP 是 TCP 会话,TCP 不通就别谈邻居建立。


发表回复