noVNC подключается к VNCServer в частной локальной сети, используя только HTTPS - PullRequest
2 голосов
/ 18 апреля 2011

Не уверен, что я действительно в курсе, но я ищу способ преобразовать свой существующий проект для использования веб-сокетов HTML5.

Вот моя ситуация:

- Client runs a modified java vnc applet with extra parameter (CONNECT).

- Modified stunnel listenin on webserver (with both public, private IP) port 443

- Client connects to 443 and sends (prior to RFB) a HTTP packet like :
  'CONNECT 10.0.0.1:4001'

- Stunnel opens a new stream to 10.0.0.1:4001 using SSL wrapper

- VNC Server (@10.0.0.1:4001) responds, connection is established.

Теперь я хочу избавиться от Java-апплета и переключиться на Websocket с помощью NoVNC.

Я хочу иметь возможность:

- Open a single port on the webserver (HTTPS preferably)
- Have client connect using HTML5 only (no more java applet)

Я не могу изменить:

- VNCServer will still be listening on private LAN only.
- VNCServer will still listen to a bunch of ports, each corresponding to
  a virtual server

Вопросы:

- How to give NoVNC the notion of target HOST:PORT ?
- Is stunnel still be usable ? Or should I change to websocket proxy ?

Если у кого-то есть отправная точка, я был бы очень признателен!

1 Ответ

5 голосов
/ 18 апреля 2011

Отказ от ответственности: я создал noVNC, поэтому мой ответ может быть сильно предвзятым; -)

Я отвечу вам второй вопрос первый:

stunnel не может напрямую использоваться noVNC.Проблема в том, что протокол WebSockets имеет первоначальное рукопожатие, похожее на HTTP, и сообщения оформляются.Кроме того, до тех пор, пока в WebSockets не добавлена ​​поддержка двоичной полезной нагрузки, полезная нагрузка кодируется base64 прокси-сервером websockets (websockify).Добавление необходимой поддержки в stunnel было бы нетривиальным, но, безусловно, выполнимым.На самом деле noVNC выпуск # 37 является желательной функцией для добавления этой поддержки в stunnel.

Первый вопрос :

noVNC уже имеет концепциюВЕДУЩИЙ: ПОРТ через метод RFB.connect(host, port, password).Файл vnc_auto.html на верхнем уровне показывает, как заставить noVNC автоматически подключаться при загрузке страницы на основе хоста, порта и пароля, указанных в качестве параметров строки запроса URL.

Однако я думаю, что вы действительно спрашиваетеКак вы получаете noVNC для подключения к альтернативным портам VNC-сервера на бэкэнде.Эта проблема не решается напрямую noVNC и websockify.Есть несколько способов решить эту проблему, и обычно он включает механизм внеполосной настройки / авторизации, так что прокси-сервер не может быть использован для запуска атак произвольными хостами.Например, в моей компании у нас есть веб-структура управления, которая интегрирует noVNC, и когда пользователь хочет подключиться к консоли, аутентифицированный вызов AJAX используется для настройки прокси-сервера для этого конкретного пользователя и системы, к которой он хочет подключиться.Наш веб-интерфейс управления является только внутренним.

Ganeti Web Manager использует аналогичную модель, и источник доступен.У них есть форк VNCAuthProxy, который имеет поддержку WebSockets.Они используют канал управления от веб-интерфейса до VNCAuthProxy для установки временного пароля, связанного с конкретным хостом сервера VNC: порт.

Также в OpenStack (Nova) интегрируется noVNC, использующий аналогичный внеполосный токен на основемодель для доступа с помощью nova-vncproxy.

Некоторые ссылки:

...