目錄

BMC 相關了解

BMC (Board Management Controller)

在 Wiki 不會有專門 BMC 的頁面,他會包含在 IPMI 架構裡面維基百科介紹。

IPMI Wiki
IPMI Wiki

上圖左側是與主機溝通網路介面

  1. LPC(Low Pin Count)匯流排:BMC 與主機南橋晶片或 Super I/O 晶片的高速低針腳通道。作業系統(OS)開機後,如果安裝了 ipmitool 或 Dell OMSA 這類本機工具,就是透過這條通道直接與 BMC 交換資訊(如 KCS 介面)。
  • LPC(Low Pin Count)匯流排:BMC 與主機南橋晶片或 Super I/O 晶片的高速低針腳通道。
    • 像是你在伺服器上面用 ipmi 查詢伺服器資訊,其實是使用 KCS
    • KCS 的全名是 Keyboard Controller Style(鍵盤控制器風格介面)。在早期 PC 架構中,主機板上負責處理鍵盤訊號的是一顆專用微控制器(著名的 Intel 8042 鍵盤控制器)。CPU 是透過兩組特定的 I/O 記憶體位址(通常是 0xCA2、0xCA3 這類暫存器)去跟鍵盤晶片溝通資料與狀態。
    • IPMI 規範制定時,為了讓 CPU/作業系統能夠與主機板上的 BMC 溝通,工程師決定不要重新發明輪子。BMC 就在硬體暫存器層級「偽裝/模仿」成傳統 8042 鍵盤控制器的暫存器讀寫行為(包含 Status Register、Data Register 等)。
  • 遠端透過網路,如同圖,NIC 是透過 SMBus 傳輸到 BMC 上面。
    • 由於 SMBus 速度太慢(只有 100 kHz),無法支撐現代流暢的 HTML5 遠端畫面(KVM)與大檔案掛載,現在伺服器已全面轉用 NC-SI(Network Controller Sideband Interface,基於 RMII 協定 (L1 協定) ,速度達 100 Mbps),但架構本質同樣是透過這條 Sideband 旁路通道直通 BMC。

右側則是 BMC 監控硬體

  • 專屬訊號線:BMC 用來直接讀取機殼按鍵(Power/Reset Switch)、控制狀態燈號(Power/UID LED)、或向南橋發送電源控制信號(開機、關機、重開機)。各廠商(OEM)也會透過這條路線實作自家客製化的管理訊號。
  • I2C / IPMB: 作用:BMC 的感測器數據收集網。透過低成本的 I2C 雙線架構,BMC 能週期性地輪詢並監控硬體監控晶片(HW Monitor,讀取風扇轉速、溫度)、電源供應器(PSU 狀態與耗電)、記憶體模組(DIMM SPD/溫度)、晶片組以及擴充插槽。

最下側是:

  • Switching Logic(多工切換邏輯):負責切換序列埠(COM Port)的走向。
    • 本地使用:實體機殼後的序列埠(Serial Port Connector)可以直接連接到主機板上的 Super I/O。
    • 遠端管理(Serial-Over-LAN, SOL):當管理員在遠端使用 ipmitool sol activate 時,切換邏輯會將 Super I/O 的序列輸出重新導向至 BMC 的序列埠,再由 BMC 將文字串流打包成網路封包傳送給遠端終端機。

IPMI 就是為了在 Server 關機的時候管理伺服器,BMC 可以:

  • 遠端強制開機、關機、冷開機(Hard Reset)、重新開機。
  • 即時監控 CPU/主機板溫度、風扇轉速、各路電源電壓、機殼開啟偵測(Intrusion Detection)。
  • KVM over IP:在遠端瀏覽器直接看到螢幕輸出,並接管鍵盤與滑鼠,可以一路從 BIOS/UEFI 畫面設定到 OS 登入。
  • Virtual Media(虛擬媒體掛載):將遠端電腦上的 ISO 檔模擬為本機 USB 或光碟機,即使伺服器是空機也能遠端安裝作業系統。

IPMI 只規範了訊息格式、通訊協定與最基礎的感測/電源指令集。因為規範只保證「基本相容」,各家廠商會在 BMC 上運行專屬韌體,並加入各自的圖形化網頁介面(Web GUI)、安全機制以及高階管理功能:

  1. Dell: iDRAC (Integrated Dell Remote Access Controller)
  2. HPE: iLO (Integrated Lights-Out)
  3. Lenovo: XCC (XClarity Controller)
  4. Supermicro: Supermicro IPMI (多基於 ASPEED 晶片)
  5. 開源 OpemBMC

我們一般可以透過 ipmitool,這是最通用的標準工具,Debian 與 Ubuntu 官方軟體庫本來就有收錄,任何人都能直接安裝。

使用 ipmitool 遠端連線,是直接與伺服器上的 iDRAC(BMC)專用網路孔 溝通,而不是走 Ubuntu 系統的網路。

  1. 接線:Dell 伺服器背後通常有一個標示為 wrench 圖示或 iDRAC 的獨立網孔,確認網線已插上並設定好 IP。
  2. 開啟 IPMI over LAN。
  3. 使用 IPMI 2.0 RMCP+ 加密傳輸協定(管理現代伺服器必填,若用舊版 -I lan 會因安全等級不足連線失敗)。

