company_banner

Делаем своими руками: KVM Over IP при помощи Raspberry Pi

Автор оригинала: Don
  • Перевод

На Хабре вряд ли стоит рассказывать о программах удаленного доступа к ПК, вроде TeamViewer. Но все это работает лишь в среде операционной системы. А вот доступа к BIOS, возможности установки, переустановки и прочих операций с операционной системой нет. Для всего этого есть иные решения. Одно из самых доступных — KVM Over IP.

Конечно, если покупать брендовую систему, то получится дорого. Но есть иное решение — создание собственной системы на основе «малинки». Это решение предложил разработчик Максим Деваев (Maxim Devaev). Он собирается начать продавать эту систему по $130. Но собрать все это можно и самостоятельно — главное запастись собственными компонентами. Под катом — описание того, как это сделать.


Прототип Pi-KVM без корпуса

Необходимые компоненты


  • Raspberry Pi 4 или Raspberry Pi Zero
  • Карточка памяти microSD с объемом памяти 16 ГБ.
  • Переходник HDMI-to-CSI.
  • Сплиттер USB female to dual male Type-A.
  • Кабель
  • USB C to Type-A
  • Источник питания 5В, 3А с портом USB Type-A.

Настройка SD-карты для Raspberry Pi KVM Over IP


Все, что нужно для настройки можно загрузить из сети в виде образа диска и записать потом этот образ на карточку. Сделать это можно при помощи Raspberry Pi или balenaEtcher (есть и другие варианты).

  1. Загрузить образ диска Pi-KVM. Вот ссылка. На исходном ресурсе есть несколько версий образов — для разных версий Pi. Кроме того, выбирать нужно исходя из того, что вы используете — HDMI-to-CSI или HDMI-to-USB.

  2. Распаковываем образ.
  3. Запускаем Raspberry Pi Imager.
  4. Теперь нужно выбрать опцию “Choose OS” → “Use Custom” и, соответственно, использовать образ. Еще требуется определить SD карту при помощи не самой сложной опции “Choose SD Card”.
  5. Write — прошиваем.


Собираем и настраиваем Raspberry Pi for KVM Over IP


Теперь можно приступить к сборке «железа». Здесь тоже все просто.


  1. Соединяем CSI шлейф нашего HDMI-to-CSI-2 бриджа с портом камеры «малинки». Чтобы убедиться, что все правильно подключено, лучше посмотреть на фото. Если вы используете HDMI-to-USB, то просто подключите коннектор к разъему USB. Ну или в случае Pi Zero — подключаем microUSB к USB Type-A.
  2. Нужно заизолировать 5В пин на коннекторе USB Type-A сплиттера. Проще всего сделать это при помощи тонкого изолирующего материала. Можно просто убрать и контакты, которые ведут к этим пинам, но все же безопаснее и проще — просто заизолировать коннектор. Если этого не сделать, то USB порт компьютера может быть поврежден.
  3. Подключаем кабель USB C-to-A к Type-A

  4. Подключаем кабель USB-C к порту USB-C «малинки».
  5. Подключаем коннектор Type-A к питанию.

  6. Подключаем USB Type-A коннектор и HDMI ПК, которым нужно управлять.

  7. Наконец, вставляем карту памяти и включаем «малинку».

Настройка ПО Pi-KVM


Теперь мы можем начать работу с Pi-KVM. Первая загрузка будет довольно продолжительной, так что придется подождать. Но в итоге все запустится, после чего можно начать настройку.
1. Определяем IP «малинки». Собственно, вряд ли на Хабре нужно рассказывать, как это сделать, но на всякий случай — сделать это можно при помощи роутера, в панели которого отображаются IP всех подключенных девайсов.

Кроме того, можно запустить командную строку Windows и выполнить команду “arp -a”. После этого вы увидите все адреса устройств, подключенных к локальной сети. Любой девайс, адрес которого начинается с b8:27:eb: или dc:a6:32: и является Raspberry Pi.


2. Вводим IP в браузере клиентского ПК, после чего открывается страничка входа.

3. Дефолтные значения входа — admin и admin.


4. Кликаем по иконке KVM.


Теперь должен загрузится экран, как показано на скриншоте ниже. Он предоставляет доступ к удаленному ПК при помощи меню. Можно получить и больше меню, чем указано на картинке, вот ссылка, где рассказывается, как это сделать.


Чем больше объем вашей SD-карты, тем больше образов ISO можно загрузить и использовать в дальнейшем, расширяя функциональность системы.


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


Для расширения функциональности системы, например, использования дополнительных дисплеев, можно использовать подключение HDMI 4.


А вот прототип нашей системы без корпуса и 4-х портовый KVM switch.

