VNC
VNC (Virtual Network Computing) — это система удалённого доступа к рабочему столу компьютера, использующая протокол RFB (Remote Framebuffer) для передачи изображения экрана, клавиатурных и мышиных событий между устройствами. VNC позволяет пользователю управлять одним компьютером (сервером) с другого устройства (клиента) через сеть, включая интернет, независимо от операционной системы. Система является кроссплатформенной, работает на Windows, Linux, macOS, BSD и мобильных платформах, и распространяется как в виде открытого исходного кода, так и в коммерческих реализациях.
История
Протокол VNC был разработан в 1999 году в лаборатории Olivetti Research Laboratory (ORL) в Кембридже (Великобритания) под руководством Энди Хоппера, Оливии Хоппер и Тима Бакстера. Первоначальная реализация была написана на Java и C, что обеспечивало кроссплатформенность. В 2002 году ORL была приобретена компанией AT&T, которая выпустила исходный код VNC под лицензией GNU General Public License (GPL), что способствовало широкому распространению технологии.
С 2004 года развитие VNC разделилось на несколько ветвей: RealVNC (коммерческая версия, основанная на оригинальном коде), TightVNC (оптимизированная для низкой пропускной способности), UltraVNC (с расширенными функциями, такими как передача файлов) и TigerVNC (форк, ориентированный на производительность). В 2010-х годах появились облачные сервисы, такие как TeamViewer и AnyDesk, которые частично заменили VNC в корпоративной среде, но VNC остаётся популярным в сфере администрирования серверов и встраиваемых систем.
Принцип работы
VNC основан на архитектуре «клиент-сервер». Серверная часть запускается на управляемом компьютере и захватывает изображение экрана, преобразуя его в поток данных по протоколу RFB. Клиентская часть подключается к серверу по TCP-порту (по умолчанию 5900 для первого дисплея, 5901 для второго и т. д.) и отображает полученное изображение, отправляя обратно события от клавиатуры и мыши.
Протокол RFB
Протокол RFB (Remote Framebuffer) работает на уровне представления данных. Он не передаёт графические команды, а только растровые изображения областей экрана, которые изменились (инкрементальные обновления). Это снижает нагрузку на сеть, но требует больше вычислительных ресурсов для кодирования и декодирования. RFB поддерживает несколько форматов кодирования:
- Raw — передача пикселей без сжатия (простой, но требовательный к пропускной способности).
- Tight — сжатие с использованием алгоритмов JPEG и PNG (оптимизировано для медленных сетей).
- Hextile — разбиение экрана на прямоугольные блоки (уменьшает задержки).
- ZRLE — кодирование с использованием Run-Length Encoding и Zlib (баланс между скоростью и сжатием).
Аутентификация
VNC поддерживает несколько методов аутентификации:
- VNC Password — пароль длиной до 8 символов, передаваемый в зашифрованном виде (устаревший, уязвим к атакам).
- Challenge-Response — с использованием ключей (например, в TightVNC).
- VeNCrypt — расширение для шифрования через TLS/SSL (рекомендуется для безопасного подключения).
- SSH-туннелирование — организация защищённого канала поверх VNC.
Классификация реализаций
VNC существует в виде множества реализаций, различающихся по функциональности, лицензии и целевой платформе.
По типу лицензии
- Открытые (GPL) — TightVNC, TigerVNC, UltraVNC, LibVNCServer.
- Коммерческие — RealVNC (Enterprise), VNC Connect, Apple Remote Desktop (использует VNC-протокол с расширениями).
- Проприетарные с бесплатной версией — RealVNC Viewer (бесплатно для просмотра), UltraVNC (бесплатно, но с ограничениями в коммерческой версии).
По функциональности
- Базовые — только передача экрана и ввода (TigerVNC).
- Расширенные — поддержка передачи файлов, буфера обмена, аудио, нескольких мониторов (UltraVNC, TightVNC с патчами).
- Облачные — VNC Connect (с интеграцией через облачный сервер для обхода NAT).
Применение
VNC используется в различных сферах, где требуется удалённое управление графическим интерфейсом.
Системное администрирование
- Управление серверами без монитора (headless-серверы) — VNC позволяет администратору видеть графическую оболочку (например, X11 на Linux) и выполнять настройки.
- Помощь пользователям — техподдержка подключается к рабочему столу сотрудника для диагностики и исправления ошибок.
Образование и обучение
- Демонстрация экрана преподавателя студентам в компьютерных классах.
- Удалённое обучение работе с программным обеспечением (например, 1С, AutoCAD).
Встраиваемые системы
- Управление одноплатными компьютерами (Raspberry Pi, Orange Pi) — VNC-сервер часто предустановлен в дистрибутивах (например, Raspbian).
- Мониторинг и управление промышленными терминалами, киосками, банкоматами.
Разработка и тестирование
- Тестирование графических интерфейсов на удалённых машинах (например, в виртуальных средах).
- Разработка под мобильные платформы — VNC-клиенты для Android и iOS позволяют управлять настольными ПК.
Преимущества и недостатки
Преимущества
- Кроссплатформенность — работает на всех основных ОС, включая редкие (например, Solaris, AIX).
- Простота настройки — для базового использования достаточно установить сервер и клиент, задать пароль.
- Открытый протокол — возможность создания собственных реализаций.
- Низкие требования к ресурсам — сервер может работать на устройствах с 256 МБ ОЗУ.
Недостатки
- Отсутствие встроенного шифрования — базовый VNC передаёт данные в открытом виде, что делает его уязвимым для перехвата. Рекомендуется использовать SSH-туннелирование или VeNCrypt.
- Высокая задержка при медленных сетях — протокол RFB не оптимизирован для потокового видео или игр (задержка может достигать 200–500 мс).
- Ограниченная поддержка аудио — большинство реализаций не передают звук (UltraVNC и RealVNC имеют расширения, но они нестандартизированы).
- Проблемы с NAT и брандмауэрами — для подключения через интернет требуется настройка проброса портов или использование облачных сервисов.
Безопасность
VNC не является безопасным протоколом по умолчанию. В базовой конфигурации пароль передаётся в зашифрованном виде, но сам трафик (изображение экрана, ввод) не шифруется. Для защиты рекомендуется:
- Использовать SSH-туннелирование:
ssh -L 5900:localhost:5900 user@server. - Применять VeNCrypt или TLS-расширения (поддерживаются в TigerVNC и RealVNC).
- Ограничивать доступ по IP-адресам через брандмауэр.
- Использовать сложные пароли (длина более 8 символов, хотя в старых версиях это ограничение).
- Отключать VNC-сервер, когда он не используется.
Интересные факты
- VNC использовался для управления марсоходом NASA «Спирит» (2004) — через него инженеры получали изображения с камер и отправляли команды.
- В 2010 году хакеры использовали уязвимости в VNC для атак на банкоматы — злоумышленники подключались к серверам, управляющим диспенсерами, и инициировали выдачу наличных.
- Протокол RFB лёг в основу стандарта VNC-совместимости, принятого в ISO/IEC 23005-5 (2013) для систем удалённого управления.
Источники
- Richardson T., Stafford-Fraser Q., Wood K. R., Hopper A. Virtual Network Computing // IEEE Internet Computing. — 1998. — Vol. 2, No. 1. — P. 33–38.
- Документация протокола RFB (RFC 6143) — Internet Engineering Task Force, 2011.
- Официальные сайты TightVNC, TigerVNC, UltraVNC, RealVNC.
- Книга: «Remote Desktop Services: A Practical Guide» — Microsoft Press, 2015 (раздел о VNC).
- Статья «VNC Security: A Survey» — Journal of Network and Computer Applications, 2019.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →