Особенно нетерпеливых отсылаю сразу в конец статьи где будет ссылка на готовый .deb-пакет для установки.

А для всех остальных…

Что это такое и для чего это нужно


В первую очередь данное решение можно использовать как очень бюджетный вариант реализации безопасного доступа к интернет сотрудникам небольшой фирмы.

История номер один. (основано на реальных событиях)


Предположим бухгалтеру, в конце отчетного периода, когда все «на ушах», на
эл.почту приходит страшное письмо от «Налоговой Полиции» в котором говорится о том, что её фирма попала под жуткую проверку и ей следует немедленно ознакомиться с официальным документом который находится в прикреплённом к письму файле.
В панике бухгалтер пытается открыть прикреплённый файл и… все компьютеры фирмы подключенные в данный момент к внутренней локальной сети получают порцию вируса щифровальщика который парализует работу фирмы не не один день.

В случае с реализацией доступа через терминал на всех! компьютерах блокируется прямой доступ в интернет. Если работнику понадобилось в сеть для серфинга (почта, скайп, мессенджер) то он просто щелкает по иконке на рабочем столе и попадает на альтернативный рабочий стол где он может делать всё что угодно. В случае заражения при просмотре почты или любым другим способом вирус попадает на одинокую локальную машину (терминальный сеанс) которая не имеет доступа к сети предприятия и другим компьютерам. Так же в данном сеансе не хранятся важные документы и бухгалтерские базы данных. Поэтому ущерба, даже при полном удалении информации внутри сеанса, не будет абсолютно ни какого. Так же терминальную сессию можно просто свернуть в трей и открывать по мере необходимости, если пикнуло сообщение от мессенджера или поступил скайп звонок.

История номер два. (основано на реальных событиях)


Предположим один из сотрудников принес на флешке взломанную лицензионную программу которую поставил к себе на компьютер, в данном случае не рассматриваем доменные структуры AD, речь идет о небольших фирмах где не содержат штат сетевиков. После установки данной программы она спокойно может пожаловаться разработчикам через интернет что на компьютере по такому то IP кто то поставил взломанную версию и спокойно пользуется.
Дальше дело техники. Причем разборки могут быть очень серьёзные.
При реализации варианта терминал сервера данный вариант так же не проходит так как у локального компьютера просто нет доступа к сети и любая программа шпион не сможет вынести сор из избы.

Предисловие


Данное руководство, в первую очередь, ориентировано на начинающих системных администраторов желающих разобраться в сути вопроса. Так что для продвинутых в тексте может оказаться много лишнего. В руководстве постараюсь максимально подробно описать процесс настройки linux терминального сервера использующегося для безопасного интернет серфинга и описать решение известных проблем.

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

Сборка и тестирование производилось на виртуальной машине от virtualbox. При использовании чистого железа так же могут возникнуть проблемы с настройками драйверов. Из программного обеспечения были использованы Ubuntu 16.04 LTS server / x11RDP 7.6 / xRPD 0.9.2. На других версиях данное решение не тестировалось и не проверялось.

XRDP


XRDP является специальным прокси-сервером который прослушивает RDP port 3389 на предмет внешних запросов. Принимает на него подключения и далее, в зависимости от настроек, переадресовывает их на внутренние порты OS.

Для установки скомпилируем необходимые пакеты:

sudo apt install -y git autoconf libtool pkg-config libxrandr-dev nasm libssl-dev libpam0g-dev libxfixes-dev  libx11-dev  libxfixes-dev libssl-dev libxrandr-dev libjpeg-dev flex bison libxml2-dev intltool xsltproc xutils-dev python-libxml2 xutils libpulse-dev make libfuse-dev

По умолчанию в репозиториях UBUNTU 16.04 находится пакет xRDP v0.6.0 в котором я не смог найти решения для рализации передачи звука. Поэтому собирать новую версию xRDP будем из исходников.

На многих сайтах советуют клонировать свежую версию при помощи git:
git clone git://github.com/FreeRDP/xrdp.git

Но, в данном случае, возникает риск того что, на момент тестирования, вы можете столкнуться с совершенно новой версией имеющей значительные отличия от v0.9.2 и что то может пойти не так. Поэтому скачиваем и распаковываем фиксированный пакет XRDP v0.9.2 с сайта разработчиков.

cd~ 
wget https://github.com/neutrinolabs/xrdp/archive/v0.9.2.zip
unzip v0.9.2
mv xrdp-0.9.2 xrdp 

Перейдем в каталог с XRPD и начнем компиляцию:

cd ~/xrdp
./bootstrap

На данном этапе необходимо указать компилятору что в готовую сборку необходимо добавить модуль поддержки звука. Более подробно об этом можно прочесть в файле который теперь находится на вашем диске в каталоге с исходниками XRDP.

