Всем привет!
Сегодня хочу рассказать о двух случайно обнаруженных “фичах” известных протоколов, которые позволили сложиться “пазлу” из темы статьи.
И так, у сотрудника техподдержки есть необходимость подключаться к рабочему столу пользователя, что бы совместно что-то сделать. Раз нет TeamViewer, значить надо использовать что-то похожее, например VNC.Тут же “выплывают” проблемы:
компьютер пользователя может быть недоступен для компьютера сотрудника, например, находится в домашней сети за роутером (который так же может быть не доступен из внешних сетей)
пользователю нужно не только заранее установить VNC Server на свой компьютер, но и задать (и не забыть:) пароль от него, что бы сообщить его, когда понадобится, сотруднику
Эти проблемы решает первая “фича” - оказалось, что VNC позволяет организовать подключение “наоборот”, не с клиента на сервер, а с сервера на клиент. В системе Windows пользователь может установить, например, пакет TightVNC оставляя все опции, “по умолчанию”, и, не меняя и не выясняя случайно сгенерированный пароль, который теперь никому не понадобится:
Этот же пакет нужно будет установить сотруднику техподдержки, серверная часть ему не нужна, можно убрать ее из автозагрузки, а понадобится TightVNC Viewer запущенный в Listening mode
Теперь, по просьбе сотрудника техподдержки, пользователю будет достаточно выбрать меню Attach Listening Viewer
указать "ip_адрес_компьютера_сотрудника_техподдержки" и нажать на кнопку "Attach"
Если пользователи работают в Linux, то необходимой функциональностью обладает пакет x11vnc, который в debian ориентированных дистрибутивах может быть установлен командой:
$ sudo apt install x11vnc
Для предоставления своего рабочего стола сотруднику техподдержки пользователю будет достаточно набрать в терминале:
$ x11vnc -connect ip_адрес_компьютера_сотрудника_техподдержки
Если и сотрудник техподдержки работает в Linux, он может установить пакет tigervnc-viewer
$ sudo apt install tigervnc-viewer
и, перед оказанием помощи пользователю, запустить в терминале команду:
$ vncviewer -listen
СТОП! Как это “ip_адрес_компьютера_сотрудника_техподдержки”? А если (даже наверняка) это такой же “серый” адрес в локальной сети за роутером, как и у сотрудника?
Эту проблему решает вторая “фича” - оказалось что сервис SSH не только позволяет, благодаря опции GatewayPorts yes, установить подключение с компьютера сотрудника к SSH серверу и назначить внешний TCP порт для встречных соединений, которые можно “направить” в VNC viewer, но и сгенерировать этот номер динамически.
Команда будет выглядеть вот так (обратите внимание на 0, там где указывается номер внешнего порта):
ssh -R 0:localhost:5500 логин_сотрудника_техподдержки@ip_адрес_ssh_сервера
И, да, VNC viewer, в режиме listen, ожидает, по умолчанию, подключения на порту 5500, и теперь его можно ограничить только интерфейсом localhost
Теперь, если “ip_адрес_ssh_сервера” публичный, пользователи смогут предоставить свой рабочий стол, указав вместо “ip_адреса_компьютера_сотрудника_техподдержки” - “ip_адрес_ssh_сервера:сгенерированный_номер_порта”
Некоторой проблемой оказалось “выяснение” назначенного динамического порта, дело в том что в Linux терминале строка:
Allocated port NNNNN for remote forward to localhost:5500
прекрасно отображается, и сотрудник техподдержки может продиктовать его пользователю, но в Windows, не все SSH клиенты (например PuTTY) это делают, тут могу посоветовать MobaXTerm в нем все как в Linux
В завершении статьи остается только посочувствовать пользователям, которые вместо “каликанья” по “иконке” и сообщения оператору номера подключения в TeamViewer приходится запускать “страшные” программы с непонятными адресами, но мы на работе “боремся” с этим создав bat файл для пользователей Windows и используя Ansible для рабочих станций Linux, после которых на рабочем столе пользователя тоже появляется “иконка”, по которой можно “кликнуть” и ввести там 5 цифр, названных сотрудником техподдержки. Если статья вызовет интерес, можно будет написать продолжение на эту тему.
Еще, из “нехорошего”, трафик между пользовательским VNC и ssh сервером “летит” нешифрованный, тоже в планах поправить в будущем.
Так же, вероятно что MeshCentral или RustDesk окажутся более удобными решениями для тех, кто ищет альтернативу TeamViewer, буду рад почитать статьи на эту тему.
На этом все, всех с Новым годом, всех благ!
Комментарии (30)
andreymal
05.01.2023 22:59+3Ну вроде обе проблемы может решить Aspia
Для обхода NAT ставится роутер+релей (и если неохота просить пользователя вбивать настройки подключения к роутеру, можно собрать msi-пакет, преднастроенный на свой роутер), пользователь называет техподдержке ID и одноразовый пароль (прям как в тимвьювере) и техподдержка успешно подключается
Kanedias
05.01.2023 23:13Для "пробивки" NAT в итоге использую ZeroTier. Кто помнит Hamachi или Garena, тот сразу поймёт, что это.
Конечно, со скрипом, потому что это не совсем свободное ПО. Но работает как надо, честный p2p пинг на всех операционках, и использовать можно для любых целей, а не только для удалённого рабочего стола.
rionnagel
05.01.2023 23:40Да достаточно давно есть сервер с рипитером, и под винду и под линукс с веб интерфейсом для управления (где-то на форуме uvnc без лимитов выкладывали). Для саппорта делал "сервер" в виде одного exe, который, не имел опций и выдавал цифровой просто 6-значный id при запуске, подключался к репитеру и висел в ожидании подключения. Со стороны оператора клиент, где можно было ввести тоже только id и подключиться. После подключения были доступны обычные фичи vnc. Делал на основе uvnc. С плохим интернетом работает хуже, чем тимка. Если клиенты разные можно перекомпиливать с новыми паролями клиент и сервер. Для враппера использовал autoit на основе какого-то проекта, сайт которого закрыт уже лет наверное 5-7 (донат автор просил только на пиво).
avelor
06.01.2023 00:29+1О да. Автоит, uvnc.. я только ещё туда закидывал plink для ssh-туннеля:)
К счастью в 2к22 есть растдеск и другие альтернативы, внц уж очень туговат.
rionnagel
06.01.2023 01:24Мне к счастью уже не надо. Было 600-800 машинок под обычную службу, всё за натом, раскидывал службу через puppet, ну и саппорт не нашего, как выше. Коллега потом переделывал манифесты под vnc+openvpn+guacamole, как требования поменялись. Через vnc+изолента всегда можно сообразить че-нибудь так или иначе.
На тот момент аналоги тоже были так себе. Когда уже есть какое-то количество условно бесплатные сервисы начинали блочить.
avelor
06.01.2023 01:32да, альтернативой тогда был радмин и деймварь альтернативно-лицензированные, работали весело и вкусно, но мы всё ж ударяли по пиратству опенсорцом и поделками:) в рамках локалки vnc работал пристойно, а вот по хреновому *dsl была немношк боль
Когда уже есть какое-то количество условно бесплатные сервисы начинали блочить
нуу, тим с патчами тоже имел место быть (или простой сброс id путём установки tap-интерфейса), но это уже было позжее:)
rionnagel
06.01.2023 02:25нене, не альтернатива. Надо ж за нат. Всё распределенное и независимое друг от друга и без внешних адресов от провайдера, только за натом.
Да, были и патчи и много чего, только быстро фиксилось. У нас не работало даже то, что везде работало). По ip внешним блочили судя по всему. На новую машинку ставишь - 5 мин лимит со старта. Энидеск ещё был, сайт которого ломали по 5 раз на неделе. Потом по секьюрити тимвивер не поканал и надо было чисто своё. Если ставить драйвер и по минимуму настроек - то как-то тянуло. Но чем хуже интернет - тем больше боль.
OptimumOption
06.01.2023 09:13+1Мне больше понравился GetScreen, неудобно только крайне ограниченное время для ввода ссылки для подключения, "административная" часть работает прям из браузера. От TightVNC пришлось отказаться, по непонятной причине стал пропадать коннект до рабочего места. Вместо него "пришел" UltraVNC, с ним таких проблем не наблюдается.
kkolosovskiy
06.01.2023 09:44Попробуйте https://github.com/rustdesk возможно это решит все ваши проблемы. Можно использовать on-premise сервер, а клиенты можно пропатчить под адрес вашего сервера по умолчанию или указывать сервер заранее при установки.
mr_none
06.01.2023 09:44+2Есть же бесплатный https://anydesk.com/ru
Enwony
08.01.2023 04:43При более-менее регулярном использовании блокируется, к тому же он не бесплатный по сути. VNC хорош тем, что это очень древний протокол и его реализацию можно найти и реализовать в том числе для всяких старых Windows 95, Windows CE устройств (очень удобно что-то объяснять что-то сотруднику, если видно экран ТСД), старых android.
Sergey840
06.01.2023 09:44+2Странно, не увидел в обсуждениях AnyDesk. Или в статье про нечто иное говорится?
NeoCode
Любопытно, неужели до сих пор TeawViewer'у нет замены? Вроде же простая идея, пробивка через NAT за счет внешнего сервера... и получается что они монополисты?
А вообще тема интересная, в особенности что касается бесплатных/свободных решений для пробивки NAT (я так понимаю что таких решений в принципе не так уж и много, а тем более бесплатных/свободных).
wuglusker
Самая близкая альтерантива - RustDesk
nick-for-habr
То же сразу вспомнил про него.
Удивительно, как банальное незнание предметной области рождает такие причудливые башни из
говна и палок костылей, типа описанной в статье.arsinclair
Ещё есть Chrome Remote Desktop (https://en.wikipedia.org/wiki/Chrome_Remote_Desktop), работает как часы. После ухода TeamViewer с отечественного рынка, Chrome Remote Desktop очень выручил.
aik
Сложно. Ещё можно использовать для удаленного управления, но вот для саппорта "скачай, запусти, продиктуй цифры" уже не катит.
MTyrz
AnyDesk, как вариант. Хотя не свободный и лишь частично бесплатный, но во многих случаях — решение.
max_dark
Пробовал http://litemanager.ru/ но как то не зашло.
Он кажется тормозом. Да интерфейс у него так себе.
aik
Полно.
В основном anydesk используется, но он тоже гайки крутить начал, потому пока что на RMS частично перешел.
Самохостинговые решения всерьёз пока руки не доходят, но там тоже есть, на что глянуть.
Если у вас десятка, то там встроенная функциональность есть.
qbertych
Расскажите, что за гайки?
aik
Ограничения на время и количество подключений.
Всякие «вы достигли максимального количества подключений», «мы обнаружили много подключений, не используете ли вы в профессиональных целях» и т.п.
До уровня тимвьювера пока не дошло, но некоторых знакомых отрубало.
qbertych
Anydesk. Легкий, быстрый, может работать как standalone-приложение без установки.
P.S. Я буду
обновлять комментарии перед написаниемписать комментарии с десктопа, где они прогружаются полностью. Отдельное спасибо программистам хабра за пропавшую из старой версии кнопку "Редактировать комментарий".aik
Кнопка «редактировать» не пропала, просто у неё ограничение по времени есть.
qbertych
Это оказался какой-то глюк, похоже мобильной версии. Я пытался отредактировать сообщение с телефона, но безуспешно — при нажатии на "Редактировать" выплывало окошко "Пожаловаться". Дошел до компа со старой версией, и там кнопки "Редактировать" уже не было. При этом она была в новой версии.
Теперь точно буду комментировать только с десктопа ;)