Kernel Debug(fw ctl debug / kdebug / zdebug)¶
當 Log 與
fw monitor都不夠用,得看防火牆核心到底在想什麼時,就要做 kernel debug。三個指令名字很像、用途不同 —— 搞懂差別才不會在正式環境闖禍。
三兄弟的差別¶
| 指令 | 本質 | 用途 |
|---|---|---|
fw ctl debug |
設定「要記哪些 module / flag」進 kernel debug buffer | 控制記什麼;-buf <KB> 設緩衝區、fw ctl debug 0 清空回預設 |
fw ctl kdebug |
把 buffer 的訊息讀出來 | -f 即時輸出(導向檔案),適合正式環境長時間蒐集 |
fw ctl zdebug |
懶人包:≈ debug -buf 1024 + 設 flag + kdebug -f + 結束自動 debug 0 |
快速即時看;但 buffer 小(1024KB)易掉訊息,正式環境不建議 |
口訣
正式環境:fw ctl debug(調大 buffer)+ fw ctl kdebug -f 導檔,自己控制。
快速臨時:fw ctl zdebug + <flag>,量小、抓完即關。
標準流程(正式環境)¶
fw ctl debug 0 # 1. 先清空所有 debug 設定
fw ctl debug -buf 32768 # 2. 配置大一點的 buffer(每 instance,最大 32768 KB)
fw ctl debug -m fw + conn drop # 3. 對 fw 模組開 conn / drop flag
fw ctl kdebug -T -f > /var/log/kdbg.txt # 4. 即時導出(-T 加時間戳);Ctrl+C 停
fw ctl debug 0 # 5. 收工務必重置
- 看有哪些模組 / flag:
fw ctl debug -m(列出)。常見模組fw、cluster、vm。 - Scalable Platform(Maestro / ElasticXL):把
fw換成g_fw(對整組)。
快速版:查封包為什麼被丟¶
官方 Performance Tuning Guide 的等價寫法:fw ctl debug -m fw + drop(Scalable Platform 用 g_fw ctl debug -m fw + drop)。
Daemon(user-space)的 debug¶
Kernel 之外,各 user-space daemon 的 debug 輸出是 .elg 檔,放在 $FWDIR/log:
| 檔案 | 對應 |
|---|---|
fwd.elg |
fwd daemon(Log 傳輸等) |
cpd.elg |
cpd daemon(SIC / policy 推送等) |
fwm.elg |
fwm(Management) |
vpnd.elg / ike.elg / ikev2.xmll |
VPN(見 VPN 排錯) |
pdpd.elg / pdp 相關 |
Identity Awareness PDP |
⚠️ 安全守則¶
kernel debug 會吃 CPU
- 屬高負載操作,正式環境建議經 serial console 操作(避免 SSH 斷線時 debug 還開著)。
- 開大流量 flag(如
all)前先想清楚,量太大可能讓 Gateway 變慢甚至影響服務。 - 收工一定
fw ctl debug 0—— 忘了關會持續耗效能。 - 叢集 / Maestro 每台成員都要做一樣的設定才看得全。
小結¶
debug=設定記什麼、kdebug=讀出來、zdebug=懶人包(buffer 小、僅臨時用)。- 正式環境:
debug -buf 32768+kdebug -T -f導檔,結束fw ctl debug 0。 - 查 drop 原因最快:
fw ctl zdebug + drop。 - daemon 問題看
$FWDIR/log/*.elg;Maestro 用g_fw。