Как я могу настроить сайт vCenter (VCSA), который разрешает внешний доступ из сетей со строгими выходными межсетевыми экранами (т. Е. Только HTTP / HTTPS, без открытых портов с высокими номерами)? Хотя базовый веб-клиент работает, веб-консоль ломается, когда порт 9443 блокируется / фильтруется.
У меня есть ответ на этот вопрос, который я хотел бы сохранить публично на случай, если кто-то еще столкнется с этой проблемой (ниже). Я также открыт для критики моего решения и предлагаемых улучшений.
Самый простой способ сделать это - внести небольшое изменение в конфигурацию веб-клиента, а затем выполнить обратный прокси-сервер с помощью nginx.
Во-первых, необходимо изменить одну настройку VCSA. В настоящее время ссылки для открытия веб-консоли указывают на порт 9443. Нам нужно, чтобы его было больше 443, поскольку у нас есть доступ только через HTTPS. Этот параметр фактически не изменяет порт, на котором активна служба веб-консоли - он просто изменяет ссылки, созданные веб-клиентом vsphere:
В /etc/vmware/vsphere-client/webclient.properties
, измените настройку для html.console.port
к 443.
Перезагрузите службу 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 кто-то (или, возможно, я в будущем).