cat ~/xrdp/sesman/chansrv/pulse/pulse-notes.ubuntu.txt

Установим библиотеки необходимые для переадресации звука.

sudo apt-get install -y libjson0-dev libsndfile1-dev

Добавляем ключ активирующий звук --enable-load_pulse_modules при конфигурации пакета, собираем и устанавливаем.

./configure --enable-load_pulse_modules --enable-jpeg --enable-fuse --disable-ipv6
make
sudo make install

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

sudo mkdir /usr/share/doc/xrdp
sudo cp /etc/xrdp/rsakeys.ini /usr/share/doc/xrdp/rsakeys.ini

Добавляем XRDP в автозагрузку. Для автозагрузки будем использовать systemd:

sudo sed -i.bak 's/EnvironmentFile/#EnvironmentFile/g' /lib/systemd/system/xrdp.service
sudo sed -i.bak 's/sbin\/xrdp/local\/sbin\/xrdp/g' /lib/systemd/system/xrdp.service
sudo sed -i.bak 's/EnvironmentFile/#EnvironmentFile/g' /lib/systemd/system/xrdp-sesman.service
sudo sed -i.bak 's/sbin\/xrdp/local\/sbin\/xrdp/g' /lib/systemd/system/xrdp-sesman.service
sudo systemctl daemon-reload
sudo systemctl enable xrdp.service 

Перезагружаемся.

sudo reboot

Проверим прошла ли установка:

xrdp -v

$ xrdp: A Remote Desktop Protocol server.
Copyright © Jay Sorg 2004-2014
See www.xrdp.org for more information.
Version 0.9.2

Если все сделано верно то теперь можно попробовать подключиться к серверу при помощи любого RDP клиента с другого компьютера. Или установить на этой же тестовой машине клиент freerdp:

sudo apt install -y freerdp-x11

И подключится локально внутри системы.

xfreerdp /v:127.0.0.1

Дальше стартовой заставки дело не пойдет потому что у нас пока не установлена серверная часть ПО которой прокси сервер XRDP был бы должен передать управление.

x11RDP


В качестве серверной части могут быть использованы серверные модули поддерживающие разные протоколы передачи данных. В данном варианте будем использовать x11RDP v7.6.

Небольшое отступление


Все дело в том, что установленный нами ранее прокси XRDP 0.9.2 не может, без доработок, перебрасывать подключения к предыдущей версии сервера x11RDP v7.1 на котором, в свою очередь, отсутствует известная проблема с переключением раскладок клавиатуры ru/en как при создании нового сеанса так и при переподключении к старой сессии.

А при использовании старой версии прокси XRDP 0.6.0 с которой работает сервер x11RDP v7.1 мы не сможем осуществить переброс звука так как XRDP 0.6.0 не поддерживает ключ --enable-load_pulse_modules.

Для установки x11RDP v 7.6 вернемся в каталог:

cd ~/xrdp/xorg/X11R7.6

Создадим каталог для установки пакета и произведем сборку.

sudo mkdir /opt/X11rdp
time sudo ./buildx.sh /opt/X11rdp

Сборка происходит достаточно долго 15-30 мин. Команда time позволит нам увидеть, по окончании процесса процесса, сколько было затрачено времени.

Создадим симлики:

sudo ln -s /opt/X11rdp/bin/X11rdp /usr/local/bin/X11rdp
sudo ln -s /usr/share/fonts/X11 /opt/X11rdp/lib/X11/fonts

Теперь у нас есть и RDP прокси и RDP сервер которому прокси передаст управление. Но нет графического приложения которое RDP сервер сможет вывести на экран.

Для дальнейшего тестирования, чтобы убедиться что все установки прошли успешно, установим графический эмулятор терминала xterm.

sudo apt -y install xterm

И попробуем подключиться к серверу со стороны, или локально если ранее установили freerdp.

xfreerdp /v:127.0.0.1

Теперь из меню необходимо выбрать x11RDP чтобы указать прокси какому именно серверу должно быть передано управление и ввести логин и пароль к ubuntu серверу.

Если все верно то на экране мы увидим графический интерфейс терминала xterm.

Настройка языковой консоли и режима переключения языков


Почти все основные настройки клавиатуры в ubuntu осуществляются при прмощи пакета setxkbmap.

Для начала закроем терминальную сессию и вернемся в консоль нашего ubuntu сервера
посмотрим что творится с клавиатурой.

setxkbmap -print –verbose

