Всем привет!

Сегодня хочу рассказать о двух случайно обнаруженных “фичах” известных протоколов, которые позволили сложиться “пазлу” из темы статьи.

И так, у сотрудника техподдержки есть необходимость подключаться к рабочему столу пользователя, что бы совместно что-то сделать. Раз нет TeamViewer, значить надо использовать что-то похожее, например VNC.Тут же “выплывают” проблемы:

  1. компьютер пользователя может быть недоступен для компьютера сотрудника, например, находится в домашней сети за роутером (который так же может быть не доступен из внешних сетей)

  2. пользователю нужно не только заранее установить 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)


  1. NeoCode
    05.01.2023 22:54
    +1

    Любопытно, неужели до сих пор TeawViewer'у нет замены? Вроде же простая идея, пробивка через NAT за счет внешнего сервера... и получается что они монополисты?
    А вообще тема интересная, в особенности что касается бесплатных/свободных решений для пробивки NAT (я так понимаю что таких решений в принципе не так уж и много, а тем более бесплатных/свободных).


    1. wuglusker
      05.01.2023 23:10
      +10

      Самая близкая альтерантива - RustDesk


      1. nick-for-habr
        05.01.2023 23:49
        +1

        То же сразу вспомнил про него.

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


    1. arsinclair
      06.01.2023 00:28

      Ещё есть Chrome Remote Desktop (https://en.wikipedia.org/wiki/Chrome_Remote_Desktop), работает как часы. После ухода TeamViewer с отечественного рынка, Chrome Remote Desktop очень выручил.


      1. aik
        06.01.2023 03:46
        +1

        Сложно. Ещё можно использовать для удаленного управления, но вот для саппорта "скачай, запусти, продиктуй цифры" уже не катит.


    1. MTyrz
      06.01.2023 01:53
      +5

      AnyDesk, как вариант. Хотя не свободный и лишь частично бесплатный, но во многих случаях — решение.


    1. max_dark
      06.01.2023 03:39
      +2

      Пробовал http://litemanager.ru/ но как то не зашло.

      Он кажется тормозом. Да интерфейс у него так себе.


    1. aik
      06.01.2023 03:43

      Полно.
      В основном anydesk используется, но он тоже гайки крутить начал, потому пока что на RMS частично перешел.
      Самохостинговые решения всерьёз пока руки не доходят, но там тоже есть, на что глянуть.


      Если у вас десятка, то там встроенная функциональность есть.


      1. qbertych
        06.01.2023 11:31
        +1

        Расскажите, что за гайки?


        1. aik
          06.01.2023 11:35
          +1

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

          До уровня тимвьювера пока не дошло, но некоторых знакомых отрубало.


    1. qbertych
      06.01.2023 11:12

      Anydesk. Легкий, быстрый, может работать как standalone-приложение без установки.

      P.S. Я буду обновлять комментарии перед написанием писать комментарии с десктопа, где они прогружаются полностью. Отдельное спасибо программистам хабра за пропавшую из старой версии кнопку "Редактировать комментарий".


      1. aik
        06.01.2023 11:36

        Кнопка «редактировать» не пропала, просто у неё ограничение по времени есть.


        1. qbertych
          06.01.2023 22:14

          Это оказался какой-то глюк, похоже мобильной версии. Я пытался отредактировать сообщение с телефона, но безуспешно — при нажатии на "Редактировать" выплывало окошко "Пожаловаться". Дошел до компа со старой версией, и там кнопки "Редактировать" уже не было. При этом она была в новой версии.


          Теперь точно буду комментировать только с десктопа ;)


  1. andreymal
    05.01.2023 22:59
    +3

    Ну вроде обе проблемы может решить Aspia


    Для обхода NAT ставится роутер+релей (и если неохота просить пользователя вбивать настройки подключения к роутеру, можно собрать msi-пакет, преднастроенный на свой роутер), пользователь называет техподдержке ID и одноразовый пароль (прям как в тимвьювере) и техподдержка успешно подключается


  1. Kanedias
    05.01.2023 23:13

    Для "пробивки" NAT в итоге использую ZeroTier. Кто помнит Hamachi или Garena, тот сразу поймёт, что это.

    Конечно, со скрипом, потому что это не совсем свободное ПО. Но работает как надо, честный p2p пинг на всех операционках, и использовать можно для любых целей, а не только для удалённого рабочего стола.


  1. Pastoral
    05.01.2023 23:20

    А кто первым насчитает 666 альтернатив? Мне как-то чем-то нравится JumpDesktop.


    1. sena
      05.01.2023 23:45

      так оно же без исходников


    1. iggr63
      06.01.2023 00:32

      NoMachine


  1. rionnagel
    05.01.2023 23:40

    Да достаточно давно есть сервер с рипитером, и под винду и под линукс с веб интерфейсом для управления (где-то на форуме uvnc без лимитов выкладывали). Для саппорта делал "сервер" в виде одного exe, который, не имел опций и выдавал цифровой просто 6-значный id при запуске, подключался к репитеру и висел в ожидании подключения. Со стороны оператора клиент, где можно было ввести тоже только id и подключиться. После подключения были доступны обычные фичи vnc. Делал на основе uvnc. С плохим интернетом работает хуже, чем тимка. Если клиенты разные можно перекомпиливать с новыми паролями клиент и сервер. Для враппера использовал autoit на основе какого-то проекта, сайт которого закрыт уже лет наверное 5-7 (донат автор просил только на пиво).


    1. avelor
      06.01.2023 00:29
      +1

      О да. Автоит, uvnc.. я только ещё туда закидывал plink для ssh-туннеля:)

      К счастью в 2к22 есть растдеск и другие альтернативы, внц уж очень туговат.


      1. rionnagel
        06.01.2023 01:24

        Мне к счастью уже не надо. Было 600-800 машинок под обычную службу, всё за натом, раскидывал службу через puppet, ну и саппорт не нашего, как выше. Коллега потом переделывал манифесты под vnc+openvpn+guacamole, как требования поменялись. Через vnc+изолента всегда можно сообразить че-нибудь так или иначе.

        На тот момент аналоги тоже были так себе. Когда уже есть какое-то количество условно бесплатные сервисы начинали блочить.


        1. avelor
          06.01.2023 01:32

          да, альтернативой тогда был радмин и деймварь альтернативно-лицензированные, работали весело и вкусно, но мы всё ж ударяли по пиратству опенсорцом и поделками:) в рамках локалки vnc работал пристойно, а вот по хреновому *dsl была немношк боль

          Когда уже есть какое-то количество условно бесплатные сервисы начинали блочить

          нуу, тим с патчами тоже имел место быть (или простой сброс id путём установки tap-интерфейса), но это уже было позжее:)


          1. rionnagel
            06.01.2023 02:25

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

            Да, были и патчи и много чего, только быстро фиксилось. У нас не работало даже то, что везде работало). По ip внешним блочили судя по всему. На новую машинку ставишь - 5 мин лимит со старта. Энидеск ещё был, сайт которого ломали по 5 раз на неделе. Потом по секьюрити тимвивер не поканал и надо было чисто своё. Если ставить драйвер и по минимуму настроек - то как-то тянуло. Но чем хуже интернет - тем больше боль.


  1. anzay911
    06.01.2023 05:19

    Что-то IPv6 никак не набирает популярность.


    1. bekreyev
      07.01.2023 09:20

      Вообще, какие-то жалкие 60% IPv6 на CloudFlare у МТС


  1. OptimumOption
    06.01.2023 09:13
    +1

    Мне больше понравился GetScreen, неудобно только крайне ограниченное время для ввода ссылки для подключения, "административная" часть работает прям из браузера. От TightVNC пришлось отказаться, по непонятной причине стал пропадать коннект до рабочего места. Вместо него "пришел" UltraVNC, с ним таких проблем не наблюдается.


  1. kkolosovskiy
    06.01.2023 09:44

    Попробуйте https://github.com/rustdesk возможно это решит все ваши проблемы. Можно использовать on-premise сервер, а клиенты можно пропатчить под адрес вашего сервера по умолчанию или указывать сервер заранее при установки.


  1. mr_none
    06.01.2023 09:44
    +2

    Есть же бесплатный https://anydesk.com/ru


    1. Enwony
      08.01.2023 04:43

      При более-менее регулярном использовании блокируется, к тому же он не бесплатный по сути. VNC хорош тем, что это очень древний протокол и его реализацию можно найти и реализовать в том числе для всяких старых Windows 95, Windows CE устройств (очень удобно что-то объяснять что-то сотруднику, если видно экран ТСД), старых android.


  1. Sergey840
    06.01.2023 09:44
    +2

    Странно, не увидел в обсуждениях AnyDesk. Или в статье про нечто иное говорится?