ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
IP 與 ASN

Linux 伺服器檢查 BGP 會話狀態:BIRD 2 與 FRRouting 驗證方法及 Idle/Active/Established 含義

5 個步驟 7 分鐘閱讀 984 次閱讀 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 技術支援。

這篇文章有幫助嗎?

相關教程