VNC для удаленного доступа к Ubuntu c оболочкой Gnome. Вход в многопользовательскую систему через VNC

03.06.2019

Virtual Network Computing (VNC) — система для удаленного доступа к рабочему столу. Если вы представляете себе Remote Desktop или RAdmin, то VNC решает аналогичную задачу, только VNC-сервера распространяются бесплатно и с открытым исходным кодом. Важно отметить, что VNC не является протоколом. Используемый протокол называется Remote FrameBuffer (RFB). Этот протокол полностью описан в этом PDF .

Зачем кому-то поднимать VNC:

  • Если пробрасывание UI по SSH слишком тормозит;
  • Сервер используется как виртуалка, только с совместным доступом;
  • Торрентокачалка с белым IP, просто ставим Transmission и вперед;
  • Своего рода альтернатива проксям и VPN ;
  • И прочее, на что фантазии хватит;

Приступим. Все описанные ниже шаги проверялись на Ubuntu Linux 14.04 LTS, но также должны без особых изменений работать на других версиях Ubuntu, а также других системах. Для эксперимента нам понадобится ненужная машина, возможно, виртуалка в каком-нибудь DigitalOcean , имеющая по крайней мере 512 Мб памяти. Если вы планируете запускать тяжелые GUI-программы вроде Google Chrome, то сразу выделяйте 1 Гб, а лучше и того больше. Если выделить только 512 Мб, вы сможете открыть только одну вкладу с GMail, после чего память закончится, я проверял. Меня лично очень печалит, что браузеры стали такими прожорливыми, но это, пожалуй, тема для отдельного поста.

На машине, где будем поднимать VNC, под рутом заводим нового пользователя:

adduser ubuntu
usermod -G sudo ubuntu

Прописываем ему наш ~/.ssh/id_rsa.pub:

su ubuntu
vim ~/ .ssh/ authorized_keys
chmod 0600 ~/ .ssh/ authorized_keys

У себя на компьютере в ~/.ssh/config дописываем:

Host vnc-server
Hostname 123.45.67.89
User ubuntu
LocalForward 5901 localhost:5901

В VNC не шифруется трафик, поэтому мы будем ходить в него, используя перекидывание портов по SSH. Если вы также собираетесь использовать технику проброса звука, описанную в заметке Осилил запуск GUI-приложений в Docker , добавьте строчку:

RemoteForward 3333 localhost:4713

Заходим на vnc-server под пользователем ubuntu, говорим:

sudo apt-get update
sudo apt-get install xubuntu-desktop tightvncserver xfonts-base \
xfonts-75dpi xfonts-100dpi

Как вы могли заметить, в качестве конкретной реализации сервера был выбран TightVNC. Я имел опыт работы с ним несколько лет назад. Уже не помню точно, чем именно TightVNC тогда выделялся на фоне остальных VNC-серверов. Помню, что он был прост в установке и настройке, совместим со всеми клиентами и просто работал.

Правим файл ~/.vnc/xstartup, содержание должно стать примерно таким:

#!/bin/sh

Xrdb $HOME / .Xresources
xsetroot -solid grey
startxfce4 &
(sleep 3 && xfce4-panel) &

Запустить сервер:

vncserver:1 -localhost -nolisten tcp

Здесь аргумент :1 — это номер дисплея. Можно запускать несколько десктопов, работающих одновременно. Флаг -localhost означает принимать соединения только с этой же машины. Параметр -nolisten tcp нужен для того, чтобы порт 6001 не торчал наружу. При первом запуске сервера понадобится ввести пароль для доступа к десктопу. Обратите внимание, что пароль обрезается до восьми символов. Также вас спросят про отдельный пароль для view-only соединения:

Would you like to enter a view-only password (y/n)? n

Сменить пароль можно командой:

Остановить сервер:

vncserver -kill :1

Чтобы подключиться к работающему серверу, нужен какой-нибудь VNC-клиент. В Ubuntu по умолчанию идет Remmina. В маках, как мне рассказывали, VNC клиент находится в Finder → Connect to Server. В качестве адреса сервера указываем localhost:5901, оттуда соединение будет переброшено по SSH на порт 5901 VNC-сервера. В общем случае номер порта вычисляется, как 5900 + номер дисплея.

