Терминальный сервер - это сервер, на котором одновременно работают сессии многих пользователей. Программы запускаются и считают на нём, а на экран сотрудника уходит только изображение; обратно летят нажатия клавиш и движения мыши. У человека на столе может стоять слабый ноутбук или тонкий клиент - производительность определяет сервер.
В Windows это реализовано ролью Remote Desktop Services, в обиходе её до сих пор зовут терминальным сервером по старому названию Terminal Services. Разберём, как оно устроено внутри, сколько железа просит и во что обходится по лицензиям.
История началась с мейнфреймов. Компьютер был один, и второй такой позволить себе не могли, поэтому к нему подключали десятки «немых» терминалов - клавиатура плюс экран, без собственных вычислений. Работа шла на центральной машине.
Потом персоналки подешевели, и маятник качнулся в другую сторону: мощность разъехалась по рабочим столам. К концу девяностых выяснилось, что у такой схемы своя цена - сотня разных машин, на каждой своя версия программы, свои сбои и свой админ с флешкой.
Маятник качнулся обратно. Только теперь центральная машина - обычный x86-сервер, а «терминал» - любое устройство с клиентом RDP. Схема выжила не из ностальгии: она решает конкретную задачу, когда людей много, задачи у них одинаковые, а данные должны лежать в одном месте.
Сотрудник запускает клиент, вводит адрес сервера и логин. Как устроен сам терминальный доступ и протокол RDP, разбирали отдельно. Дальше по протоколу RDP открывается сессия - изолированное окружение со своим рабочим столом, своим профилем и своими запущенными процессами. Соседняя сессия на том же сервере её не видит.
Сервер отдаёт клиенту сжатое изображение экрана, обновляя только изменившиеся области. Поэтому канал нужен скромный: тексту и таблицам хватает сотни-другой килобит в секунду на человека, тяжело становится на видео и анимации. Задержка тут важнее ширины канала - при пинге за 150-200 мс работа начинает раздражать, даже если скорость приличная.
Один нюанс, который часто подают неверно. Общие библиотеки программ действительно загружаются в память один раз и используются всеми сессиями - это экономит память. Но у каждого пользователя остаются свои документы, свои открытые окна и свой кусок памяти под них, и вот он умножается на число людей.
В маленькой конторе всё это живёт на одной машине, но роли стоит различать - на них завязаны и безопасность, и лицензии.
RD Session Host - собственно сервер сессий, где работают люди. Это ядро конструкции, всё остальное навешивается вокруг него.
RD Connection Broker - распределяет подключения между несколькими Session Host и, что важнее, возвращает человека в его прежнюю сессию после обрыва связи. Без брокера при переподключении легко попасть на другой сервер и увидеть чистый рабочий стол вместо своих открытых документов.
RD Gateway - шлюз, который заворачивает RDP в HTTPS и публикует его наружу через 443-й порт.
RD Web Access - веб-страница со списком опубликованных приложений.
RD Licensing - сервер лицензий, который выдаёт RDS CAL. Пока его нет, RDS работает в льготном режиме 120 дней, после чего пускать в сессии перестаёт. То есть роль эта не опциональная, просто её отсутствие вскрывается не сразу.
В маленьком развёртывании Session Host и Licensing нередко живут на одной машине. Брокер добавляют, когда серверов сессий становится больше одного.
Голый RDP на 3389-м порту в интернет не выставляют. Это первая цель сканеров и брутфорса. Наружу публикуют через RD Gateway или прячут за VPN, плюс двухфакторная аутентификация и блокировка после серии неудачных входов.
Три вещи, которые постоянно путают, а иногда и противопоставляют, хотя они про разное.
| Терминальный сервер (RDS) | VDI | VPN | |
|---|---|---|---|
| Что даёт пользователю | Сессию на общей ОС сервера | Отдельную виртуальную машину со своей ОС | Сетевой доступ к офисной сети |
| Где считаются данные | На сервере | На сервере | На компьютере пользователя |
| Изоляция пользователей | На уровне сессий, ядро общее | Полная, у каждого своя ОС | Не применимо |
| Требования к железу | Умеренные | Заметно выше | Минимальные |
| Когда уместно | Много людей с однотипными задачами | Нужны свои ОС, права админа, тяжёлая графика | Нужен доступ к ресурсам, работа идёт локально |
VPN терминальному серверу не конкурент. Скорее сосед: связку «VPN плюс RDP внутри» используют сплошь и рядом именно для того, чтобы не публиковать сессии наружу. Формулировка «терминальный сервер вместо VPN» на деле означает «выставим RDP в интернет», и это плохая идея.
С VDI разница не в качестве, а в цене изоляции. Если пятидесяти операторам нужен один и тот же набор из браузера, 1С и телефонии, поднимать пятьдесят виртуальных машин с отдельными Windows незачем. Если же половине нужны права администратора и свой софт, сессии на общей ОС начнут мешать друг другу, и тогда VDI оправдан.
Здесь чаще всего и промахиваются - в обе стороны. Цифры зависят от профиля нагрузки, поэтому считать нужно от него. Само по себе число сотрудников не говорит ни о чём.
| Профиль | Что делает человек | Память на сессию | Пользователей на ядро |
|---|---|---|---|
| Лёгкий | Одна учётная программа, браузер в пару вкладок | 1-2 ГБ | 8-12 |
| Средний | Office, 1С, десяток вкладок, PDF | 2-4 ГБ | 4-8 |
| Тяжёлый | ERP, крупныÐ |