而同樣各家廠商也有自己的套件庫,像是 Dell 有:

  1. Dell RACADM(Remote Access Controller Admin Tool):racadm 是 Dell 專為 iDRAC 打造的命令列工具,支援的功能遠比標準 ipmitool 多(例如直接升級 BIOS、設定 RAID 陣列、匯出/匯入主機 XML 設定檔)。
    1. 可以在 Dell 支援網站(Support Site)輸入伺服器型號(如 PowerEdge R740/R750),搜尋 DRAC Tools for Linux 下載 .tar.gz 壓縮包。
  2. Dell OpenManage Server Administrator (OMSA): 如果你的 Ubuntu 是安裝在 Dell 伺服器主機上,想要在作業系統內全面監控硬體狀態、RAID 陣列狀況,Dell 官方有維護給 Debian/Ubuntu 的專屬 APT Repository,你可以直接設定好 APT Key 跟來源清單直接透過 apt install srvadmin-all 安裝。

Dell OSMA

實際上 OSMA 要被放棄了,因為 OMSA 在本機作業系統開啟 Web 介面(Port 1311),這套老舊的網頁架構多次被爆出權限提升(Privilege Escalation)、XSS 或未授權存取漏洞,增加被駭客入侵的主機攻擊面。

請全面改用:

  • iDRAC(完全頻外管理):所有硬體監控、開關機、RAID 設定全部走獨立專用的 iDRAC 網路孔與 Redfish API,作業系統內完全零負擔。
  • iSM(iDRAC Service Module,極輕量代理模組):
    • 它是只有幾 MB 的極輕量背景小程式,安裝在 OS 內只做一件事:充當 OS 與 iDRAC 之間的輕量通訊橋樑(例如把 OS 的 IP 位址、主機名稱、OS 當機藍屏日誌同步傳給 iDRAC)。

以前需要 OMSA 是因為:

  1. Dell 的 PERC 磁碟陣列卡是插在主機板 PCIe 插槽上的獨立擴充卡。早期這張卡只對主機的 PCIe 匯流排有連線,根本沒有拉線給 BMC。
  2. iDRAC 完全不知道主機插了幾顆硬碟、哪顆硬碟亮黃燈壞掉了、或者 RAID 5 是不是處於 Degraded 降級狀態。
  3. OMSA 安裝在 Windows 或 Linux 內部,透過 OS 的 RAID 卡驅動程式去問 PERC 卡:「現在硬碟狀況如何?能不能重建(Rebuild)陣列?」,管理員才能在作業系統裡面看到硬碟壞了沒。
  4. 早期 iDRAC 是獨立於主機外的硬體(Out-of-Band),這帶來一個副作用:它對作業系統內部一無所知。
    1. OMSA 扮演了「情報員」:它常駐在 OS 裡,負責把系統內部的狀態打包傳給網管人員。

如今從 iDRAC 7/8/9(約 2012 年後至今)開始,硬體架構發生了徹底的革命:

  • BMC 變成完整的小電腦:現代 iDRAC 搭載雙核心 ARM 處理器、上 GB 的 RAM 與專屬 eMMC 快閃記憶體,本身就是一台高效能的嵌入式 Linux 伺服器,直接跑 HTML5 網頁跟 Redfish API 毫無壓力。
  • 硬體打通通道:主機板架構全面升級,RAID 卡、NVMe 擴充背板全部都有專屬的 Sideband 匯流排直通 iDRAC。iDRAC 免進系統就能直接管理每一顆實體硬碟與虛擬磁碟。
  • Dell 把 OMSA 體積龐大、容易出漏洞的 Web 介面與管理程式全部拔除,只留下幾 MB 的 iSM(iDRAC Service Module),單純用來在 OS 與 iDRAC 之間同步主機名稱、OS 網路 IP 與當機日誌。

BMC 上面的孔

  1. Dedicated Management LAN Port(BMC 專用獨立網孔),這是純粹屬於 BMC 自己的獨立網路通道,完全不經過伺服器的主 CPU 與主晶片組。
    1. 機殼外 RJ-45 插座 $\to$ 實體隔離變壓器(Magnetics) $\to$ 專用以太網實體層收發晶片(Dedicated PHY) $\to$ MII / RMII / RGMII 介面 $\to$ BMC 晶片內部整合的 MAC 控制器。
  2. Serial Port / Console Port
    1. 機殼外 DB9 / RJ-45 插座 $\to$ RS-232 電平轉換晶片(如 MAX3232,負責將 $\pm 12\text{V}$ 轉換為主機板能用的 $3.3\text{V}$ TTL 電平) $\to$ Switching Logic(多工切換器 / MUX) $\to$ BMC 的 UART 硬體控制器
    2. 這邊走 UART/RS-232C
  3. Direct Access USB Port(前置管理用 USB / iDRAC Direct 孔): 此孔會將 BMC 模擬成一個多功能 USB 週邊設備。
    1. 前面板 USB-A 或 Type-C 插座 $\to$ 靜電防護 IC(ESD Protection) $\to$ USB 差分訊號線(D+ / D-) $\to$ BMC 內部的 USB Device 控制器。
  4. Share LOM /NC-SI Port: 此孔平時是給伺服器作業系統(Ubuntu、Windows 等)上網用的,但內部有「旁路側枝(Sideband)」偷分流給 BMC。

Redfish

如果說 IPMI 是 1990 年代的老舊二進位電報,那麼 Redfish 就是現代網路通用的 RESTful API(像呼叫一般 Web API 一樣)。

它是由分散式管理任務組(DMTF)聯合 Intel、Dell、HPE 等大廠共同制定的開放標準,目的是讓大型資料中心可以用寫 Web 程式(如 Python、Ansible、cURL)的方式來大規模管理成千上萬台伺服器。

  • IPMI 2.0 使用老舊的 RMCP+ 協定,存在著名的雜湊外洩漏洞(Cipher 0 漏洞),密碼雜湊值容易被離線暴力破解。
  • Redfish 直接採用標準的 HTTPS(TLS 加密),安全性與一般銀行網頁同等級。