设置可从具有严格防火墙的网络访问的 vCenter 6.0 站点

设置可从具有严格防火墙的网络访问的 vCenter 6.0 站点

如何设置一个 vCenter (VCSA) 站点,允许从具有严格出口防火墙(即仅 HTTP/HTTPS,不打开高编号端口)的网络进行外部访问?虽然基本 Web 客户端可以运行,但当端口 9443 被阻止/过滤时,Web 控制台会中断。

我对这个问题有一个答案,我想公开保存,以防其他人遇到这个问题(见下文)。我也愿意接受对我的解决方案和改进建议的批评。

答案1

我发现最简单的方法是对 webclient 配置进行轻微更改,然后使用 nginx 进行反向代理。

首先,需要更改 VCSA 上的一个设置。目前,打开 webconsole 的链接指向端口 9443。我们需要将其设置为 443 以上,因为我们只能通过 HTTPS 进行访问。此设置实际上不会更改 webconsole 服务所处的端口 - 它只会更改 vsphere webclient 生成的链接:

  1. 在 中/etc/vmware/vsphere-client/webclient.properties,将 的设置更改html.console.port为 443。

  2. 重新启动 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 某人(或者可能是我未来的自己)。

相关内容