这是带有X8DT3主板的SuperMicro服务器,其中包含一个板载IPMI BMC。 在这种情况下,BMC是一个华邦WPCM450 )。 我相信很多戴尔服务器都使用这个类似的BMC模型。
IPMI的一个常见做法是将其隔离到一个私有的,不可路由的networking。 在我们的情况下,所有的IPMI卡都被插入一个192.168.1.0/24的专用pipe理局域网,这个局域网没有到外部的路由。 如果我将笔记本电脑插入192.168.1.0/24networking,则可以validation所有IPMIfunction是否按预期运行,包括远程控制台。
我需要通过某种encryption连接访问不同networking中的所有IPMIfunction。
我试过SSH端口转发。 这对于一些服务器来说工作正常,但是,我们有近100个这样的服务器,并且维护一个SSH客户端configuration来转发100个服务器上的6个端口是不切实际的。
所以我想我会尝试一个SOCKS代理 。 这工作,但似乎远程控制台应用程序不遵守我的系统范围的代理设置。
我设置了一个SOCKS代理。 详细日志logging允许我查看networking活动,以及是否正在转发端口。
ssh -v -D 3333 [email protected]
我configuration我的系统使用SOCKS代理。 我确认Java正在使用SOCKS代理设置。
SOCKS代理正在工作。 我使用我的浏览器连接到BMC的http://192.168.1.100/ 。 我可以login,查看服务器运行状况,打开或closures机器等。由于启用了详细日志loggingfunction,因此可以看到进度。
这里是棘手的地方:
我点击“Launch Console”button,下载一个名为jviewer.jnlp的文件。 使用Java Web Start打开JNLP文件 。
Java窗口打开。 标题栏在标题栏中显示“redirect查看器”。 有“video”,“键盘”,“鼠标”等菜单。这确认Java能够通过代理下载应用程序,并启动应用程序。
60秒后,应用程序超时,只是说“错误打开video套接字”。 这是一个截图 。 如果这工作,我会看到一个VNC风格的窗口。 我的SSH日志显示没有连接端口5900/5901的企图。 这表明Java应用程序启动了VNC应用程序,但VNC应用程序忽略了系统范围的代理设置,因此无法连接到远程主机。
Java似乎服从我的全系统代理设置,但是这个VNC应用似乎忽略了它。
有没有办法强制这个VNC应用程序使用我的全系统代理设置?
这听起来像一个VPN可能实际上是你最好的select。 在路由器上configuration一个ACL,以便唯一的非本地stream量必须遍历VPN,然后才能完成。 非常简单和安全以及易于pipe理。
我觉得最好不要使用socks代理,而是转发本地主机IP所需的所有端口。 为了避开任何现有的服务,我使用了不同于127.0.0.1的IP。 假设您select127.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控制和video,5120虚拟光盘和5123虚拟软盘(我没有testing后两个)。 增加了-C压缩,但我不知道是否有任何发送适合压缩。
另一种更舒适 (理论上性能更好)的方法是使用sshuttle ,它使用iptables和代理服务器上的python解释器,通过ssh透明地转发所有TCP连接。
sshuttle -r user @ proxy-server 192.168.1.1
提示:sshuttle正在打包在Debian中。
我还不能转发的是UDP端口623,它可以用于IPMI的CLI连接ipmitool。 有 几个关于这方面的教程,但没有一个为我工作。 无论如何,Java KVM就够了。
尝试tsocks ,它应该让你运行通过SOCKS代理的任何进程通过设置LD_PRELOAD应该在所有subprocess中工作,看到这个例子的用法。 当然,如果你使用ssh来创build一个SOCKS代理,你仍然会遇到UDP问题,但是这应该解决subprocess问题。