跳轉到

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(列出)。常見模組 fwclustervm
  • Scalable Platform(Maestro / ElasticXL):把 fw 換成 g_fw(對整組)。

快速版:查封包為什麼被丟

fw ctl zdebug + drop      # 即時印出「幾乎每個被丟封包的原因」
#   ... 重現問題 ...
fw ctl zdebug - drop      # 或 Ctrl+C 停

官方 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