Runbook: ACL ルールが効かない / counter が増えない¶
実行前提
ACL の追加 / 削除は data plane の hot path を書き換えるため、誤った deny ルールで管理 SSH が落ちる事故が起こりやすい。事前に sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.bak.$(date +%s) を必ず取り、可能なら management interface に対する permit ip any any を最後に並べる構成にしておく。最悪 console から config reload -y -f で backup を戻す。
症状¶
想定原因(優先度順)¶
- stage / type の不一致:
INGRESSACL を outbound に bind 等 - bind 先 interface 誤り: PORT ではなく PORTCHANNEL に bind すべき場面
- rule priority の競合: 上位 priority に permit があり、対象が先に抜ける
PACKET_ACTIONの typo:FORWARD/DROPの大小区別- TCAM 不足: ASIC リソース不足で program 失敗 → sai-table-full.md
切り分け手順¶
flowchart TD
A[ACL rule の counter が 0] --> B{CONFIG_DB に rule あり?}
B -- No --> B1[ACL_RULE / ACL_TABLE 投入]
B -- Yes --> C{ASIC_DB に ENTRY 反映?}
C -- No --> C1[orchagent / aclorch ログ確認]
C -- Yes --> D{stage / bind port が正しい?}
D -- No --> D1[ACL_TABLE.ports / stage を見直し]
D -- Yes --> E{counter polling 有効?}
E -- No --> E1[FLEX_COUNTER で ACL を enable]
E -- Yes --> F[CRM ACL_ENTRY / ACL_COUNTER 枯渇を確認]
確認コマンド¶
1. CONFIG_DB の table / rule¶
sonic-db-cli CONFIG_DB keys "ACL_TABLE|*"
sonic-db-cli CONFIG_DB keys "ACL_RULE|*"
sonic-db-cli CONFIG_DB hgetall "ACL_TABLE|<table>"
- 期待:
stage=ingress/type=L3/ports=Ethernet0,...
2. ASIC_DB への反映¶
3. counter¶
4. orchagent ログ¶
5. CRM¶
対処方法¶
- table 再作成:
sudo config acl remove table <name> && sudo config acl add table <name> L3 -p Ethernet0,Ethernet1 -s ingress - rule JSON で適用:
sudo acl-loader update full rules.json - TCAM 不足の場合 priority を整理し低優先 deny を集約
確認¶
対処後の正常化を以下で裏取りする。
- 症状解消: 「症状」節で挙げた事象 (counter / log / state) が回復していること
- 再発監視: 数分〜数十分の間隔で同コマンドを再実行し、値がフラップしていないこと
- 副作用なし: 関連サブシステム (syslog /
show interfaces counters errors/show ip bgp summary等) に新規 error が出ていないこと - 永続化:
sudo config save -y済みでconfig_db.jsonに変更が反映されていること (恒久対処の場合)
短時間で再発する場合は「想定原因」リストの次候補に進む。
関連ページ¶
引用元¶
-
sonic-net/sonic-swss @ 4305596 — orchagent/aclorch.cpp ↩
-
sonic-net/sonic-utilities @ 39732bceb — acl_loader ↩