51. Apache Guacamole, Cloudflare и удалённый доступ.

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

    Apache (апачи, апач) - надстройка в операционных системах *nix (а позже и Windows) позволяющая запустить веб сервер. Просто сервис для запуска и работы сайта.

    Guacamole - модифицированная версия апача, со своим веб интерфейсом. Позволяющая в своей панели управления настроить и сохранить подключения разных типов (rdp, http(s), ssh, vnc) к узлам в локальной сети, в которой он сам же и находится. А т.к. это веб сервер, то получается что доступ к тем самым узлам происходит через браузер. В дополнение к этому, имеется возможность управления пользователями получающими доступ к этой системе. И особо радует наличие встроенной защиты в виде двухфакторной аутентификации. Ах да, и конечно же бесплатность продукта.

Для чего это надо?
    Как уже было сказано - для получения доступа к локальным (читай домашним) ресурсам в виде: панель управления Proxmox, основной интерфейс управления  Home Assistant, удалённый доступ к рабочему столу Windows, подключение к веб интерфейсу принтера и т.д. И всё это в одном окне браузера, а значит без необходимости ставить какой-то дополнительный софт. Т.е. идеальное решение для доступа с места работы/учёбы/отдыха.

Как оно будет работать?
    Т.к. родной средой апача являются *никс системы, то и работать он будет на Линукс Дебиан. Но не обычном, а в виде контейнера, который будет запущен внутри проксмокса. Т.к. по сути надо чтобы работал только сервис веб сервера с некоторыми вспомогательными модулями, то полноценную виртуальную машины выделять будет бессмысленной тратой ресурсов.

    После запуска и настройки контейнера, назначим ему статический адрес в локальной сети. И этот адрес настроим в туннеле Cloudflare, в качестве сабдомена (например guac.chto-to-tam.com).

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

Перейдём к практике.

Установка контейнера (LXC) Debian.

    Выполняется очень просто, с помощью следующего скрипта, запускаемого прямо из консоли Proxmox'а: 
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/debian.sh)"

    По нескольким причинам рекомендуется выбрать продвинутый вариант установки.
1. Можно вручную назначить номер машины/контейнера в проксмоксе.
2. На настройках по умолчанию скрипт создаёт жёсткий диск всего на 2ГБ и выделяет 0.5 ГБ оперативной памяти. Этого катастрофически мало. Нужно хотя бы 8Гб для диска и 1Гб оперативки.
3. В ручном режиме можно указать где будет храниться скачанный шаблон системы, где файл конфигурации, а где файл жёсткого диска.

    Очень желательно после установки системы, перезагрузить её (reboot now) . А после загрузки произвести проверку и установку обновлений.
Проверка делается с помощью команды apt update
Установка найденных обновлений - apt upgrade -y
Крайне важно сделать перезагрузку системе после обновления. Т.к. это контейнер, то поднимется он за считанные секунды.

    Кстати, контейнер настроен таким образом, что консоль гипервизора открывает сессию сразу в систему, без необходимости вводить имя пользователя и пароль. Но при этом, у рутА (пользователь root) отключен доступ по SSH. 

Установка Guacamole.

как уже было сказано выше: установка производится внутри контейнера, т.е. в его консоли, а не в консоли проксмокса. Чтобы долго не мучиться, так же воспользуемся скриптом для установки. 
wget -O guac-install.sh https://git.io/fxZq5
Эта команда только скачивает скрипт.
Сделать его запускабельным позволит команда: chmod +x guac-install.sh 
Ну и собственно запуск скрипта в интерактивном режиме: ./guac-install.sh
Это значит что он, по мере установки, будет спрашивать какие пароли создать для администратора и для обычного пользователя базы данных. Конечно же их стоит запомнить и/или сохранить в надёжном месте.
Подробная информация на гитхабе автора скрипта.

Назначение статического адреса.

    Этот раздел будет максимально коротким, т.к. невозможно описать данную процедуру применительно к каждому раутеру существующему на рынке. Так что исполнение этого пункта остаётся целиком и полностью на читателе. Только стоит помнить, что обновление адреса контейнера произойдёт только после его перезапуска.

Исправление ошибок.

    Минус данного скрипта установки гуакамоле в том, что он создаёт немного своеобразную конфигурацию. А именно, после установки веб интерфейс доступен по адресу http://local.ip:8080/guacamole . Локальный айпи это конечно само собой разумеющийся факт, и к порту нареканий нет, но вот эта приписка со слэшем очень не к делу и портит всю картину. Т.к. Cloudflare не умеет (по крайней мере в бесплатной версии) обращаться к таким адресам. Поэтому будем её убирать.

Для начала остановим основной веб сервис: service tomcat9 stop
Перейдём в папку веб приложений службы: cd /var/lib/tomcat9/webapps/
С помощью команды ls отобразим содержимое этой директории.
Нас интересуют директория ROOT и файл guacamole.war .
Нужно их скопировать, чтобы остались резервные копии если что-то пойдёт не так. И потом переименовать/удалить оригиналы. 

Копируем в сторону файл: cp guacamole.war guacamole_old.war
Копируем в сторону директорию: cp -r ROOT ROOT_OLD
Переименовываем оригинальный файл: mv guacamole.war ROOT.war
Удаляем оригинал директории: rm -r ROOT

Директория будет создана автоматически после запуска службы веб сервера: service tomcat9 start
Но уже с другими параметрами.
Перезагружаем контейнер (reboot now) и пытаемся зайти на обновлённый адрес системы http://local.ip:8080. Интерфейс должен работать.

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

Cloudflare.

    Здесь так же всё максимально просто и коротко. Заходим в панель управления, зеро траст, управление туннелями, заходим в конфигурирование нужного туннеля, и на вкладке public hostname добавляем желаемый под домен, и настраиваем переадресацию на локальный адрес авокадо гуакамоле http://local.ip:8080. Сохраняемся и проверяем. Готово.

Настройка подключения к Windows.

    Первым делом стоит помнить, что в данном случае идёт речь о соединении по протоколу RDP (Remote Desk Protocol). А значит, этот протокол, и всё что его касается должны быть включены на той системе, к которой будет происходить подключение.

    Так уж придумали в Майкрософте, что для удалённого подключения к компьютеру, пользователь, который будет подключаться, должен иметь пароль в системе. Поэтому если сегодня при включении компа, у нас сразу появляется рабочий стол, то придётся немного изменить концепцию и назначить пароль своему пользователю. После чего следует перезагрузить систему.

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

Осталось настроить авокадо Guacamole.
    Тыкаем в веб интерфейсе в своего пользователя справа вверху - опции.
На закладке "подключения" нажимаем на "новое подключение" и в разделе "РЕДАКТИРОВАНИЕ ПОДКЛЮЧЕНИЯ" указываем название для будущего соединения, и указываем протокол - RDP.
В разделе "НАСТРОЙКИ" в качестве сервера указываем адрес компьютера в домашней сети, если в целевой системе не был изменён порт RDP, то здесь его можно не указывать. Соединение пойдёт на порт используемый по умолчанию в этом протоколе.
Имя пользователя и пароль к компьютеру лучше не указывать, в целях безопасности. Система сама запросит их ввести при каждом подключении.
Отмечаем пункт "Игнорировать сертификат сервера" и сохраняем настройки.
На этом все подготовительные работы завершены.

Использование.

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

По аналогии можно добавить доступ к панели проксмокс и другим ресурсам в домашней сети. Если это сделать для ХА, то стоит учесть что его приложение на телефоне и остальные плюшки например в виде голосового управления перестанут работать.

Комментарии