在代理後面使用 Supermicro IPMI?
這是一個帶有 X8DT3 主機板的 SuperMicro 伺服器,其中包含一個板載 IPMI BMC。在這種情況下,BMC 是Winbond WPCM450 )。我相信很多戴爾伺服器都使用這種類似的 BMC 模型。
IPMI 的一個常見做法是將其隔離到一個私有的、不可路由的網路。在我們的例子中,所有 IPMI 卡都插入到 192.168.1.0/24 的私有管理 LAN,該 LAN 沒有通往外部世界的路由。如果我將筆記型電腦插入 192.168.1.0/24 網路,我可以驗證所有 IPMI 功能是否按預期工作,包括遠端控制台。
我需要通過某種加密連接從不同的網路訪問所有 IPMI 功能。
我嘗試了 SSH 埠轉發。這適用於一些伺服器,但是,我們有近 100 台這樣的伺服器,維護 SSH 客戶端配置以在 100 台伺服器上轉發 6 個埠是不切實際的。
所以我想我會嘗試一個SOCKS 代理。這可行,但遠端控制台應用程序似乎不遵守我的系統範圍代理設置。
- 我設置了一個 SOCKS 代理。詳細日誌記錄允許我查看網路活動,以及是否正在轉發埠。
ssh -v -D 3333 stefanl@gateway.example.org
- 我將我的系統配置為使用 SOCKS 代理。我確認 Java 正在使用 SOCKS 代理設置。
- SOCKS 代理正在工作。我使用我的網路瀏覽器通過http://192.168.1.100/連接到 BMC 。我可以登錄、查看伺服器執行狀況、打開或關閉機器等。由於啟用了 SSH 詳細日誌記錄,我可以看到進度。
這就是棘手的地方:
- 我點擊“啟動控制台”按鈕,該按鈕下載一個名為
jviewer.jnlp
. JNLP 文件使用 Java Web Start 打開。- 將打開一個 Java 視窗。標題欄在標題欄中顯示“重定向查看器”。有“影片”“鍵盤”“滑鼠”等菜單。這證實了Java能夠通過代理下載應用程序,並啟動應用程序。
- 60 秒後,應用程序超時並簡單地說“打開影片套接字時出錯”。這是一個截圖。如果這可行,我會看到一個 VNC 樣式的視窗。我的 SSH 日誌顯示沒有連接到埠 5900/5901 的嘗試。這表明 Java 應用程序啟動了 VNC 應用程序,但 VNC 應用程序忽略了系統範圍的代理設置,因此無法連接到遠端主機。
Java 似乎服從我的系統範圍代理設置,但這個 VNC 應用程序似乎忽略了它。
我有什麼辦法可以強制這個 VNC 應用程序使用我的系統範圍的代理設置?
聽起來VPN實際上可能是您最好的選擇。在路由器上有一個 ACL,以便唯一的非本地流量必須遍歷 VPN,您就完成了。非常簡單、安全且易於管理。
我發現最好不要為此使用 socks 代理,而是轉發 localhost IP 上所需的所有埠。為了規避任何現有服務,我使用了與 127.0.0.1 不同的 IP。假設您選擇了 127.0.0.2,並且代理後面的伺服器是 192.168.1.1,這是要使用的 ssh 命令:
ssh user@proxy-server -L127.0.0.2:443:192.168.1.1:443 -L127.0.0.2:5900:192.168.1.1:5900 -L127.0.0.2:5901:192.168.1.1:5901 -L127 .0.0.2:5120:192.168.1.1:5120 -L127.0.0.2:5123:192.168.1.1:5123 -C
然後你可以瀏覽https://127.0.0.2並像往常一樣使用 KVM。
轉發的 TCP 埠是 5900 和 5901 用於控制和影片,5120 用於虛擬 CD 和 5123 用於虛擬磁片(我沒有測試後兩者)。添加了 -C 用於壓縮,雖然我不知道發送的任何內容是否適合壓縮。
另一種在 linux 上更舒適(理論上性能更好)的方法是使用sshuttle,它使用 iptables 和代理伺服器上的 python 解釋器通過 ssh 透明地轉發所有 TCP 連接。
sshuttle -r user@proxy-server 192.168.1.1
提示: sshuttle 被打包在 Debian 中。
我還不能轉發的是 UDP 埠 623,它可以用於 ipmitool,一個用於 IPMI 的 CLI 連接。有 幾個關於這方面的 教程,但沒有一個適合我。無論如何,Java KVM 已經足夠好了。