$ keycodes: xfree86+aliases(qwerty)
types: complete
compat: complete
symbols: pc+us+ru:2+group(alt_shift_toggle)
geometry: pc(pc104)
xkb_keymap {
xkb_keycodes { include «xfree86+aliases(qwerty)» };
xkb_types { include «complete» };
xkb_compat { include «complete» };
xkb_symbols { include «pc+us+ru:2+group(alt_shift_toggle)» };
xkb_geometry { include «pc(pc104)» };
};

Теперь подключимся к серверу терминалов и в терминале xterm выполним ту же команду:

setxkbmap -print –verbose

$ Trying to build keymap using the following components:
keycodes: xfree86+aliases(qwerty)
types: complete
compat: complete
symbols: pc+us+inet(pc105)
geometry: pc(pc105)
xkb_keymap {
xkb_keycodes { include «xfree86+aliases(qwerty)» };
xkb_types { include «complete» };
xkb_compat { include «complete» };
xkb_symbols { include «pc+us+inet(pc105)» };
xkb_geometry { include «pc(pc105)» };
};

Обратим внимание на несоответствие в показаниях. На нашем ubuntu сервере все нормально:
symbols: pc+us+ru:2+group(alt_shift_toggle)

Есть русская консоль и определены клавиши переключения языка alt_shift. На сервере терминалов противоположность:

symbols: pc+us+inet(pc105)

Есть только английский язык и клавиши переключения языка не определены.

Есть еще одна странность. Локально, на сервере ubuntu, модель клавиатуры определилась как pc104:

geometry: pc(pc104)

А на сервере терминалов как pc105:

geometry: pc(pc105)

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

Вернемся к ubuntu серверу и посмотрим что установлено в конфигурационных файлах системы
по умолчанию

cat /etc/default/keyboard

$ # KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL=«pc105»
XKBLAYOUT=«us,ru»
XKBVARIANT=","
XKBOPTIONS=«grp:alt_shift_toggle,grp_led:scroll»
BACKSPACE=«guess»

Установим hwinfo (сборщик информации об аппаратной части системы) и посмотрим информацию о железе:

sudo apt install -y hwinfo
sudo hwinfo | grep XkbModel

$ XkbModel: pc104

В итоге аппаратно модель клавиатуры, в нашем случае определяется как pc104, в файлах конфигурации системы прописано обращение к устройству pc105. На локальном сервере определяется pc104, на сервере терминалов pc105. Из за данного несоответствия, в частности, возникает несколько глюков. Многие пишут что не могут справиться с настройкой локали на терминальном сервере. У некоторых пропадает русификация после переподключении к отвалившейся сессии и те пе.

Откроем в любом текстовом редакторе (я использую в примере редактор nano) файл конфигурации системы и исправим тип клавиатуры по умолчанию в соответствии с данными полученными от hwinfo:

sudo nano /etc/default/keyboard

XKBMODEL=«pc104»

Файл клавиатурных настроек программы XRDP 0.9.2 находится в файле
/etc/xrdp/xrdp_keyboard.ini. Эти данные прокси передает xRDP серверу как данные клиента который производит подключение. Откроем его и добавим в конец данного файла блок поддержки русской локали.

> Источник

Предварительно исправив модель клавиатуры на верную model=pc104 (в оригнальной версии установлена pc105):

sudo nano /etc/xrdp/xrdp_keyboard.ini

Добавляем в конец файла:

[rdp_keyboard_ru]
keyboard_type=4
keyboard_subtype=1
model=pc104
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru

