supermicro IPMI/BMC nginx proxy

需要安装一个openresty或者nginx, 版本大于1.15.10

编译安装参考http://www.kvm.la/1043.html , openresty二进制包版本较低没有更新, 建议编译安装一份.


首先把IPMI的IP丢进一个ip.list的文件里面, 一行一个IP.

cat list.sh
#/bin/bash
i=1000  #vnc start port
b=2000 #wsi start port

stream_vnc_map=/etc/nginx/stream.vnc.map.conf
stream_bmc_map=/etc/nginx/stream.bmc.map.conf
http_vnc_map=/etc/nginx/http.vnc.map.conf
http_bmc_map=/etc/nginx/http.bmc.map.conf

#清空配置
echo > $stream_bmc_map
echo > $stream_vnc_map
echo > $http_vnc_map
echo > $http_bmc_map

#给IP分配统一的端口
for IP in `cat ./ip.list`;
do
i=`expr $i + 1` ;
b=`expr $b + 1` ;
echo $i         $IP';' >> $stream_vnc_map
echo $b 	$IP';' >> $stream_bmc_map
echo $IP 	$i';' >>  $http_vnc_map
echo $IP        $b';' >>  $http_bmc_map
done

nginx -s reload


nginx配置文件部分, 建议用include引用.

stream字段下内容stream.conf

stream {
map $server_port $ipmivnc {  include stream.vnc.map.conf; }
map $server_port $ipmiws  {  include stream.bmc.map.conf; }
    server {
        listen 0.0.0.0:1000-1100 reuseport;
        proxy_connect_timeout 5s;
        proxy_timeout 20s;
        proxy_pass $ipmivnc:5900;
    }
    server {
        listen 2000-2100 reuseport;
        proxy_connect_timeout 5s;
        proxy_timeout 20s;
        proxy_pass $ipmiws:623;
    }
 }


http字段下的ipmi_proxy.conf

map $IPMIhost $ipmivnc { include http.vnc.map.conf;}
map $IPMIhost $ipmiws  { include http.bmc.map.conf;}
server {
    listen 80;
    listen 443 ssl;
    server_name  ~^(.*?)\.(.*?).XXX.XXX$ ;

     ssl_certificate ssl/server.crt;
     ssl_certificate_key ssl/server.key;
     include ssl.conf;

 access_log /var/log/nginx.bmc.log;

 if ( $http_host ~* "(.*?)\.bmc.(.*?)$" ) { set $IPMIhost $1; }

    location / {
        add_header X-Frame-Options SAMEORIGIN;
	proxy_set_header Accept-Encoding "";
	proxy_redirect 	$scheme://$IPMIhost/ /;
        proxy_store off;
    	proxy_read_timeout 300s;
	proxy_pass $scheme://$IPMIhost;
	proxy_set_header Host $host;
        proxy_buffering off;proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";


sub_filter '5900</' '$ipmivnc</';	# VNC port
sub_filter '623</'  '$ipmiws</';        #SuperMicro
sub_filter '7578</' '$ipmivnc</';       #AMI VNC port
sub_filter '5120</'  '$ipmiws</';	#AMI iso port

sub_filter '$IPMIhost</'  '$host</';
sub_filter '//$IPMIhost:'  '//$host:';	#filter jnlp  codebase
sub_filter_once off;
sub_filter_types  application/x-java-jnlp-file;
}
}


目前只测试了SuperMicro X9 X10系列, noVNC和JAVA IPMI等基础功能都可以正常使用.


准备工作: 

ip.list文件和list.sh文件放一个目录,也可以自己重新修改设定.

需要一个泛解析域名  *.bmc.XXX.XXX , nginx配置里面把XXX.XXX改成自己的域名.


当前只对vnc和RMCP端口做了处理, 其他的特殊端口没有做.

添加新评论 »