Runbook: BGP セッションが UP しない¶
実行前提
systemctl restart bgp / config reload -y は FRR の全 neighbor を一旦切り、再収束まで数十秒~数分の経路断が発生する。実行前に sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.bak.$(date +%s) でロールバック用 backup を取り、ECMP メンバーがいる場合は本機を config bgp shutdown all で graceful drain してから対処すること。問題が悪化した場合は backup を cp で戻して config reload -y で復旧する。
症状¶
show ip bgp summaryで対向の State がActive/Connect/Idle (Admin)のままになる- Peer の確立後すぐ flap する (
Established→Idle) - Container
bgp内では FRR (bgpd) が動作しているが、SONiC 側showで peer が表示されない
確認コマンド¶
最初に状態を 1 枚で確認するためのワンライナー集 (詳細手順は後述「切り分け手順」)。
# Peer State / AS / Uptime の一覧
show ip bgp summary
# 特定 peer の詳細 (Active / OpenSent / Established 等)
docker exec bgp vtysh -c "show bgp neighbor <peer_ip>"
# CONFIG_DB と FRR の整合
sonic-db-cli CONFIG_DB hgetall "BGP_NEIGHBOR|<peer_ip>"
docker exec bgp vtysh -c "show running-config" | grep -A5 "router bgp"
# notification 抽出 (直近のエラー)
docker exec bgp tail -n 200 /var/log/frr/bgpd.log | grep -iE "notification|fsm"
想定原因(優先度順)¶
- L1 / L2 / L3 の事前条件が満たされていない: interface oper down、IP 未設定、MTU 不一致、対向側 ACL でブロック
- CONFIG_DB と FRR の同期失敗:
bgpcfgd(= FRR config generator) がテンプレ生成エラーで停止し、vtysh -c "show run"に neighbor が出ない - AS 番号 / router-id の設定誤り: ローカル AS が
DEVICE_METADATA|localhostのbgp_asnと一致しない - 管理上 disable されている:
BGP_NEIGHBOR|<ip>のadmin_status=down - BFD セッション断:
bfddが UP しないと BGP が即 down する構成(bfd hold-down)
切り分け手順¶
flowchart TD
A[BGP peer State != Established] --> B{interface oper up?}
B -- No --> B1[L1/L2 確認: fec-errors / link-flapping]
B -- Yes --> C{ping / TCP 179 到達?}
C -- No --> C1[対向 ACL / firewall / route 確認]
C -- Yes --> D{CONFIG_DB と vtysh の neighbor 一致?}
D -- No --> D1[bgpcfgd ログ確認 / config reload]
D -- Yes --> E{AS / router-id 整合?}
E -- No --> E1[BGP_NEIGHBOR.asn / DEVICE_METADATA.bgp_asn 修正]
E -- Yes --> F[BFD / hold-timer / admin_status を確認]
1. リンク・IP の確認¶
- 期待:
operがup、対向 peer の IP がローカル subnet にある - 異常:
oper down→ ケーブル / SFP / FEC の確認(fec-errors.md を参照)
2. ICMP / TCP/179 到達確認¶
- 期待: ping 応答あり、TCP SYN / SYN-ACK が双方向に流れる
- 異常: TCP SYN は出るが SYN-ACK 戻らない → 対向 ACL / firewall を確認
3. CONFIG_DB と FRR の整合¶
sonic-db-cli CONFIG_DB hgetall "BGP_NEIGHBOR|<peer_ip>"
sonic-db-cli CONFIG_DB hgetall "DEVICE_METADATA|localhost" | grep -E "bgp_asn|hostname"
docker exec bgp vtysh -c "show running-config" | grep -A5 "router bgp"
- 期待:
BGP_NEIGHBORのasn/local_addr/holdtimeが FRR 側neighbor設定と一致 - 異常: CONFIG_DB に存在するが FRR に出ない →
docker logs bgp 2>&1 | grep bgpcfgdで template エラー確認
4. BGP セッション状態の詳細¶
- 状態
Active: outbound TCP がブロックされている (peer 不在 / ACL) - 状態
OpenSent: AS 番号不一致 (Notification: Bad Peer AS) - 状態
OpenConfirm: capability 不一致 (4-byte AS、Add-path 等) - 状態
Establishedで即 reset: hold-down 不一致 / route-map evaluation エラー
5. ログ・notification 抽出¶
docker exec bgp tail -n 200 /var/log/frr/bgpd.log
sudo grep -iE "bgp|bfd" /var/log/syslog | tail -100
対処方法¶
- 「3.」で CONFIG_DB と FRR が乖離している場合:
sudo systemctl restart bgpで再生成。これでも反映されないならbgpcfgdテンプレ (/usr/share/sonic/templates/bgpd/) を確認 - AS / router-id を修正する場合:
sonic-cfggen -j /etc/sonic/config_db.jsonでの import 後config save -y→config reload -y - BFD で flap している場合:
BFD_SESSION_TABLE(APPL_DB)で session 状態を確認し、BFD timer を緩める
関連ページ¶
- ../../topics/02-bgp/operations.md
- ../../topics/02-bgp/concept.md
- ../cli/config-bgp.md
- ../cli/show-bgp.md
- ../config-db/bgp-neighbor.md
引用元¶
-
sonic-net/sonic-frr @ 799f47f — bgpd FSM ↩
-
sonic-net/sonic-swss @ 4305596 — bfdorch / fpmsyncd ↩
-
sonic-net/sonic-utilities @ 39732bceb — show bgp 実装 ↩