如何设置一个 vCenter (VCSA) 站点,允许从具有严格出口防火墙(即仅 HTTP/HTTPS,不打开高编号端口)的网络进行外部访问?虽然基本 Web 客户端可以运行,但当端口 9443 被阻止/过滤时,Web 控制台会中断。
我对这个问题有一个答案,我想公开保存,以防其他人遇到这个问题(见下文)。我也愿意接受对我的解决方案和改进建议的批评。
答案1
我发现最简单的方法是对 webclient 配置进行轻微更改,然后使用 nginx 进行反向代理。
首先,需要更改 VCSA 上的一个设置。目前,打开 webconsole 的链接指向端口 9443。我们需要将其设置为 443 以上,因为我们只能通过 HTTPS 进行访问。此设置实际上不会更改 webconsole 服务所处的端口 - 它只会更改 vsphere webclient 生成的链接:
在 中
/etc/vmware/vsphere-client/webclient.properties
,将 的设置更改html.console.port
为 443。重新启动 vsphere-client 服务(这通常需要一段时间才能重新加载)。如果您需要使用更改 SSL 证书
/usr/lib/vmware-vmca/bin/certificate-manager
(向用户呈现的是机器证书),请立即执行此操作,因为这无论如何都需要重新启动服务。
然后,剩下的工作在 http 服务器框上完成。我使用了 Debian 稳定版和 nginx。如果你使用 Debian 稳定版,请注意你应该使用 nginx 的版本向后移植。稳定存储库中的版本没有 websocket 插件。
事实证明,webconsole 中客户端和服务器之间的主要通信方法是设置为通过端口 443 连接的 websocket。使用反向代理,我们可以通过端口 443 将 webconsole 端点代理回机器。我使用的 nginx 配置如下所示:
# Redirect HTTP to HTTPS
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
# Main Server Configuration
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
# SSL Configuration
ssl_certificate /etc/ssl/fullchain.pem;
ssl_certificate_key /etc/ssl/privkey.pem;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_dhparam /etc/ssl/dhparam.pem;
# Doesn't really matter - everything is proxied
root /var/www/html;
index index.html;
server_name _;
# By default, proxy over 443 to vsphere webclient
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_verify off; # No need on isolated LAN
proxy_pass https://192.168.0.3; # vCSA IP Address
}
# Proxy webconsole websocket endpoint to port 9443
location /vsphere-client/webconsole/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://192.168.0.3:9443;
proxy_ssl_verify off;
# For websocket upgrade support
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
如果您随后浏览代理,则应该能够打开 webconsole 会话而无需访问高编号端口。如果有任何其他 vsphere web 功能需要访问,则可以以类似的方式处理它们(如果您找到它们,请发表评论!)。
HTH 某人(或者可能是我未来的自己)。