Назад | Перейти на главную страницу

Настройка сайта vCenter 6.0, доступного из сетей со строгим брандмауэром

Как я могу настроить сайт vCenter (VCSA), который разрешает внешний доступ из сетей со строгими выходными межсетевыми экранами (т. Е. Только HTTP / HTTPS, без открытых портов с высокими номерами)? Хотя базовый веб-клиент работает, веб-консоль ломается, когда порт 9443 блокируется / фильтруется.

У меня есть ответ на этот вопрос, который я хотел бы сохранить публично на случай, если кто-то еще столкнется с этой проблемой (ниже). Я также открыт для критики моего решения и предлагаемых улучшений.

Самый простой способ сделать это - внести небольшое изменение в конфигурацию веб-клиента, а затем выполнить обратный прокси-сервер с помощью nginx.

Во-первых, необходимо изменить одну настройку VCSA. В настоящее время ссылки для открытия веб-консоли указывают на порт 9443. Нам нужно, чтобы его было больше 443, поскольку у нас есть доступ только через HTTPS. Этот параметр фактически не изменяет порт, на котором активна служба веб-консоли - он просто изменяет ссылки, созданные веб-клиентом vsphere:

  1. В /etc/vmware/vsphere-client/webclient.properties, измените настройку для html.console.port к 443.

  2. Перезагрузите службу vsphere-client (обычно это требует времени для перезагрузки). Если вам нужно изменить сертификаты ssl, используя /usr/lib/vmware-vmca/bin/certificate-manager (тот, который представлен пользователю, является сертификатом машины), сделайте это сейчас, поскольку для этого в любом случае требуется перезагрузка службы.

Затем все остальное делается на сервере http. Я использовал debian stable с nginx. Если вы используете стабильную версию debian, имейте в виду, что вам следует использовать версию nginx, которая находится в резервные копии. Версия в стабильном репозитории не имеет плагина websocket.

Оказывается, что основной метод связи между клиентом и сервером в веб-консоли - это веб-сокет, настроенный для подключения через порт 443. Используя обратный прокси-сервер, мы можем проксировать конечную точку веб-консоли обратно на машину через порт 443. Конфигурация 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";
        }
}

Если вы затем перейдете к прокси, вы сможете открывать сеансы веб-консоли без необходимости доступа к портам с большими номерами. Если есть какие-либо другие веб-функции vsphere, которым требуется доступ, с ними можно работать аналогичным образом (и если вы их найдете, прокомментируйте!).

HTH кто-то (или, возможно, я в будущем).