Дополнение: А во FreeBSD я делаю так:

sudo pkg install tightvnc
vncviewer -bgr233 localhost:5901

Если все было сделано правильно, вы увидите среду рабочего стола Xfce. Ее также следует немного донастроить. В Applications Menu → Settings → Session and Startup во вкладке Advanced ставим галочку Launch GNOME services on startup. Во вкладке Application Autostart отключаем разные лишние сервисы типа Bluetooth Applet. Иначе некоторые приложения, в частности, Skype, могут ронять вообще все иксы с очень странными ошибками в логах. Я лично оставил только следующие галочки:

Теперь прописываем VNC на автозапуск. В /etc/init.d/vncserver пишем.

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое.


Virtual Network Computing (VNC) позволяет создавать совместный доступ другим удалённым пользователям к окружению рабочего стола локального хоста по сети. Для предоставления доступа к рабочему столу, на локальном хосте должен быть запущен VNC сервер, а удалённые пользователи подключаются к серверу VNC, используя какой-либо клиент просмотрщика VNC.

В этой инструкции я объясню как настроить VNC сервер на Linux . Для этого я буду использовать vino , программное обеспечение VNC сервера для окружения рабочего стола GNOME.

Для установки VNC сервера vino на машину с Debian, Ubuntu или Linux Mint:

$ sudo apt-get install vino

Для установки VNC сервера vino на машину с Fedora, CentOS или RHEL:

$ sudo yum install vino

После установки, вы можете запустить vino и включить сервер VNC введя команду vino-preferences.

$ vino-preferences

Вышеприведённая команда откроет окно настроек vino для доступа к рабочему столу как показано ниже. В окне там где «Совместный доступ» поставьте галочку, чтобы позволять другим пользователям видеть ваш рабочий стол. Также можете установить VNC пароль. Когда настройка сделана, это окно можно закрыть.

По идее, утилита vino-preferences сама должна запустить сервер VNC. Если VNC сервер не запущен по каким-то причинам, вы можете запустить VNC сервер вручную следующим образом.

$ /usr/lib/vino/vino-server &

На последних Linux Mint с рабочим столом Cinnamon, как известно, vino-preferences отсутствуют. Для включения настройки VNC сервера в Mint на рабочем столе Cinnamon, используйте вместо этого dconf-editor, как это описано здесь.

Вы можете проверить, запущен ли vino набрав следующую команду.

$ sudo netstat -pl | grep vino tcp 0 0 *:5900 *:* LISTEN 3246/vino-server tcp6 0 0 [::]:5800 [::]:* LISTEN 3246/vino-server tcp6 0 0 [::]:5900 [::]:* LISTEN 3246/vino-server

Как видно выше, vino-server запущен на TCP порте с номерами 5800 и 5900. Вы можете использовать любое программное обеспечение с функцией VNC клиента для подключения к VNC серверу.

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

VNC - это система удаленного управления десктопом компьютера. Пользователь VNC клиента видит изображение десктопа VNC сервера и управляет им мышью и клавиатурой так же, как своим собственным компьютером.

VNC сервер можно запустить на рабочем комьютере, и по необходимости заходить на него из дома. Или наоборот. Для соединения надо убедиться, что TCP порт, используемый сервером (по умолчанию 5900) доступен для входящих соединений от клиента.

UltraVNC берется на . Другие известные реализации VNC - RealVNC и TightVNC , еще варианты можно найти . Теоретически они все совместимы между собой, хотя некоторые специальные функции (clipboard или file transfer) могут между разными реализациями не работать.

Помогаем новичкам

Удобен VNC и для помощи другим пользователям. Помогать, видя происходящее на экране, гораздо проще.

Однако у очень многих стоят раутеры и файерволы, и нереально требовать от новичка умения открыть для входящих соединений нужный порт. Нам на помощь приходит reverse connection (обратное соединение). В этом режиме соединение инициирует VNC сервер.

