INTEGRITY Документация

Отобразите VNC-клиент в браузере

Сервер Virtual Network Computer (VNC) предоставляет пользователям удаленный доступ к рабочему столу компьютера. Cloudflare может отображать терминал VNC в браузере без какого-либо программного обеспечения или настроек на стороне клиента.

Для VNC, отображаемого в браузере, требуется подключить VNC-сервер к Cloudflare и направлять трафик через публичное имя хоста. Чтобы получить доступ к VNC-серверу, пользователи переходят по URL-адресу публичного имени хоста и входят через Cloudflare Access с помощью настроенного поставщика удостоверений. Cloudflare применит ваш Политики доступа и, если доступ пользователю разрешен, отображает клиент VNC в его браузере.

Предварительные требования

1. Настройте VNC-сервер

В качестве примера мы создадим сервер TightVNC на виртуальной машине (VM) Ubuntu, размещённой в Google Cloud Project (GCP). Мы настроим VNC-сервер для запуска XFCE, легковесной среды рабочего стола, подходящей для удалённого доступа. Если у вас уже установлен VNC-сервер, этот шаг можно пропустить и перейдите к шагу 2.

  1. Откройте окно терминала для вашей виртуальной машины Ubuntu.

  2. Установите XFCE и TightVNC, выполнив следующую команду:

    sudo apt update
    sudo apt install xfce4 xfce4-goodies dbus-x11 tightvncserver -y

    Эта команда устанавливает рабочий стол, несколько полезных утилит и программное обеспечение сервера VNC.

  3. Чтобы инициализировать VNC-сервер:

    1. Создайте инстанс сервера VNC:

      vncserver
    2. Вам будет предложено задать пароль. Он будет использоваться для подключения к вашему VNC-серверу и не может превышать 8 символов.

      TightVNC создаст файлы конфигурации и запустит VNC-сессию на дисплее :1 (который использует порт 5901).

    3. Вам будет предложено создать пароль только для просмотра. Можно нажать n для «нет».

    4. Завершите эту начальную сессию, чтобы можно было изменить её конфигурацию:

      vncserver -kill :1
  4. Настройте VNC для запуска рабочего стола XFCE:

    1. Создайте каталог конфигурации VNC, если он отсутствует:
    mkdir -p ~/.vnc
    1. Откройте xstartup файл в текстовом редакторе. Например,
    vim ~/.vnc/xstartup
    1. Обновите файл в соответствии со следующей конфигурацией:
    #!/bin/sh
    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    startxfce4
    1. Сделайте файл исполняемым:
    chmod +x ~/.vnc/xstartup
  5. Запустите сервер VNC снова:

    vncserver -localhost :1

    -localhost флаг гарантирует, что VNC-сервер принимает подключения только от самой ВМ, а не из интернета. Теперь ваш VNC-сервер запущен на порте 5901, но доступ к нему есть только из localhost (127.0.0.1) внутри виртуальной машины.

  6. (Рекомендуется) Протестируйте сервер VNC с помощью существующего клиента VNC, чтобы проверить отсутствующие пакеты или изменения конфигурации. Например, чтобы протестировать сервер VNC, размещённый в GCP:

    1. Откройте терминал на клиентской машине.

    2. Подключение к серверу VNC через SSH с перенаправлением своего локального порта 5901 к порту прослушивания сервера VNC:

      gcloud compute ssh [YOUR_VM_NAME] --zone=[YOUR_ZONE] -- -L 5901:localhost:5901
    3. Откройте предпочитаемое приложение VNC-клиента.

    4. В VNC-клиенте подключитесь по адресу localhost:5901 и введите пароль своего VNC-сервера.

    Вы должны увидеть рабочий стол виртуальной машины Ubuntu.

  7. (Необязательно) Настройте запуск VNC-сервера при загрузке:

    1. Найдите полный путь к vncserver команда:

      which vncserver
      /usr/bin/vncserver
    2. Создайте новый конфигурационный файл службы:

    sudo vim /etc/systemd/system/[email protected]
    1. Скопируйте следующее содержимое и вставьте его. Замените [YOUR_USERNAME] с пользователем VNC-сервера. При необходимости обновите /usr/bin/vncserver в ваш vncserver путь.

      [Unit]
      Description=Start TightVNC server at startup
      After=syslog.target network.target
      
      [Service]
      Type=forking
      User=[YOUR_USERNAME]
      WorkingDirectory=/home/[YOUR_USERNAME]
      
      PIDFile=/home/[YOUR_USERNAME]/.vnc/%H:%i.pid
      
      ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
      ExecStart=/usr/bin/vncserver -localhost :%i
      ExecStop=/usr/bin/vncserver -kill :%i
      
      [Install]
      WantedBy=multi-user.target
      1. Перезагрузить systemd для чтения в новом файле службы:
      sudo systemctl daemon-reload
      1. Включите запуск службы при загрузке:
      sudo systemctl enable [email protected]

      1 переменная настраивает службу VNC на использование дисплея :1 (который работает на порту 5901).

      1. По умолчанию systemd пользовательские службы запускаются только тогда, когда этот пользователь выполнил вход. Чтобы служба VNC запускалась при загрузке (до входа в систему), включите linger для своего пользователя:
      sudo loginctl enable-linger [YOUR_USERNAME]
      1. Запустите службу:
      sudo systemctl start [email protected]
      1. Проверьте его статус:
      sudo systemctl status [email protected]

      Теперь сервер VNC будет запускаться автоматически при каждой загрузке ВМ.

2. Подключите сервер к Cloudflare

  1. Создайте Cloudflare Tunnel, следуя руководство по настройке в панели управления.

  2. Перейдите в Сеть > Tunnels, затем выберите свой туннель.

    Перейдите в Tunnels ↗
  3. На Маршруты вкладке выберите Добавить маршрут, затем выберите Опубликованное приложение.

  4. Выберите домен из раскрывающегося списка и укажите любой поддомен (например, vnc.example.com).

  5. Для Сервис, выберите TCP и введите localhost:<5901>. Если VNC-сервер находится на другой машине, отличной от той, где установлен туннель, введите <SERVER_IP>:5901.

    Замените 5901 с портом прослушивания вашего VNC-сервера. Чтобы определить порт прослушивания VNC, выполните sudo ss -lnpt и найдите vnc в списке процессов.

  6. Сохраните маршрут.

Ваш VNC-сервер теперь готов принимать входящие запросы от Cloudflare.

3. Создайте приложение Access для VNC

Создайте приложение Cloudflare Access, к которому пользователи смогут получить доступ через браузер:

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Контроль доступа > Приложения.

  2. Выберите Создать новое приложение.

  3. Выберите Самостоятельный хостинг и конфиденциальность.

  4. Выберите Добавьте общедоступное имя хоста и введите имя хоста опубликованного приложения (vnc.example.com).

  5. Включите Разрешить доступ через сессии RDP, SSH или VNC в браузере, затем выберите VNC.

  6. В разделе Политики доступа, добавьте существующую политику или создать новую политику чтобы управлять тем, кто может подключаться к вашему приложению. Все приложения Access по умолчанию запрещают доступ: пользователь должен соответствовать политике Allow, прежде чем получить доступ.

  7. Выберите Создание.

4. Подключитесь как пользователь

Теперь пользователи могут получать доступ к среде удалённого рабочего стола прямо в веб-браузере без установки какого-либо ПО VNC-клиента.

Чтобы подключиться к серверу VNC:

  1. Откройте браузер и перейдите по публичному URL-адресу имени хоста (например, https://vnc.example.com).
  2. Войдите в Cloudflare Access через настроенного поставщика идентификации.
  3. Введите пароль сервера VNC.

В браузере должен отобразиться рабочий стол удалённого сервера VNC. Все подключения защищены сетью Cloudflare, а доступ контролируется политиками Access.