Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux OpenVPN 服務異常退出排查實戰:Too many open files 與 CRL 驗證 Bug 解決紀錄

編輯:關於 Linux

OpenVPN 是廣泛部署的開源 VPN 方案,但在高併發場景下常因檔案描述符耗盡、日誌級別過高、記憶體不足或惡意攻擊導致進程異常退出。本文記錄一次完整的生產環境排查過程,從現象觀察、假設驗證到最終根因定位與修復。

OpenVPN 錯誤日誌截圖

現象與初步假設

  • 服務啟動數分鐘後自動退出
  • 錯誤日誌關鍵字:Too many open files (errno=24)、CRL: cannot read: crl.pem
  • 初步假設四大方向:記憶體不足、I/O 過高、檔案描述符限制、惡意攻擊

分步驟驗證與應對

步驟動作結果
1 記憶體 2G → 4G 問題依舊
2 日誌級別 DEBUG → ERROR 問題依舊
3 調整 ulimit -SHn 65535 短暫穩定,兩天後再次退出,同樣 Too many open files
4 封鎖異常 IP (58.244.191.51) 攻擊緩解,但核心問題未解

根因分析:CRL 驗證機制導致檔案描述符洩漏

  • 每次客戶端連線驗證時,OpenVPN 會開啟 crl.pem (Certificate Revocation List) 檢查撤銷憑證
  • 800+ 客戶端並發連線,若驗證後未正確關閉檔案控制代碼,極快耗盡 65535 限制
  • 推測為 OpenVPN 版本 Bug:CRL 驗證路徑存在檔案描述符洩漏

最終解決方案

# 修改 server.conf,停用 CRL 驗證
# 註解或移除以下行
# crl-verify /usr/local/cine/etc/keys/crl.pem

重啟 OpenVPN 後持續穩定運行,無再退出。

後續建議與監控

  • 升級 OpenVPN 至最新穩定版,確認是否修復 CRL 洩漏 Bug
  • 若業務需求必須啟用 CRL,可考慮:
    • 定期重啟服務 (cron 任務)
    • 使用 systemd LimitNOFILE=infinity 並監控 lsof -p 趨勢
    • 改用 OCSP Stapling 替代 CRL 檔案驗證
  • 持續監控 /var/log/openvpn.log 關鍵字 Too many open files

此案例展示:系統調優 (ulimit) 僅能緩解症狀,唯有深入日誌分析、鎖定具體程式碼路徑 (CRL 驗證),才能根治核心問題。

Copyright © Windows教程網 All Rights Reserved