Обновление Pi-KVM до последней версии


Pi-KVM часто получает обновления, поэтому постарайтесь держать актуальную версию. Для обновления нужно:

  1. Выбираем иконку консоли в главном меню Pi-KVM, после чего запускается консоль.
  2. Вводим «su» и получаем суперпользователя. Пароль — root
  3. Вводим “rw” и открываем систему для записи.

  4. Обновляемся при последовательном вводе команд “pacman -Syu” и “Y”.



Удаленное управление


Лучше всего использовать такой инструмент, как Tailscale. Он удобен, бесплатен для обычных пользователей, плюс с его помощью можно без труда развернуть небольшую VPN-сеть.

  1. Заводим учетку в Tailscale, выбирая бесплатный тариф Solo Plan для частного использования.
  2. Нажимаем на иконку консоли в главном меню Pi-KVM

  3. Становимся супер-пользователем при помощи «su» и пароля «root»
  4. Открываем систему для записи.

  5. Вводим команду “pacman -S tailscale-pikvm” для запуска VPN-сервиса на нашей системе.
  6. Вводим «reboot» для перезагрузки.
  7. После этого нужно снова получить доступ к системе, повторяем шаги 1-4.
  8. Вводим “systemctl enable --now tailscaled” для активации сервиса.
  9. Инициализируем начало работы, вводя “tailscale up”.

  10. Авторизуем все.

  11. Если все прошло хорошо, то вы увидите сообщение «Success» в консоли.
  12. Заходим вот по этой ссылке для того, чтобы увидеть IP, назначенный нашему VPN.

Сторона клиента


Теперь настроим tailscale на клиенте. Tailscale поддерживает большинство операционных систем, включая windows, mac и linux.

  1. Загружаем версию для своей ОС по этой ссылке.
  2. Переходим по этой ссылке для отображения IP VPN.

  3. Вводим IP в строку браузера, что позволяет подключиться к PI-KVM.


В целом, это и все. Благодаря этой инструкции получаем недорогой, быстрый и простой в использовании KVM over IP сервис. Если нужны дополнительные подробности, то они доступны по этой ссылке.

Selectel
IT-инфраструктура для бизнеса