Опытный пользователь запускает у себя VNC клиент в listening mode (режиме слушания порта) (vncviewer.exe /listen ) и делает у себя порт 5500 доступным снаружи. Новичку остается только скачать и запустить VNC сервер и соединиться с клиентом по указанному IP адресу.

Вот специальная страница с инструкциями для новичка. Думаю, опытному пользователю подробные инструкции не нужны. Отмечу только, что во время соединения clipboard становится общим, и что если у новичка разрешение экрана больше вашего, то в клиенте можно масштабировать изображение до приемлемого размера.

Дополнительно

Достоинства VNC - многоплатформенность и бесплатность. Если у вас везде стоит Windows XP, то для удаленного доступа вам вероятно подойдут и встроенные средства - Remote Desktop или Remote Assistance. Вроде бы их тоже можно соединять через reverse connection.

Если у вас динамический внешний IP адрес, удобно сделать себе (бесплатный) Dynamic DNS, например на dyndns.com . У вас на компьютере будет работать маленькая программка (а в некоторых раутерах есть такая встроенная функциональность), извещающая DynDNS сервис об изменениях вашего IP. Как результат, выбранный вами domain, к примеру pupkin.dyndns.org, будет всегда показывать на ваш текущий IP адрес

Если вы профессионально занимаетесь технической поддержкой, то вам может быть особенно удобен . Это специальная облегченная версия VNC сервера, которая может делать только reverse connection и только на заранее сконфигурированные вами IP адреса. Конечно, тогда вы должны быть достаточно авторитетны для пользователя, чтобы он согласился скачать и запустить этот сконфигурированный VNC сервер с вашего собственного сайта.
(А, кого я тут обманываю... Многие пользователи и так запустят все, что им предложат)

Как помочь своим пользователям получить доступ к многопользовательской Linux-системе из любого места

Архитектура VNC и X server

В качестве графического интерфейса пользователя (GUI) в Linux®применяется X Window System (сокращенно X ). X - это необычный GUI в нескольких отношениях, в частности, это изначально сетевой интерфейс. X-сервер , по сути, представляет собой программу сетевого сервера. Программы сетевого сервера предоставляют клиентским программам доступ к локальным ресурсам, и это верно также для X-сервера. Особенность заключается в том, что в случае Х-сервера "локальные ресурсы" – это дисплей, клавиатура и мышь, с которыми работает пользователь. В самой распространенной конфигурации программы Х-клиента работают на том же компьютере, что и сервер. Таким образом, LibreOffice, GNU Image Manipulation Program (GIMP) или другие программы являются X-клиентами, использующими сетевые протоколы Х для приема данных от пользователя и отображения результатов на том же компьютере.

Однако когда X используется в сети, пользователь сидит за компьютером X-сервера, а X-клиентами служат программы, которые нужно запускать на другом компьютере. Для этой конфигурации требуется второй сетевой протокол, устанавливающий соединение. Таким вторым протоколом может быть telnet, Secure Shell (SSH) или X Display Manager Control Protocol (XDMCP). Сервер этого протокола удаленного входа работает на компьютере X-клиента, а клиент удаленного входа ― на компьютере X-сервера. Сервер удаленного входа запускает X-клиенты, которые, в свою очередь, устанавливают соединение с X-сервером. иллюстрирует это взаимодействие. Пунктирными стрелками обозначено начало сеанса. (В случае XDMCP XDMCP-клиент встроен в программу X-сервера.)

Рисунок 1. Для удаленного доступа X требуется клиент и сервер на обоих компьютерах

Эта конфигурация прекрасно работает во многих локальных сетях, но не лишена недостатков. Например, для нее нужно инициировать двусторонний сетевой протокол, а этому может помешать межсетевой экран или маршрутизатор Network Address Translation (NAT). (SSH устраняет это препятствие, позволяя туннелировать X-сеансы.) Кроме того, хотя существуют X-серверы для большинства платформ, они обычно не устанавливаются на компьютерах под управлением Windows®. По этим и иным причинам многие предпочитают использовать другой протокол, Remote Frame Buffer (RFB), который реализован в семействе программ Virtual Network Computing (VNC).

VNC - это кроссплатформенный инструмент, который обеспечивает удаленный доступ к Linux, UNIX®, Mac OS X, Windows и другим системам из клиента любого типа. Пользователь сидит за клиентским компьютером и обращается к удаленному серверному компьютеру. В Linux VNC-сервер либо зеркально отражает содержимое локального экрана Х-сервера на удаленный компьютер, либо содержит свой собственный X-сервер, способный работать независимо от того, что управляет локальным экраном. Результат показан на рисунке 2. Опять же, пунктирная стрелка указывает начало сеанса. Эта конфигурация устраняет необходимость в обратном сетевом соединении, а так как клиенты и серверы VNC имеются для многих операционных систем, одна и та же клиентская программа обеспечивает доступ к любому серверу.

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

Недостаток VNC заключается в том, что аутентификация RFB основана на паролях без имен пользователей. Таким образом, каждый пользователь должен запускать независимый сеанс VNC-сервера и устанавливать соединение с этим экземпляром VNC, указав правильный номер порта. Это требование терпимо для однопользовательской системы, но вызывает крайние неудобства при работе на многопользовательском компьютере.

Для решения этой проблемы можно объединить эти два подхода: перенастроить локальный XDMCP-сервер так, чтобы он помогал X-серверу, встроенному в VNC, обеспечить недостающую многопользовательскую аутентификацию. (Результирующая конфигурация иллюстрируется на рисунке 3. Пунктирная стрелка указывает начало сеанса.) Теперь, когда удаленные пользователи VNC обращаются к компьютеру VNC-сервера, они могут вводить имена пользователей и пароли доступа к своим собственным уникальным сеансам VNC, так что с компьютером могут работать сколько угодно пользователей.

Рисунок 3. Добавление XDMCP к конфигурации VNC обеспечивает повышенную гибкость

Настройка VNC-сервера

Существует несколько способов запуска VNC, включая использование сценариев, привязку VNC к среде рабочего стола с помощью настольных инструментов и использование xinetd для прослушивания VNC-соединений. Этот последний подход и описывается здесь, так как он позволяет запускать VNC так, что тот может использовать XDMCP-сервер. Прежде чем перейти к инструкциям по настройке VNC для запуска посредством xinetd , необходимо выбрать VNC-сервер.

Выбор VNC-сервера

Существует несколько программ VNC-сервера. (См. раздел ). Некоторые из наиболее популярных: TightVNC, TigerVNC и RealVNC. В этой статье в качестве примера используется TightVNC. К сожалению, детали конфигурации зависят как от сервера, так и от дистрибутива, поэтому приведенные здесь инструкции нужно будет адаптировать к своему программному обеспечению.

Установка xinetd

Многие дистрибутивы устанавливают суперсервер xinetd по умолчанию, но не все. Так как описанный здесь метод предполагает использование xinetd , необходимо установить xinetd , если он еще не установлен. В большинстве дистрибутивов xinetd можно установить с помощью менеджера пакетов, например, вызывав apt-get install xinetd в дистрибутивах на основе Debian или zypper install xinetd в openSUSE.

Может также потребоваться настройка процесса запуска xinetd . Обычно для одноразового запуска можно использовать сценарий запуска System V (SysV):

# /etc/init.d/xinetd start

Для настройки автоматического запуска xinetd при загрузке компьютера требуется знание методов работы сценариев запуска своего дистрибутива. Как правило, это делается с помощью утилиты, такой как chkconfig (используется в Fedora, openSUSE и родственных дистрибутивах), update-rc.d (используется в Debian и родственных дистрибутивах) или rc-update (используется в Gentoo), примерно так:

# chkconfig xinetd on # update-rc.d xinetd enable # rc-update add xinetd default

Введите только одну из этих команд или найдите эквивалент для своего дистрибутива.

Заметим, что xinetd может не запускаться, если он не настроен на выполнение каких-либо служб. Так что, возможно, придется отложить его запуск до тех пор, пока вы не настроете xinetd для управления своим VNC-сервером.

Настройка xinetd

Серверы, которыми должен управлять xinetd , помещают файлы конфигурации в каталог /etc/xinetd.d. Таким образом, чтобы настроить xinetd на управление VNC, нужно создать или отредактировать файл с именем типа /etc/xinetd.d/vnc. (В некоторых дистрибутивах, таких как openSUSE, пакет VNC-сервера устанавливает такой файл.) В листинге 1 приведен пример.

Листинг 1. Пример настройки VNC для xinetd
service vnc { disable = no socket_type = stream protocol = tcp wait = no user = nobody server = /usr/bin/Xvnc server_args = -inetd -once -query localhost -geometry 1024x768 -depth 16 type = UNLISTED port = 5900 }

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

  • service . VNC с разными параметрами можно запустить через несколько портов, но в этом случае в первой строке листинга 1 нужно присвоить VNC отдельное имя службы для каждого порта.
  • server . Этот параметр нужно изменить так, чтобы он указывал на главный двоичный файл VNC-сервера, который обычно называется Xvnc.
  • server_args . Некоторые из этих значений вы почти наверняка захотите изменить, как описано ниже.
  • port . VNC использует порты с номерами 5900 и выше. Можно запустить сервер с разными значениями параметров через разные порты. В этом случае каждому экземпляру нужно назначить свой номер порта.

Самая каверзная часть настройки xinetd - это настройка аргументов сервера. В качестве модели можно использовать аргументы, приведенные в листинге 1, изменив некоторые из них.

  • -query localhost . Этот параметр указывает, что сервер VNC X должен проверять систему localhost на аутентификацию XDMCP. Его можно изменить, если вы хотите использовать один компьютер в качестве транслятора для доступа к программам другого.
  • -geometry 1024x768 . Этот параметр устанавливает виртуальное разрешение сеанса VNC. Заметим, что это разрешение не обязательно должно соответствовать разрешению обычного X-сервера, работающего на компьютере сервера. Можно создать несколько записей, работающих с разным разрешением, чтобы пользователи могли входить в VNC-сервер с тем разрешением, которое удобно для их локальных систем.
  • -depth 16 . Этот параметр задает глубину цвета. Чем ниже значение, тем быстрее обновляется дисплей, но на экране с большим количеством цветов могут появиться искажения. Диапазон допустимых значений от 2 до 32.

Имеются многие другие параметры, и некоторые из них зависят от VNC-сервера. Обращайтесь к документации по своему серверу VNC.

Настройка XDMCP-сервера

Большинство дистрибутивов Linux настраивают свои XDMCP-серверы только для управления локальным дисплеем. Чтобы обеспечить удаленный доступ, нужно перенастроить XDMCP-сервер так, чтобы принимать запросы на доступ с VNC-сервера, работающего на том же компьютере. Детали зависят от XDMCP-сервера. Три наиболее часто используемых в Linux ― это GNOME Display Manager (GDM), Light Display Manager (LightDM) и KDE Display Manager (KDM). Для других XDMCP-серверов, таких как XDM, требуются настройки, отличные от описанных здесь. В любом случае после перенастройки XDMCP-сервера его придется перезапустить.

Редактирование файла конфигурации XDMCP

Если вы не уверены, какой XDMCP-сервер используется в вашей системе, это можно определить, просмотрев листинг процесса с помощью строки dm , например:

$ ps ax | grep dm 929 ? Ss 0:00 /usr/bin/kdm 962 tty7 Ss+ 0:19 /usr/bin/Xorg -br:0 vt7 -nolisten tcp -auth \ /var/lib/xdm/authdir/authfiles/A:0-pp4shb 30157 pts/3 S+ 0:00 grep --color=auto dm

