When working with Supermicro servers utilizing Winbond WPCM450 BMC (like X8DT3 motherboards), the Java-based remote console consists of two distinct components:
- The JNLP launcher (proxy-aware)
- The native VNC renderer (non-proxy-aware)
The connection fails because:
1. JNLP successfully downloads through SOCKS proxy (port 3333 in our case)
2. Java Web Start executes the viewer
3. Native VNC component attempts direct connection to BMC (192.168.1.100:5900)
4. Corporate firewall blocks direct connection
5. 60-second timeout occurs
Option 1: SSH Tunnel with Dynamic Port Forwarding
For individual connections:
ssh -N -L 5900:192.168.1.100:5900 -L 5901:192.168.1.100:5901 \
-L 623:192.168.1.100:623 user@jump_host
Option 2: Automated Proxy Configuration for Bulk Management
Create a wrapper script:
#!/bin/bash
# ipmi_proxy_wrapper.sh
SOCKS_PORT=3333
TARGET_IP=$1
ssh -f -N -D $SOCKS_PORT user@proxy_gateway
export SOCKS_SERVER=localhost:$SOCKS_PORT
/usr/bin/javaws http://$TARGET_IP/jviewer.jnlp &
For environments requiring strict proxy adherence:
sudo apt install tsocks
cat > /etc/tsocks.conf <
Using Ansible for Mass Configuration:
- name: Configure IPMI SOCKS proxy
hosts: ipmi_servers
tasks:
- name: Create persistent SSH tunnels
ansible.builtin.command: |
ssh -f -N -D {{ socks_port }} \
-o ExitOnForwardFailure=yes \
-o ServerAliveInterval=60 \
user@{{ proxy_host }}
To verify proxy connectivity:
# Check Java proxy settings
java -DsocksProxyHost=localhost -DsocksProxyPort=3333 \
-Dnet.spy.log.ProxyImpl=true myApp
# Network tracing
strace -f -e trace=network -o ipmi_trace.log javaws jviewer.jnlp
For enterprise networks, consider deploying a dedicated IPMI proxy service that handles the protocol translation between your corporate network and the management VLAN.
When managing Supermicro servers with WPCM450-based BMCs in isolated management networks (e.g., 192.168.1.0/24), accessing the Java-based Remote Console through SOCKS proxies presents unique challenges. While basic IPMI web interface functions work fine through the proxy, the JNLP-launched console app fails to establish video connections.
The root issue lies in how Java Web Start handles nested network connections:
1. JNLP file download → Success (via SOCKS proxy)
2. Java Web Start execution → Success
3. VNC socket connection (ports 5900/5901) → Fails (bypasses proxy)
Option 1: SSH Tunnel with Dynamic Port Forwarding
# Establish SOCKS proxy on port 3333
ssh -N -v -D 3333 user@jumpbox.example.com
# Configure Java to use SOCKS proxy
java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=3333 -jar jviewer.jnlp
Option 2: Forced SOCKS Proxy at System Level
# On Linux systems:
export _JAVA_OPTIONS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=3333"
# Windows registry modification:
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment]
"JavaRuntime"="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=3333"
VPN-Based Solution: Create a site-to-site VPN tunnel to the management network instead of proxy tunneling.
IPMI Dedicated Gateway: Set up a reverse proxy server with:
socat TCP-LISTEN:443,fork SOCKS4A:127.0.0.1:192.168.1.100:443,socksport=3333
- Verify SOCKS connectivity with
curl --socks5 127.0.0.1:3333 http://192.168.1.100
- Check Java proxy settings with
System.getProperty("socksProxyHost")
- Monitor network traffic with
tcpdump -i any port 5900 or port 5901
For managing 100+ servers, consider:
# Batch SSH tunnel creation
for i in {1..100}; do
ssh -N -f -L $((5900+i)):192.168.1.$i:5900 jumpbox &
done
# Or using Ansible:
- name: Create IPMI tunnels
local_action:
module: shell
cmd: "ssh -N -f -L {{ 5900 + inventory_hostname|int }}:{{ ipmi_address }}:5900 jumpbox"