在代理后面使用 Supermicro IPMI?

在代理后面使用 Supermicro IPMI?

这是一台 SuperMicro 服务器,配有 X8DT3 主板,其中包含板载 IPMI BMC。在这种情况下,BMC 是华邦WPCM450)我相信很多Dell的服务器都采用这种类似的BMC模型。

IPMI 的常见做法是将其隔离到私有的、不可路由的网络中。在我们的案例中,所有 IPMI 卡都插入 192.168.1.0/24 的私有管理 LAN,该 LAN 没有通向外部世界的路由。如果我将笔记本电脑插入 192.168.1.0/24 网络,我可以验证所有 IPMI 功能(包括远程控制台)是否按预期工作。

我需要通过某种加密连接从不同的网络访问所有 IPMI 功能。

我尝试了 SSH 端口转发。对于一些服务器来说,这很好用,但是,我们有近 100 台这样的服务器,维护一个 SSH 客户端配置来转发 100 台服务器上的 6 个端口是不切实际的。

所以我想我会尝试SOCKS代理。这可行,但似乎远程控制台应用程序不遵守我的系统范围的代理设置。

  1. 我设置了一个 SOCKS 代理。详细日志记录使我能够查看网络活动以及端口是否被转发。

    ssh -v -D 3333 [email protected]
    
  2. 我将系统配置为使用 SOCKS 代理。我确认 Java 正在使用 SOCKS 代理设置。

  3. SOCKS 代理正在运行。我连接到 BMChttp://192.168.1.100/使用我的网络浏览器。我可以登录、查看服务器运行状况、打开或关闭机器等。由于启用了 SSH 详细日志记录,我可以看到进度。

这就是事情变得棘手的地方:

  1. 我点击“启动控制台”按钮,下载一个名为的文件jviewer.jnlpJNLP 文件使用 Java Web Start 打开。

  2. Java 窗口打开。标题栏显示“重定向查看器”。其中有“视频”、“键盘”、“鼠标”等菜单。这确认 Java 能够通过代理下载应用程序并启动该应用程序。

  3. 60 秒后,应用程序超时并显示“打开视频套接字时出错”。以下是截屏。如果此方法有效,我将看到 VNC 样式的窗口。我的 SSH 日志显示没有尝试连接端口 5900/5901。这表明 Java 应用程序启动了 VNC 应用程序,但 VNC 应用程序忽略了系统范围的代理设置,因此无法连接到远程主机。

Java 似乎遵循我的系统范围的代理设置,但这个 VNC 应用程序似乎忽略了它。

有什么方法可以强制此 VNC 应用程序使用我的系统范围的代理设置?

答案1

听起来 VPN 可能是你最好的选择。在路由器上设置 ACL,这样只有非本地流量才需要穿越 VPN,这样就大功告成了。非常简单、安全,也易于管理。

答案2

我发现最好不要为此使用 socks 代理,而是在本地主机 IP 上转发所有必要的端口。为了避开任何现有服务,我使用了不同于 127.0.0.1 的 IP。假设您选择 127.0.0.2,并且代理后面的服务器是 192.168.1.1,则可以使用以下 ssh 命令:

ssh 用户@代理服务器 -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 上的方法是使用穿梭巴士它使用代理服务器上的 iptables 和 python 解释器通过 ssh 透明地转发所有 TCP 连接。

sshuttle -r 用户@代理服务器 192.168.1.1

提示:sshuttle 正在 Debian 中打包。

我暂时无法转发的是 UDP 端口 623,它可用于 ipmitool(IPMI 的 CLI 连接)。那里 一些有这方面的教程,但都不太适合我。不管怎么说,Java KVM 已经足够好了。

答案3

尝试袜子,它应该让你通过设置 LD_PRELOAD 来通过 SOCKS 代理运行任何进程,这应该在所有子进程中起作用,请参阅例如用法。当然,如果您使用 ssh 创建 SOCKS 代理,您仍然会遇到 UDP 问题,但这应该可以解决子进程问题。

答案4

我使用 SSH 连接从外部位置访问我家的 Supermciro 服务器的 IPMI。TCP 端口转发非常简单,主要技巧是通过 SSH 转发 UDP。我为此使用了 socat。

我的设置,作为示例:


  1. 笔记本电脑。我使用的是安装了 Oracle Java 的 MacOS 系统
  2. 网关。用于 SSH 端口转发的 Linux 服务器。它应该能够通过网络访问 IPMI 接口。
  3. 具有 IPMI 的服务器。IP 地址为 192.0.2.2

启动从笔记本电脑到网关的 ssh 连接,转发所有必需的端口(80、443、623、5900)以及一个用于 UDP 转发的额外端口。我使用的是 1623。需要使用 Sudo 才能绑定到特权端口(<1024)

user@laptop ~ $ sudo ssh user@gateway \
-L 127.0.0.1:80:192.0.2.2:80 \
-L 127.0.0.1:623:192.0.2.2:623 \
-L 127.0.0.1:5900:192.0.2.2:5900 \
-L 127.0.0.1:443:192.0.2.2:443 \
-L 127.0.0.1:1623:127.0.0.1:1623

现在让我们将 IPMI UDP 流量包装到网关上的 TCP 套接字中。

user@gateway ~ $ socat tcp4-listen:1623,reuseaddr,fork udp:192.0.2.2:623

最后一步是在笔记本电脑上再次将 TCP 转换为 UDP。再次需要 Sudo

user@laptop ~ $ sudo socat udp4-recvfrom:623,reuseaddr,fork tcp:localhost:1623

最后,您可以从 Supermicro IPMI 应用程序连接到本地主机,或者直接在浏览器中打开它并下载 KVM 应用程序。

带有 IP-KVM 和远程媒体的完整 IPMI 通过单个 SSH 连接转发。

相关内容