В первой строке этой распечатки указано, что работает KDM, поэтому для того чтобы VNC мог использовать XDMCP, нужно отредактировать файл конфигурации этого сервера. Файлы конфигурации большинства программ XDMCP имеют один и тот же формат. Они содержат разделы с именами, указанными в квадратных скобках, например . Строки, следующие за именем раздела, задают параметры через знак равенства, например: enable=true . В таблице 1 перечислены имена файлов конфигурации, имена разделов и параметры, которые необходимо определить, чтобы XDMCP работал на нескольких распространенных XDMCP-серверах Linux.

Таблица 1. Параметры, позволяющие XDMCP поддерживать VNC для разных XDMCP-серверов

Раздел XDMCP в файле конфигурации может полностью отсутствовать. Если он присутствует, он может явно отключать поддержку XMDCP, содержать закомментированные параметры или быть пустым. Независимо от исходного состояния файла необходимо сделать так, чтобы раздел XDMCP присутствовал и чтобы поддержка была включена. В качестве примера рассмотрим настройку KDM для включения XDMCP:

Enable=true

Некоторые дистрибутивы позволяют включить дополнительные меры безопасности, которые потребуется ослабить. Одна из них ― межсетевой экран. Сценарии межсетевых экранов обычно зависят от дистрибутивов, поэтому за инструкциями по настройке межсетевого экрана обращайтесь к документации на свою систему. Нужно, чтобы localhost имел доступ к порту 177, а VNC-клиенты - к порту 5900 (или любым другим портам, которые используются для VNC).

В OpenSUSE есть дополнительный файл конфигурации, который управляет некоторыми типами доступа, включая XDMCP-доступ: /etc/sysconfig/displaymanager. Откройте этот файл в текстовом редакторе и найдите следующую строку:

DISPLAYMANAGER_REMOTE_ACCESS="no"

Измените значение этого параметра на "yes" . Если оставить "no" , окно входа XDMCP-сервера при подключении к VNC-серверу отображаться не будет. В большинстве дистрибутивов такое изменение не требуется: этот файл использует только openSUSE.

Перезапуск XDMCP-сервера

Когда XDMCP-сервер настроен на поддержку удаленных соединений, его необходимо перезапустить. В дистрибутивах, которые запускают X посредством файла инициализации SysV, таких как Debian и Gentoo, это можно сделать с помощью параметра restart:

# /etc/init.d/gdm restart

В системе, которая для запуска X использует уровень runlevel, такой как Fedora или openSUSE, нужно перейти на уровень текстового режима (обычно 3), а затем вернуться на уровень GUI (обычно 5):

# telinit 3 # telinit 5

Имейте в виду, что при любом подходе производится выход из X, поэтому прежде чем продолжать, сохраните всю проделанную в сеансе X работу.

Тестирование и отладка

Теперь можно входить в систему с удаленного компьютера с помощью VNC-клиента. Большинство дистрибутивов Linux содержат команду vncviewer , так что можно ввести:

vncviewer

Чтобы войти в систему remotename через VNC. Если VNC настроена и работает правильно, результат будет примерно таким, как показано на рисунке 4. Если настроить несколько сеансов VNC через разные порты, можно указать номер сеанса VNC, передав его как часть имени хоста. Введите:

vncviewer:3

Чтобы войти в сеанс 3 (через порт 5903).

Рисунок 4. При настройке на работу с XDMCP VNC обеспечивает обычное приглашение Linux

Если при выполнении этого теста вы не видите экран входа в систему XDMCP, придется произвести отладку. Ниже приведены некоторые рекомендации.

  • Если vncviewer сообщает, что в соединении было отказано, это, скорее всего, означает, что суперсервер на компьютере сервера VNC не настроен должным образом. Проверьте конфигурацию xinetd и попробуйте перезапустить суперсервер. Возможно также, что межсетевой экран блокирует доступ к компьютеру VNC-сервера.
  • Если VNC-клиент запускается и подключается к серверу, но вы видите только серый экран с курсором, который можно перемещать, проблема, скорее всего, в настройке XDMCP-сервера. Проверьте описанные выше параметры и перезапустите XDMCP-сервер.
  • Просмотрите файлы журнала событий, как это обычно делается при отладке. Может потребоваться поиск всех файлов журнала в каталоге /var/log по ссылкам на ваши xinetd , XDMCP-сервер и VNC-сервер.

Вопросы безопасности VNC

RFB не является безопасным протоколом; большинство VNC-клиентов и серверов не шифруют свои данные. (VNC шифрует свои собственные пароли, но при описанном здесь подходе эти пароли не используются.) Будьте осторожны при выборе способа и места установки VNC. Если вы хотите использовать VNC в незащищенной сети, возможны три варианта:

  • использовать виртуальную частную сеть (VPN);
  • туннелировать протокол через SSH;
  • использовать вариант VNC, поддерживающий шифрование, такой как TigerVNC с возможностью шифрования Transport Layer Security.

При включении окон входа VNC, как описано в этой статье, во внешний мир открываются, по крайней мере, два порта (VNC и XDMCP). Оба порта можно ограничить правилами межсетевого экрана, чтобы свести к минимуму риск злоупотреблений. Заметим, что порт XDMCP (UDP 177) должен быть открыт только для localhost, поэтому правило межсетевого экрана для него может быть весьма ограничивающим.

Заключение

В целом соединение VNC и XDMCP ― полезный метод обеспечения удаленного входа с графическим интерфейсом пользователя для многопользовательских Linux компьютеров. Этот метод имеет преимущества по сравнению с прямым применением XDMCP в кроссплатформенной среде или при наличии проблем, вызванных межсетевым экраном или NAT. На многопользовательских компьютерах он предпочтительнее более распространенных способов прямого подключения VNC. При использовании этого метода необходимо рассмотреть вопросы безопасности. Будьте готовы настроить правила межсетевого экрана для ограничения нежелательного доступа извне и используйте шифрование, если данные передаются по ненадежной сети.

25 ноября 2009 в 13:21

Подключение к удаленному компьютеру по VNC

  • Настройка Linux

Работа с VNC-клиентом. Материал ориентирован на неопытного пользователя.

1. Установка VNC-клиента
2. Подключение VNC-клиента к удаленному компьютеру
3. Отключение VNC-клиента от удаленного компьютера
4. Тюнинг VNC-клиента
5. Частые проблемы

Для работы с удаленным компьютером по VNC на компьютере пользователя нужно запустить программу-клиент (VNC viewer, VNC client). Эта программа передает на удаленный компьютер данные о нажатиях на клавиши и о движениях мыши, сделанных пользователем, и показывает информацию, предназначенную к выводу на экран.

1. Установка VNC-клиента
Для ОС Windows можно бесплатно скачать и инсталлировать VNC-клиент UltraVNC и TightVNC .

Mac OS X начиная с версии 10.5 имеет поддержку VNC-клиента в RemoteDesktop . Для предыдущих версий можно использовать VNC-клиенты JollysFastVNC и .

Для Linux ветви Debian (Ubuntu) VNC-клиент устанавливается из репозитория командой:

Apt-get install vncviewer

Для ветви RedHat (CentOS, Fedora) - командой:

Yum install vnc

Для FreeBSD VNC-клиент (TightVNC) устанавливается из пакетов командой:

Pkg_add -r tightvnc

2. Подключение VNC-клиента к удаленному компьютеру
Для подключения VNC-клиента к удаленному компьютеру требуется указать его IP-адрес или DNS-имя, и номер дисплея (по умолчанию, :0) или номер TCP-порта (по умолчанию, 5900). Если VNC-сервер требует авторизации, то при подключении к нему VNC-клиент запросит пароль. Обратите внимание, что пароль доступа к VNC-серверу не связан с каким-либо аккаунтом (учетной записью пользователя) на удаленном компьютере, а служит только для ограничения доступа к дисплею VNC-сервера.

После установки соединения и открытия экрана, в зависимости от настроек VNC-сервера может потребоваться авторизация пользователя на виртуальном сервере или может быть открыта уже запущенная рабочая сессия какого-либо пользователя.