[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru

Перезагружаемся.

Подключаемся к терминальному серверу. Проверяем клавиатурные настройки:

setxkbmap -print -verbose

$ Trying to build keymap using the following components:
keycodes: xfree86+aliases(qwerty)
types: complete
compat: complete
symbols: pc+us+ru:2+group(alt_shift_toggle)
geometry: pc(pc104)
xkb_keymap {
xkb_keycodes { include «xfree86+aliases(qwerty)» };
xkb_types { include «complete» };
xkb_compat { include «complete» };
xkb_symbols { include «pc+us+ru:2+group(alt_shift_toggle)» };
xkb_geometry { include «pc(pc104)» };

Все в порядке, клавиатура определяется верно:

geometry: pc(pc104)

и появился русский язык с переключением по alt_shift. Закрываем сеанс оставляя его работать в фоне и переподключаемся к нему же снова чтобы проверить что не возникает известной проблемы при которой локаль пропадает при переподключении к уже открытому ранее сеансу.

ЗВУК


В ubuntu старше 10.10, по умолчанию, за вывод звука отвечает сервер pulseaudio. В десктопных дистрибутивах он уже установлен. В серверных нет. Поэтому установим его.

sudo apt install -y pulseaudio

Посмотрим и запишем номер версии пакета который по умолчанию установился в нашу систему:

pulseaudio –version

$ pulseaudio 8.0

Теперь нам необходимо собрать библиотеки для переадресации звука. Подробно об этом написано в файле с исходниками XRDP который мы уже просматривали ранее при сборке XRDP.
cat ~/xrdp/sesman/chansrv/pulse/pulse-notes.ubuntu.txt

Для начала скачаем исходники pulseaudio. Сделать это можно двумя способами.

1. Скачать общую версию с сайта разработчиков (freedesktop.org/software/pulseaudio/releases/) скачивать надо именно ту версию которую мы определили ранее. В нашем случае pulseaudio 8.0

2. Более правильно — подключить deb-src репозитории системы и получить исходники которые использовали авторы данного ubuntu дистрибутива.

По умолчаню ссылки на исходники в ubuntu отключены. Для подключения отредактируем файл списка репозиториев:

sudo nano /etc/apt/sources.list

Необходимо удалить значки # перед всеми списками deb-src репозиториев.

Было:
deb ru.archive.ubuntu.com/ubuntu xenial universe
#deb-src ru.archive.ubuntu.com/ubuntu xenial universe
deb ru.archive.ubuntu.com/ubuntu xenial-updates universe
#deb-src ru.archive.ubuntu.com/ubuntu xenial-updates universe

Стало:
deb ru.archive.ubuntu.com/ubuntu xenial universe
deb-src ru.archive.ubuntu.com/ubuntu xenial universe
deb ru.archive.ubuntu.com/ubuntu xenial-updates universe
deb-src ru.archive.ubuntu.com/ubuntu xenial-updates universe

В противном случае получим ошибку:
$ E: Вы должны заполнить sources.list, поместив туда URI источников пакетов

Скачиваем исходники:

cd ~
sudo apt update
apt-get source pulseaudio
sudo apt-get build-dep pulseaudio
cd ~/pulse*
time dpkg-buildpackage -rfakeroot -uc -b

Переходим в установочный каталог XRDP:

cd ~/xrdp/sesman/chansrv/pulse/

Исправляем make файл.

sudo nano Makefile

В строчке:

PULSE_DIR = /home/lk/pulseaudio-1.1

Меняем путь на наш каталог с библиотеками pulseaudio.Причем, обратите внимание, конструкции типа ~/pulseaudio* в данном случае не проходят. Необходимо точно прописать адрес каталога.
PULSE_DIR = /home/admin/pulseaudio-8.0

Замените admin на имя пользователя в Вашей системе. Сохраняем исправленный файл и делаем:

sudo make

Если все выполнено верно в каталоге будут скомпилированы 2 новых библиотеки
module-xrdp-sink.so и module-xrdp-source.so.

Осталось только скопировать их в рабочий каталог с библиотеками сервера pulseaudio:

sudo chmod 644 *.so
sudo cp *.so /usr/lib/pulse*/modules

После перезапуска звук будет активирован.

Осталось установить любую удобную графическую оболочку. Для терминального сервера желательно что то не ресурсоемкое.

XFCE
Минимальный набор элементов:

sudo apt-get install xfce4

Полный набор элементов:

sudo apt-get install xubuntu-desktop 

LXDE
Минимальный набор элементов:

sudo apt-get install lxde-core

Полный набор элементов:

sudo apt-get install lxde

В зависимости от версии установленной графической оболочки, для её запуска возможно понадобится настроить файл .xsession

Для LXDE

echo lxsession > ~/.xsession


Для XFCE

echo xfce4-session > ~/.xsession

Готовый пакет для установки


github.com/suminona/xrdp-ru-audio
в который включены:

XRDP v0.9.2 + скомпилированные библиотеки pulseaudio 8.0 + исправленный keyboard.ini файл для поддержки русификации. Те же кто не хочет сам собирать бакенд x11RDP v7.6 по этой же ссылке могут скачать готовый deb пакет бакенда xorg v.0.2.0. Порядок установки для совсем ленивых

sudo apt-get -y install pulseaudio
sudo dpkg -i xrdp-v0.9.2-rus-audio.deb
sudo dpkg -i xorgxrdp-0.2.0.deb
sudo apt install -y xfce4 chromium-browser
sudo reboot

Повторюсь что пакеты собирались практически на коленках и работа протестирована только
на ubuntu 16.04 server. Работоспособность данных .deb-пакетов на других системах не гарантирована.
Поделиться с друзьями
-->

Комментарии (39)


  1. kostus1974
    19.05.2017 17:14
    +3

    для тру неплохо было бы в самом начале сказать, что это вообще, как примерно работает и какие задачи решает.


    1. i-vasil
      19.05.2017 19:31

      Спасибо за замечание добавил в начало статьи.


      1. justhabrauser
        21.05.2017 13:03
        +2

        Я бы переформулировал в нечто вроде «Удобный для Windows-клиента способ подключения к Linux-based серверу терминалов».
        Но и заголовок покороче и пожелтее (alizar-style: "Ученный изнасиловал журналиста! Простой доступ Windows-клиентов к серверу терминалов Ubuntu". «Пошаговое руководство» — рулит.
        Ну и «почему так, а не иначе»:
        * для связки Linux-Linux в ЛВС таки проще голый X11/Xorg (но именно и что Linux-Linux и ЛВС, т.к. оверхед там — мама не горюй)
        * Связка Windows > Linux:
        ** Xorg — жуткий геморрой (со стороны Windows)
        ** VNC — как уже человек сказал — жуткий расход RAM, даже когда никто не работает
        ** NX — открытый вариант безнадежно устарел, но вполне работоспособно пока (хотя это жуткие костыли)
        ** X2Go — на базе NX, надо будет потыкать палочкой
        ** XRDP — тоже костыли, но наиболее удобно для клиента Windows

        И да — у меня пока-что на Fedora 25 не завелось. Пакеты из официальных репо, матерится на нечто вроде «у нас в консоли #12 уже крутится какой-то xserver — местов нет».
        Надо бы еще развернуть run level (5?), открытие портов, настройки X11/Xorg, трафик и нагрузку на CPU/RAM.
        Короче — «Show must go on» (tm)


        1. kvaps
          21.05.2017 21:42

          Прошу прощения, поставил вам минус, хотел плюс, ох уж этот мобильный хабр…
          upd: Компенсировал в карму:)



  1. tzps
    19.05.2017 20:01

    А как у xRDP с производительностью в 4К? Есть шанс использовать повседневно?


    1. i-vasil
      19.05.2017 20:06

      Не тестил в 4К максимум работали на fullHD.
      В теории все зависит от мощности самого сервера на котором развернут терминал, от количества одновременно подключившихся и от ширины канала связи пользователь сервер. Но, как правило, это решение только для 2D серфинга. Причем для нормальной скорости в большинстве случаев приходится зажимать битность цвета на 15-16bit не выше.


    1. Banzy
      19.05.2017 20:56

      Как раз на днях искал варианты исполнения для задачи: Пользователю на сервере выдать 2 монитора с 4К с для нормальной работы с видео.
      Кроме VDI сценариев с NVidia GRID вообще то и не видно альтернатив. Но тут узал что новый RDS в Win2016 умеет работать с NVidia GRID и раздавать мощности видеоадаптера по сессиям на RDS сервере. На следующей недели буду бестить оба сценария, но крайне интересно что покажет из себя новый RDS on WinSrv 2016.


      1. happyproff
        20.05.2017 09:28
        +1

        Напишите здесь кратенько о результатах, если не затруднит.


      1. kvaps
        20.05.2017 15:10

        Spice имеет отличную скорость работы, поддерживает несколько мониторов и умеет подстраивать разрешение на лету, а так же умеет пробрасывать usb-устройства.
        Недавно в Linux Kernel 4.10 реализовали виртуализацию GPU для KVM, правда я ее еще пока что не пробовал, так что насколько она производительная сказать не могу.


  1. radiolok
    19.05.2017 20:43
    +1

    Круто! Спасибо огромное! Как раз на днях хотел заняться подобным, а тут такой материал. Докладываю — из-под одной Xen виртуалки на ubuntu 16.04 в другую на win10 все пашет. И звук и видео. github-овские пакеты сразу запахали. FullHD на youtube проигрывается без лагов.
    Нагрузки много, но у меня ни одной видеокарты в виртуалку не проброшено.


    tzps, у меня монитор 2560*1080, не 4К конечно, но все-таки. Правда надо учитывать что у меня одна машина и между виртуалками файлы перегоняются по сети со скоростью 140-150 мбайт/сек


  1. proctoleha
    20.05.2017 08:40

    У нас именно небольшое предприятие. И все вроде хорошо, но один вопрос, возможно тупой: у главбуха куча клиентов типа Сбербанк, Россельхозбанк и еще что-то. Как организовать работу этих клиентов? Все лезут в сеть по разному, кто-то vpn поднимает, кто-то просто через https.


    1. justhabrauser
      20.05.2017 09:57
      +1

      Отвечу за человека — никак. Windows only. Особенно Сбер с их странным ключиком — этот даже не на каждой Windows работает нормально.


    1. kvaps
      20.05.2017 16:08

      Отдельная Windows-виртуалка + Spice, для проброса usb-устройств


  1. i-vasil
    20.05.2017 10:19

    По настройке под linux надо смотреть предметно конечно. Если запустить под linux не получится то отдельно сделать 1 терминальный сеанс под windows. И никто же не мешает в терминальном сеансе для главбуха повесить все варианты клиентов. И она при подключении к терминалу может с ними нормально работать не ставя под угрозу сетку. В случае падения сеанса он восстанавливается из чистого бэкапа за 1 мин. Другое дело если кодировщики зашифруют весь её локальный комп. Вместе с .DOC файлами и отчетными базами за последний квартал. Тут идея в том чтобы вынести «за скобки» локальной сети всё ПО которое, для работы, должно иметь доступ к интернету а остальное оставить внутри.


  1. unwrecker
    20.05.2017 10:22
    +1

    Хотелось бы сравнения с x2go, который уже есть в репозитории, и ставится/запускается всякого труда. Разве что клиент под винду у него свой, а не mstsc.


    1. i-vasil
      20.05.2017 10:55
      +1

      В моём случае одним из основных условий заказчика было использование на клиентских станциях только штатно установленного ПО без дополнительных вмешательств. Поэтому x2go не рассматривался изначально. Опять же плюсом RDP, если наплевать на безопасность, является возможность подключения к серверу из любого места (дома, интернет кафе, отеля на отдыхе, от друзей) винда она есть везде да и через linux проблем нет — штатный клиент. А таскать с собой флешку с установщиком доп клиента, да и мало где, на стороне, разрешат её поставить. Представьте ночной звонок от того же бухгалтера которая что то забыла сделать на работе и ей, максимально срочно, необходимо реализовать доступ с ноутбука её знакомого (который вы и в глаза то не видели что там установлено) к терминал сеансу в конторе. И надо по телефону объяснить куда и что надо нажать.
      Если использовать что то типа х2go, шифрование канала и те пе. то мне тогда проще прокинуть реверсивный ssh туннель + freerdp внутри сети. Та же передача VNC/RDP трафика внутри ssh туннеля. Когда я пробовал x2go мне не понравилась скорость и качество отрисовки картинки по сравнению с RDP сеансом. Но это было достаточно давно возможно в новых версиях что то изменилось.


      1. kvaps
        20.05.2017 15:58

        А таскать с собой флешку с установщиком доп клиента

        Зачем таскать с собой флешку? — клиент всегда можно скачать на официальном сайте или прислать по почте вместе с инструкцией.


        Представьте ночной звонок от того же бухгалтера которая что то забыла сделать на работе и ей, максимально срочно, необходимо реализовать доступ с ноутбука её знакомого (который вы и в глаза то не видели что там установлено) к терминал сеансу в конторе. И надо по телефону объяснить куда и что надо нажать.

        Как показывает практика, объяснять придется в обоих случаях, и в обоих случаях всегда желательно иметь подробную инструкцию на готове.


        Когда я пробовал x2go мне не понравилась скорость и качество отрисовки картинки по сравнению с RDP сеансом

        Это высказывание немного странное. Так как насколько я понимаю x2go заметно быстрее vnc и xrdp как раз за счет того что x2go — это протокол семантический и по своей структуре он больше похож на нативный rdp на windows.
        В отличии от vnc или того же xrdp, который просто проксирует рабочий стол, здесь в определенный момент времени передаются только определенные объекты, а не вся картинка целиком. Плюс ко всему здесь имеется куча дополниительных фишек, недоступных в вышеупомянутых протоколах.
        Так что думаю, что вы все же недооценили x2go и напрасно обошли его стороной.


        В моём случае одним из основных условий заказчика было использование на клиентских станциях только штатно установленного ПО без дополнительных вмешательств

        Да, это может быть проблемой, соглашусь. Здесь ваше решение подходит как нельзя лучше.


        Опять же плюсом RDP, если наплевать на безопасность, является возможность подключения к серверу из любого места (дома, интернет кафе, отеля на отдыхе, от друзей) винда она есть везде да и через linux проблем нет

        А здесь нет. Не надо плевать на безопасность :)
        Конкретно для таких случаев я бы предложил вам попробовать Guacamole — он поможет вам организовать доступ к тому же rdp или vnc прямо из браузера, который можно защитить HTTPS и впредь спать спокойно ;)


  1. justhabrauser
    20.05.2017 11:10

    Автору — респектище!
    Крайний раз, когда я пробовал xrdp — это была стройная система костылей и подпорок насчет RDP <> VNC <> X11.
    Сейчас, судя по всему, путь спрямили до RDP <> X11.
    Note: автору — x11 != xorg; но это так, копирайтные заморочки :-)

    Для любителей/профессионалов RH-based (например — Fedora 25):

    sudo dnf install xrdp # автоматом ставится xorgxrdp
    sudo chkconfig xrdp on # да, я ретроград
    sudo service xrdp start
    

    В результате можно коннектиться из любой венды по RDP.
    Причем там на выбор сеанс Xorg (получаем чистый экран небесно-голубого цвета) или Xvnc (получаем нечто вроде «Хьюстон, у нас проблемы»)


  1. Spider55
    20.05.2017 11:12

    Такая схема жутко жрёт оперативку. Объединение страниц памяти конечно помогает, но слабо.
    Windows based терминальный сервер справляется с подобной ситуацией в разы проворнее.
    Изящного решения я, увы, не нашёл :(


    1. justhabrauser
      20.05.2017 12:33

      Там потому что VNC, которое забивает сеансы на всех юзеров сразу (независимо от пользуются они этой сессией или нет).
      Windows-based — таки проворнее (там же родное), но а) стоит денег и б) небезопасно (здесь автор на 146% прав).
      Изящное решение Linux-Linux — X11/Xorg. Но это именно и только в ЛВС (потому что жрет уже трафик, а не оперативу).
      Изящного решения Win-client <> Lin-server — таки да, таки нет. Костыли типа NX/X11-win-client/VNC — глючные и/или ресурсоемкие.
      Xrdp тоже, в принципе, костыль — но хотя бы удобен для клиента.


      1. Spider55
        20.05.2017 13:48

        Ну у меня без VNC — x11rdp вроде как и его sesman, да и не важно, сессии всегда открты как в виндах, так и в линухе, но виндам хватает 32 гиг на 16 пользователй, а линухи пухнут и крашатся с нехваткой памяти.
        По поводу не безопасно — только из-за этого и перешли.


        1. justhabrauser
          20.05.2017 19:36
          +1

          Коллега — или мы с Вами в разных вселенных — или я не знаю…
          Линух. Не может. Крашиться.
          Это технически невозможно.
          Note: нет, ну технически возможно, конечно… Если винт посыпался — тут без вариантов.

          А уж 32 гига на 16 юзеров под вендами… Закройте им pornolab, штоле.


          1. Spider55
            20.05.2017 20:37

            Ну может не так выразился, при попытке запустить очередное приложение происходит затуп на приличное время (до нескольких минут) и это может кончится либо открытием приложения, либо сообщением, что недостаточно свободной памяти. При этом у пользователей открыты FF с парой вкладок и OpenOffice Calc. И это ещё нет «нагрузки».
            А вот под вендами как раз всё всегда летало и львиная доля памяти простаивала свободной. При всё тех же задачах и даже более, на этом же железе.


  1. justhabrauser
    20.05.2017 13:57

    > а линухи пухнут и крашатся с нехваткой памяти
    Вы не любите кошек? Вы не умеете их готовить (tm).


    1. Spider55
      20.05.2017 20:37

      то то и оно, что непомерный жор необъясним. Просто такое ощущение, что каждый пользователь тупо запускает свой Linux, что не так конечно, но жёр памяти именно такой.


  1. akj
    20.05.2017 18:57

    Здравствуйте!
    Автор спасибо за статью, мне как новичку появился интерес повторить все это :)

    Вопрос, в случае если пользователь вышел в инет через терминал и далее скачал файл с инета, то передача этого файла к себе на комп будет простым copy/paste?
    И сохранятся ли ссылки или пароли при каждом повторном входе?


    1. i-vasil
      20.05.2017 19:08

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


      1. proctoleha
        20.05.2017 21:14

        Передача файла может реализовываться так же как в обычной локальной сети через создание общих папок

        Я проинстуктировал бухов, всё объяснил. И он работает под терминалом, и ему приходит грозное письмо от налоговой инспекции, описание которого есть в шапке статьи.

        Умный, но задёрганный бух сохраняет это письмо к себе на комп… и пытается прочитать.


        1. i-vasil
          20.05.2017 21:39

          Вот поэтому и отключаются все возможности передачи файлов. Что то надо — выполняй в терминале. Читай в терминале, редактируй в терминале, отвечай на письма там же. Если что то очень надо скачать на свой комп — попроси администратора.
          На самом деле пользователи очень быстро привыкают и неудобств не возникает.


          1. proctoleha
            20.05.2017 21:48

            Еще раз на пальцах. Я на аутсортинге, обслуживаю несколько компаний. И как я, физически, смогу бегать к каждой из них, для того, чтобы сохранить нужный файл? А файлы нужны, это непрерывный рабочий процесс компании.


  1. i-vasil
    20.05.2017 22:18

    ssh


    1. proctoleha
      20.05.2017 22:44

      Т.е. я должен быть жёстко привязан к стулу, и каждый раз реагировать на каждое письмо в обслуживаемой организации, к которой пришло письмо с вложенным файлом? А файлы в письмах идут десятками в день…

      И бухам еще клиенты разные нужны, например извращеный сбер.


      1. proctoleha
        20.05.2017 23:04

        Это я всё к тому, что только сёрфинг в Интернете не нужен никому. От слова совсем. Сегодня идёт обмен данными. Интернет сегодня — это повседневный рабочий инструмент. И сводить работу с глобальной сетью, только к сёрфингу — бессмысленно.


      1. i-vasil
        20.05.2017 23:06

        Давайте рассмотрим случаи когда файл полученный через интернет любым способом обязательно должен быть перемещен на внутренний компьютер пользователя.
        Если это документ что мешает его прочесть внутри терминала. Какой смысл скачивать его на локальную станцию? Распечатать на подпись — печатаем из терминала. Отсканировать с сетевого сканера и отправить обратно = терминал. Передать на рассмотрение директору = из своего сеанса в терминал сеанс директора.
        Локальная сеть не затронута никак. Вариант скопировать текст письма к себе = клипборд из терминал сеанса к себе локально в редактор и те пе.
        Если это установочный файл то тогда не пользовательское это дело обновлять драйвера и устанавливать… декс браузеры и vk плагины иначе в сети анархия начнется.
        Опишите тогда вариант при котором, в срочном порядке, интернет файл должен быть именно перемещен на локальную станцию без возможности решения задачи в терминал сессии. Буду думать.


        1. vp7
          21.05.2017 01:38

          Очень зависит от специфики вашей организации.
          К примеру, у вас есть контрагенты, с которыми нужно обмениваться счетами/документами.

          Исходящее направление:
          1. Бухгалтер формирует счёт в 1C, отправляет его клиенту по почте.
          2. Бухгалтер формирует акт выполненных работ в 1C, отправляет клиенту по почте, печатает, подписывает, сканирует, отправляет клиенту скан подписанного акта, кладёт этот скан в папочку «исходящие документы клиента XXX» и отправляет бумажную версию акта клиенту

          Входящее направление:
          3. Клиент прислал счёт/акт/что-либо ещё, этот документ нужно занести во внутреннюю систему документооборота. В крайнем случае — положить в папочку «входящие документы клиента XXX»
          4. Клиент прислал заполненный заказ в XLS (на основе отправленному ему ранее шаблона), заказ нужно скормить 1C'ке, которая из документа сделает счёт.
          5. Клиент прислал файл, который под OpenOffice'ом открыть никак не получится. И, к примеру, сказать клиенту «переделай всё под меня» не получится (начиная от всяких тендеров, где именно ваша организация заинтересована в получении заказа и это ваша проблема, что у сотни других всё открылось, а у вас — нет, заканчивая всякими налоговыми, которым глубоко наплевать на ваши проблемы, они просто выпишут штраф и не будут голову морочить).

          Т.е. основная проблема — всегда найдутся документы, которые должны пересекать периметр туда-обратно.
          В любом случае, ваше решение существенно лучше, чем ничего,… но, возможно, есть смысл пойти чуть по другому пути:
          1. Заблокировать обмен любыми данными между компьютерами сети (вынести каждый порт в отдельный VLAN, политику доступов настроить на маршрутизаторе)
          2. Настроить постоянный бекап общего хранилища (и разграничить права доступа — бухи могут смотреть только в свои папки, продавцы — только в свои)
          3. Настроить постоянный бекап локальных компьютеров
          4. Настроить антивирусную защиту (вдруг поможет?)

          Или пойти чуть дальше (но тут ещё вопрос — а готовы ли платить за лицензии?):
          1. У всех пользователей diskless терминалы
          2. Работа в терминальных сессиях (или в VDI)
          3. Антивирусы + бекапы

          Т.е. идти по пути максимального уменьшения «цены ошибки» с минимальным усложнением жизни пользователей, а не по пути максимального уменьшения риска заражения, но ценой очень больших сложностей для пользователей и нарушения бизнес-процессов (которые, вообще-то, компании денег приносят).


  1. disik
    23.05.2017 13:04

    Если не вспоминать про звук, то отлично работает на клиентской стороне VcXsrv — X-сервер для Windows.


  1. ufm
    23.05.2017 19:52

    Можно потыкать палочкой еще в xpra.


  1. avacha
    23.05.2017 23:07

    Хотелось бы подобную статью, но с пробросом USB-принтеров вместо звука. Пару лет назад пытался пробросить Canon.ы — неудачно. Kyocera 2035 вообще запустить не смог под никсами (да, рукожоп, только учусь)