ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
IP 与 ASN

Linux 服务器检查 BGP 会话状态:BIRD 2 与 FRRouting 验证方法及 Idle/Active/Established 含义

5 个步骤 7 分钟阅读 962 次阅读 80
本文目录

在独立服务器上自行广播 IP 段时,第一件事就是检查 BGP 会话状态是否为 Established。本文介绍在 Linux 服务器上如何用 BIRD 2 和 FRRouting(FRR)查看与验证 BGP 会话,解释 Idle、Active、Established 等常见状态的含义,并给出会话起不来时的排查步骤。适用于 Debian/Ubuntu 与 CentOS/Rocky/AlmaLinux。示例中本端 ASN 为 64500,对端(上游)IP 为 203.0.113.1,广播前缀为 198.51.100.0/24。

步骤 1:安装 BGP 软件 BIRD 2 或 FRRouting

如果尚未安装,可按系统选择下列命令,两者选其一即可。BIRD 配置简洁,适合单机广播;FRR 语法接近传统路由器,适合熟悉 Cisco 风格的用户。

# Debian / Ubuntu
apt install -y bird2        # or: apt install -y frr
# CentOS / Rocky / AlmaLinux
dnf install -y epel-release && dnf install -y bird   # BIRD 2.x from EPEL
dnf install -y frr                                  # or FRRouting

步骤 2:用 birdc 查看 BIRD BGP 会话状态

birdc show protocols 列出所有协议,BGP 会话的 Info 列显示 Established 即为正常。加上 all 可以看到对端 ASN、保持时间、收发路由数量和最近的错误信息;show route export 可以确认您的前缀确实在向上游广播。

birdc show protocols
birdc show protocols all upstream1
birdc show route export upstream1
birdc show route protocol upstream1 count
Name       Proto      Table      State  Since         Info
device1    Device     ---        up     2026-10-01
upstream1  BGP        ---        up     2026-10-01    Established

步骤 3:用 vtysh 查看 FRR BGP 会话状态

在 FRR 中执行 show bgp summary,State/PfxRcd 列如果显示数字(收到的前缀数),说明会话已 Established;显示 Idle、Active、Connect 等文字则说明未建立。neighbors 子命令可查看详细状态和已发布、已接收的路由。

vtysh -c "show bgp summary"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1 advertised-routes"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1 routes"

注意:较新版本 FRR 默认开启 ebgp-requires-policy,若 eBGP 邻居没有配置入/出方向策略,汇总中会显示 (Policy),会话虽然建立但不收发任何路由。为邻居绑定 route-map 即可:

router bgp 64500
 address-family ipv4 unicast
  network 198.51.100.0/24
  neighbor 203.0.113.1 route-map UPSTREAM-IN in
  neighbor 203.0.113.1 route-map UPSTREAM-OUT out
 exit-address-family

步骤 4:理解常见 BGP 会话状态

BIRD 与 FRR 都遵循 RFC 4271 定义的 BGP 有限状态机,可以用以下命令只看当前状态和最近一次错误:

birdc show protocols all upstream1 | grep -E "BGP state|Neighbor AS|Last error"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1" | grep -E "BGP state|Last reset"
状态含义常见原因
Idle未尝试连接或被重置后等待配置错误、邻居被管理性关闭、刚出错后的退避
Connect正在建立 TCP 连接对端尚未响应
ActiveTCP 连接失败,反复重试IP 不通、179 端口被防火墙拦截、对端未配置您
OpenSent / OpenConfirmTCP 已通,正在交换 OPEN 参数ASN 不一致、MD5 密码错误、Router ID 冲突
Established会话已建立,可交换路由正常状态

步骤 5:排查 BGP 会话无法 Established

先确认能 ping 通对端,并测试 TCP 179 是否可达;再检查本机防火墙是否放行来自对端的 179 端口。

ping -c 4 203.0.113.1
nc -zv 203.0.113.1 179
ss -tnp | grep ':179'
# iptables (Debian / Ubuntu)
iptables -I INPUT -p tcp -s 203.0.113.1 --dport 179 -j ACCEPT
# firewalld (CentOS / Rocky / AlmaLinux)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.1" port port="179" protocol="tcp" accept'
firewall-cmd --reload

然后查看日志中的具体错误,例如 “Bad peer AS”(ASN 填错)、“Hold timer expired”(链路或防火墙问题)。修改配置后可重启单个会话:

journalctl -u bird -n 50 --no-pager
journalctl -u frr -n 50 --no-pager
birdc restart upstream1
vtysh -c "clear bgp ipv4 unicast 203.0.113.1 soft"
clear 或 restart 会话会导致短暂的路由撤销,请尽量使用 soft 方式,并避开业务高峰。

常见问题

BGP 会话 Established 了,但外网看不到我的前缀?

检查导出过滤器是否放行该前缀、前缀是否有 IRR 路由对象和有效 ROA,以及上游是否已更新过滤列表。可以在公共 Looking Glass 中查询。

会话在 Active 和 Idle 之间反复跳动?

通常是 TCP 179 不通或对端尚未配置。请核对双方 IP、ASN、是否需要 multihop 以及 MD5 密码。

IMIDC 能帮忙配置 BGP 会话吗?

租用 IMIDC 的 IP 或 ASN 并在 IMIDC 服务器上广播时,可以通过工单提供您的 ASN、前缀和会话需求,由技术人员协助对接。

如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持。

这篇文章有帮助吗?

相关教程