Так как на компьютере одновременно могут работать несколько VNC-серверов, для их разделения используют параметр номер дисплея . Например, один VNC-сервер может быть запущен на дисплее:0, другой - на дисплее:1. Каждому номеру дисплея соответствует номер TCP-порта, на котором VNC-сервер принимает соединения. Номер порта для дисплея получается прибавлением номера дисплея к базовому номеру порта - 5900. Дисплею:0 соответствует TCP-порт 5900, дисплею:1 - порт 5901.

3. Отключение VNC-клиента от удаленного компьютера
При закрытии окна VNC-клиента или после выхода из окружения средствами рабочего стола, в зависимости от настроек VNC-сервера, рабочая сессия пользователя может закрыться с остановкой всех используемых программ, или продолжать работу и быть доступной снова при повторном подключении к VNC-серверу.
4. Тюнинг VNC-клиента
Большое количество передаваемой на экран информации влечет за собой повышенные требования к скорости канала - к его пропускной способности и времени передачи пакетов. Нахватка пропускной способности приводит к некомфортным задержкам при больших изменениях показывамой на экране информации - открытии новых окон, скроллинге и т.д. Особенно большие задержки будут возникать при показывании фотографий и других изображений или элементов интерфейса, имеющих большое количество цветов и сложные формы.

Главный параметр, который влияет на объем передаваемых данных - алгоритм кодирования передаваемой графики. Для уменьшения объема и, соответственно, ускорения работы, рекомендуется использовать алгоритмы Tight, ZLib, ZRLE - по сравнению с несжатыми данными (Raw), они обеспечивают сжатие в десятки раз, заметно нагружая процессор. Эти алгоритмы кодирования обеспечивают комфортную работу даже на каналах со скоростью 256-512 Кбит/сек.

Для сокращения объема передаваемой по сети информации также можно устанавливать высокий уровень сжатия (Compression Level, Compression Value), низкий уровень качества JPEG (JPEG Quality) и включать режим уменьшения количества цветов (-bgr233, Restricted colors). Самый большой эффект из них при заметном снижении качества изображения дает режим уменьшения количества цветов - объем передаваемой информации уменьшается в 1.5-3 раза, соответственно, в 1.5-3 раза ускоряется отображение на экране.

JPEG применяется алгоритмом кодирования Tight для сжатия участков экрана, содержащих фотографии и другие сложные изображения с большим числом цветов. Использование Tight+JPEG сокращает в 2-5 раз объем передаваемых при этом данных. Другие алгоритмы кодирования JPEG не поддерживают.

1. Выпадающего меню «Система -> Параметры»

Объем передаваемых данных и скорость отображения на канале 1 Мбит/сек при открытии выпадающего меню «Система -> Параметры» (на рисунке меню выделено зеленым пунктиром):

5. Частые проблемы
Не удается подключиться к VNC-серверу
Нужно проверить:
  1. есть ли доступ к интернету;
  2. отвечает ли виртуальный сервер на пинги;
  3. запущен ли на виртуальном сервере VNC-сервер;
  4. нет ли по пути файервола, закрывающего доступ к TCP-порту VNC-сервера;
  5. правльно ли указан номер дисплея или TCP-порт VNC-сервера (номер порта = 5900 + номер дисплея).
Медленная работа через достаточно быстрый канал
Если VNC-клиент не может согласовать с VNC-сервером использование алгоритм кодирования графики с компрессией данных, выбирается алгоритм по умолчанию - Raw, который передает данные без сжатия. Также кодирование без сжатия или с низким уровнем сжатия может автоматически выбираться VNC-клиентом при работе через быструю локальную сеть. Данную проблему можно исправить, принудительно указав в настройках VNC-клиента алгоритм кодирования с высоким уровнем сжатия - ZLib, ZRLE, Tight.

Однако, для некоторых сочетаний клиента и сервера такое решение может быть бесполезным из-за ошибок в согласовании алгоритма кодирования. Например, клиент TightVNC с сервером RealVNC часто могут работать только с кодировкой Raw. Решением в этом случае будет смена VNC-клиента или VNC-сервера.