Комментарии 40

    +5

    1) зачем сложности с Y-кабелем питания, если у малинки и так есть свободные порты юсб?
    2) не понятно, питанием управляться будет через юсб? Или всё-таки надо подключаться к выводам кнопок резета и питания материнки?
    3) немного не понял, как к одной малинке подключать 4 монитора — что за "hdmi switch"? Адаптер поддерживает только 1 hdmi, насколько я вижу. Куда сувать остальные hdmi и юсб?

      +1

      2) Опционально предлагается врезаться в материнскую плату к кнопкам power/reset и светодиодам storage/power через 4 мосфет ключа и резисторы. Сомневаюсь что существует универсальное решение по управлению питанием через usb при любых обстоятельствах и на произвольной ос

        +4

        Э… Статья позиционирует решение как ip-kvm же, при чём тут ОС вообще? Возможность аппаратно управлять ребутом/питанием как раз таки одна из ключевых для такой системы.
        Просто всё так красиво показано, воткни 2 кабеля и радуйся жизни, но на самом деле у нас выходит вагон допиливания и куча вопросов. В итоге получится по цене и трудозатратам как взрослая kvm, но при этом без надёжности серьёзных решений...

          +2
          У меня есть антресольный безголовый сервер, на котором я ресет могу и сам нажать, без мосфетов, а вот в биосе поковыряться или безопасно перезагрузить в случае отвала сети − уже нет. Для меня такая схема была бы самое оно. И расходов меньше чем на 3000р.

          Вот в дата-центр за тыщи км я бы такой девайс не повёз устанавливать, не спорю. Но это ещё не значит, что он совсем бесполезный.
            +8
            Вы немножко путаете ip-kvm и IPMI =)
            Готовые IP-KVM тоже не управляют питанием, они втыкаются только в video и usb (старые модели — в PS/2), совместно с ними используются умные розетки с управлением по сети, или ещё какие-то приблуды.
              –2
              Вообще то готовые IP-KVM прекрасно управляют питанием сервера. У меня под контролем сейчас 3 разных, и все они могут послать сигнал на вкл./выкл. питания. Один правда сам тухнет при выключении питания сервера, хз, может его неправильно подключили. Но вот два других вполне тушат сервера полностью и остаются в сети, и корректно подают команду на включение. Это не доступ к серверной встроенной IPMI, это отдельная железка.
                +3
                А как он его посылает-то?
                IP-KVM обычно используют для того, чтобы его быстро перекидывали инженеры в ДЦ между машинами — ни о каком подключении к пинам материнки идти речи не может. С одним сервером проще ipmi воткнуть — дешевле выйдет с текущим рынком.
                  0
                  А подскажите, пожалуйста, модели IP-KVM, которые позволяют аппаратно управлять питанием? Интересно, как это реализовано.

                  Пока что я встречал IP-KVM, управляющие питанием программно. Да и то, только отключением сервера (и перезагрузкой). Если же сервер отключен, то через IP-KVM его никак не включать (я все еще говорю о тех, что использовал). Фактически, они отправляют ctrl-alt-del на сервер. Сами при этом они не выключаются, так как у одной такой железки 3 USB: один — на ввод, два — на питание. Подключив питание к двум разным устройствам решаем вопрос с отвалом IP-KVM во время перезагрузки сервера.
                0
                при чём тут ОС вообще?
                при том что не врезавшись в аппаратное управление питанием — аппаратно ты им не поуправляешь, usb такого не позволяет. Управление программное — не будет универсальным как факт, и уж тем более не позволит управлять на любом этапе загрузки установленной ОС или биосе/uefi, мало ли что там и как, вдруг на ctrl+alt+del оно не реагирует. А уж как врезаться — дело твоё, автор проекта предлагает так, хочешь — используй какие то умные розетки
              0
              1) надо эмулировать HID, а это можно делать только через OTG-порт, который на малинке совмещён со входом питания,
              3) в оригинальной статье есть ссылки на Амазон (переходники HDMI→CSI и HDMI→USB).
                0
                3) Нужен отдельный прибор — hdmi switch, предлагается вот такой. В оригинале статьи есть картинка. На странице проекта есть описание подключения и использования.
                  0
                  1) Чтобы мат.плата не стала источником для пая, ток может превысить допустимый отдельными портами. Питание действительно можно завести например в GPIO пая. Можно и в HOST порты пая, но это уже шиворот на выворот.
                  2) Параллельно подключается через опто твердотельные реле к кнопкам power/reset и светодиодам мат.платы.
                  3) В переводе упустили суть, в оригинале статьи речь про управление обычным KVM switch через его usb порт по его протоколу, что позволяет использовать 1 Pi-KVM для 4 машин.
                    +1
                    В оригинальной статье речь идет об управлении отдельным компьютером, но для расширения возможностей действительно можно использовать дополнительный 4-х портовый HDMI-коммутатор.
                  +2
                  Малина с SD картой без специально доработки (вся запись в tmpfs и readonly SD) с вероятностью 10-20% не оживет после незапланированного перестарта (питание пропало, например).
                  Не очень подходящий вариант для критических применнений.
                    +4

                    на практике я бы сказал 50%
                    но вообще sd нафиг на мороз, usb бокс с любым хардом завалявшимся в столе решает половину проблем малины))

                      0
                      Там именно так и сделано. Карта рид-онли, переключается в режим записи для внесения изменений в настройки или обновлений.
                      +1
                      Классная статья. Давно тоже появилась идея о DIY IP-KVM. Буду пробовать. Спасибо!
                        +1
                        Я просто оставлю это здесь: github.com/mtlynch/tinypilot
                        У меня работает по такой схеме, хотя надо сказать, что картинка подтормаживает. Надо обновлять страницу, чтобы получить последнюю картинку. Но я использую, когда отваливается всё остальное.
                          +3
                          Привет. Я автор проекта, который описан в статье) Штука, на которую вы ссылаетесь, появилась совсем недавно, имеет меньше фичей и использует мой софт — ustreamer — который я написал с нуля для передачи видео. Так что, возможно, вам стоит ознакомиться именно с Pi-KVM как с первоисточником этой технологии)
                            0
                            О, класс! Только я не увидел в инструкции как засунуть Pi-KVM на уже существующий распбиан — это вообще возможно? У меня малинка лежит в 2000км от меня и без никого, и работает с tinypilot.
                            Спасибо!
                              0
                              Вообще возможно, но на практике лучше накатить готовую ось — например, для эмуляции диска требуется отдельный раздел на sd-карте, который, как и корень, содержится в ридонли, пока явно не понадобится. Ось содержит пакетный реп (все обновляется естественным путем) и множество специфичных настроек — следствие большого количества фич.
                                +1
                                Кстати, если выдастся возможность попробовать мое поделие, то сможете использовать VNC вместо браузера. Сейчас совместно с разработчиками TigerVNC я разрабатываю первую в мире открытую реализацию H.264-сжатия для VNC, и скоро она поедет в релиз. Протокол уже зарегистрировали в IANA, патчи готовы и ждут мержа.
                                  0
                                  То есть, это будет kvm-over-vnc? Звучит интересно, хотя это дополнительная софтина нужна на клиенте (у меня win клиент). С другой стороны, RealVNC Viewer у меня и так везде поставлен. Но заведётся ли с ним?

                                  Я бы с Вами ещё насчёт эмуляции диска поговорил отдельно, мои попытки сделать эмуляцию остановились из-за скорости загрузки девайса. Хочу сделать аналог Zalman VE400 на малинке. Понимаю, что для KVM это не так важно, но всё равно спрошу — сколько у Вас на Zero [W] проходит от подключения до определения как внешний хард?
                                    +1
                                    Это уже сейчас kvm-over-vnc, а с h264 это будет kvmd-over-vnc-не-жрущий-трафик :) Правда, RealVNC с ним не заведется, потому что RealVNC на самом деле не совсем VNC, он поддерживает только базовую авторизацию и видео без сжатия, а с открытыми общепринятыми стандартами не работает, только со своими проприетарными. Так что вам понадобится TigerVNC под винду.

                                    С зерошкой так не получится. Она так медленно грузится, что USB вылетает в таймауте при соединении.
                                      0
                                      SPICE бы еще туда…
                                        0
                                        Не проблема. Там микросервисная архитектура. VNC реализован как прокси, который просто разворачивает протокол в вызовы HTTP API. Но, понятно, это писать надо)
                                    0
                                    Преимущество TigerVNC в том, что они уделяют должное внимание безопасности, но вот в плане скорости описание проекта «TigerVNC is a high-performance, platform-neutral implementation of VNC» конечно не имеет ничего общего с реальностью. Из всех реализаций VNC он наоборот самый медленный.
                                    Если речь заходит о скорости, то тут правит так же открытый проект TightVNC. Пользуюсь им в локальной сети регулярно, отзывчивость как у коммерческих аналогов. Но вот с безопасностью у него плохо, наружу выставлять его нельзя. Мне кажется что раз TightVNC так быстр даже на своем старом протоколе, то с внедрением H.264 это была бы бомба.
                                      +3
                                      Вы говорите про серверную часть, но она тут не играет никакой роли. В Pi-KVM свой собственный VNC-сервер, написанный мною с нуля. И, кажется, довольно быстрый)

                                      Я рекомендую TigerVNC именно в качестве клиента, потому что он поддерживает наибольшее количество расширений протокола (типа передачи кейсимов клавиш, авторизации по юзеру-паролю и прочего). Кроме того, разрабы TigerVNC оказались более открытыми к диалогу по поводу внедрения H.264. Я написал серверную часть, составил спецификацию, мы обсудили ее и начали процесс внедрения в клиентскую часть.

                                      Разработчик TightVNC не поддержал нашу инициативу. Хотя, как мне кажется, у него уже не останется выбора, потому что формат описан, принят в IANA и сейчас разработчик одного из мобильных VNC-клиентов тоже занялся его реализацией, так что клиента уже будет как минимум 2.

                                      PS: Тут я, конечно, чувствую определенную гордость, так как мне удалось сдвинуть развитие VNC с мертвой точки в плане внедрения дифференциального кодирования :)
                                        0
                                        А почему не какой-нить VP9? Просто как я понимаю " licensing around H.264 is problematic enough" это действительно может быть проблемой в некоторых случаях, формат проприетарный.
                                        Надеюсь стандарт описывает реализацию в общем виде, и можно будет разные видеокодеки использовать.
                                          0
                                          Аппаратное сжатие VP9 не так распространено как H264. Проблема лицензирования преувеличена, потому что оно не касается именно нашей сферы использования.
                              0
                              А что делать, если у сервера только VGA выход?
                              использовать связку USB-to-HDMI — - HDMI-to-USB?
                                0
                                Можно купить активный VGA-HDMI конвертер и использовать его.
                                  0
                                  Пробовали кучу (и брендовые типа avertv и кучу китайцев) — обплевались, не умеет оно множество специфичных для VGA разрешений в HDMI переводить, к примеру в текстовом режиме все коробочки ничего не могли.
                                    0
                                    Я пробовал вот этот, неплохо работает.
                                      0
                                      Текстовый режим (720х400) схожая коробочка (по внешнему виду) тоже не могла.
                                        0
                                        Не исключено. Там могут быть другие внутренности. В любом случае, других способов пока нет. Для преобразования VGA сигнала в удобоваримую для пая форму нужен АЦП, а они либо плохие, либо дорогие.
                                      0

                                      Да, у меня через такую коробочку, например, тупо в биос зайти нельзя. Framebuffer консоль показывает, а биос — сразу No Signal, извините.

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

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое