46. Proxmox + Cloudflare. Безопасный доступ к локальным ресурсам.
В этом материале будет рассмотрена реализация безопасного доступа из интернета к ресурсам в домашней сети.Как всегда начнём с теории.
В одном из прошлых материалов уже был упомянут (ссылка 1 и ссылка 2)данный способ, попытаемся его расширить и сделать чуточку глобальнее, в рамках домашней сети.
Итак, у нас имеется в наличии мини-пк с установленной и работающей на нём операционной системой семейства Linux Debian. Эта система так же является гипервизором, а значит в ней могут быть запущены другие виртуальные машины и контейнеры типа LXC. Говоря проще, у нас есть железка с Proxmox'ом.
Задача: иметь возможность подключаться к виртуальным машинам/контейнерам и по возможности к другим устройствам в домашней сети извне. Т.е. снаружи, из интернета. Естественно максимально безопасным способом и без вреда для всей внутренней "кухни".
Решение в теории:
Для начала нужна входная точка в домашнюю сеть. Таким устройством может быть раутер, но эта вещь не уникальна для каждого и в большинстве домашних раутеров особо не разгуляешься в плане настроек и изменений, а особенно с учётом требований безопасности.
Т.к. железка с проксмоксом всегда включена, воткнута в домашнюю сеть и имеет на борту практически полноценный линукс, то она становится очевидным кандидатом на эту роль.
Для решения проблемы как с безопасностью, так и с самим подключением снаружи будет использован уже знакомый туннель Cloudflare. Как это работает:
1. На уровне операционной системы проксмокса установлен некий клиент (агент). Который одной рукой соединён с клаудфлэр и подключен к заранее настроенному туннелю, а другой рукой держится за локальную сеть и значит может видеть в ней все устройства. У туннеля есть адрес, привязанный к заранее приобретённому доменному имени, идентификатор для определения, и токен - некий пароль.
2. Заходим снаружи по адресу (саб)домена.
3. Запрос перенаправляется в интернет и ищет к какому айпи на самом деле "привязан" этот (саб)домен.
4. Благодаря предварительно сделанным настройкам доменного имени, запрос попадает на сервера Cloudflare.
5. А тот уже в свою очередь "знает" что к нему подключен агент с нашей домашней сети, который поддерживает с ним постоянное соединение. И запрос уходит этому агенту.
6. Агент получает и обрабатывает запрос, и переводит его на требуемый адрес во внутренней сети.
7. Если конечно устройство включено, настроено и работает нормально, то доступ к нему будет получен.
Теперь можно перейти к практике.
Все действия будут выполняться в консоли проксмокса, так что не важно каким способом она будет открыта. Максимально удобный это подключение через Putty.
Указываем адрес проксмокса. Пишем имя, под которым хотим сохранить это соединение, и собственно сохраняем. При двойном клике на имя в консоли указываем те же имя и пароль с которыми входим в веб интерфейс проксмокс.
Дальнейшие действия выполняются с учётом того что свой домен уже приобретён и переведён под управление Cloudflare. Если это ещё не сделано, то крайне рекомендуется ознакомиться с процессом из статьи по ссылке в начале этого материала.
Перейдём на сайт Cloudflare и выбрав свой домен, откроем настройки туннелей:
В открывшемся окне нажимаем на создание туннеля и зададим ему имя. Сохраняем настройки.
Теперь откроется окно выбора команды для установки агента
Выбираем операционную систему Дебиан, архитектуру процессора согласно тому, что установлен в железке, и копируем предложенную команду (она уже будет содержать в себе всю необходимую информацию для настройки, включая токен.
ВАЖНО!!!
Т.к. в проксмокс (скорее всего) вы уже работаете под пользователем root, то некоторые команды или их параметры должны быть написаны чуть иначе. Поэтому перед применением данной команды необходимо удалить из неё слово sudo*там, где оно встречается. Т.е. всего в двух местах.
*sudo - повышает права пользователя для выполнения тех или иных команд, на которые обычно у него прав нет. Пользователь root является глобальным администратором всей системы, обладающий максимальными правами на всё, поэтому повышать их просто некуда.
Копируем отредактированную команду в консоль (или редактируем её там же) и жмём Enter.
Если всё ок, то установка произойдёт очень быстро и не выдаст никаких сообщений об ошибке
Теперь это будет работать как служба внутри проксмокса. Осталось только сделать так, чтобы она автоматически перезапускалась при сбоях, и автоматически же запускалась при включении/перезапуске мини-пк.
Для этого выполняем команду systemctl enable --now cloudflared
После завершения установки необходимо в терминале выполнить команду:
cloudflared login
В ответ на неё, система выдаст ссылку, зайдя по которой туннель будет полностью активирован и готов к работе после нажатия на кнопку авторизации.
cloudflared login
В ответ на неё, система выдаст ссылку, зайдя по которой туннель будет полностью активирован и готов к работе после нажатия на кнопку авторизации.
Возвращаемся в настройки туннелей Cloudflare и нажимаем далее, переходя к следующему разделу
Допустим необходимо дать снаружи доступ ко всему проксмоксу.
Допустим что из внутренней сети он доступен по адресу https://1.2.3.4:8006
Тогда в качестве сабдомена указываем желаемое имя и выбираем наш домен.
Строкой ниже выбираем протокол и адрес по которому подсоединяемся к нему внутри сети.
Для обеспечения доступа к Proxmox и Home Assistant также необходимо в дополнительных настройках приложения включить отмену проверки сертификатов и включить поддержку HTTP2.
Так же, в случае с ХА необходимо добавить одну строку в файл configuration.yaml
В раздел http подключений, к доверенным сетям прокси серверов так же добавить всю домашнюю сеть. Не забываем сохранить файл и перезагрузить настройки с предварительной проверкой конфигурации.
Так же крайне рекомендуется включить двухфакторную аутентификацию на всех устройствах\сервисах, к которым предоставляется доступ извне.
После сохранения настроек туннеля, видно что он работает должным образом и запись сабдомена создана.
При попытке зайти на новый адрес, должен открыться соответствующий ресурс в домашней сети.
Если необходимо добавить ещё одно имя/устройство, то нажимаем на конфигурацию уже имеющегося туннеля, переходим на вкладку имён хостов и добавляем новую запись.
Eсли по ошибке была создана запись сабдомена, а потом он был удалён из туннеля, то информация об этой записи всё равно остаётся, и её надо удалить вручную.
На главной странице панели идём в настройки DNS и выбрав для редактирования нужную запись - удаляем её.
Что имеем в итоге?
На железке крутятся разные виртуалки. С этой же железки к ним есть и доступ для управления, и она же ответственна за связь этих виртуалок с внешним миром.
На этом всё. Огромная благодарность XTarget за помощь в создании данной статьи.
UPD.
Иногда в панели управления туннелями можно увидеть следующее сообщение:
Оно говорит о том, что версия клиентской службы установленная в проксмоксе устарела и требует обновления.
Для решения этой задачи нужно добавить ключи подтверждения для обновления с доверенного источника и адрес самого источника, в систему.
Делается это с помощью следующих команд:
Сначала создадим директорию для ключа: mkdir -p --mode=0755 /usr/share/keyrings
Теперь импортируем ключ в соответствующую директорию: curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
На этом этапе можно добавить адрес откуда будет обновляться компонент Cloudflare в системный список обновления компонентов:
Debian Bullseye (stable)
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bullseye main' | tee /etc/apt/sources.list.d/cloudflared.list
Debian Bookworm (testing)
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared bookworm main' | tee /etc/apt/sources.list.d/cloudflared.list
Теперь можно запустить команду для проверки и установки обновлённых компонентов: apt update && apt upgrade -y
Обновление найдено, скачано, распаковано и установлено. Однако, если проверить панель управления туннелями, то сообщение об обновлении всё ещё будет присутствовать. Это потому, что для применения изменений после обновления, нужно либо перезапустить проксмокс, либо перезапустить только саму службу Cloudflare.
Конечно второе сделать проще и быстрее, поэтому запускаем команду: systemctl restart cloudflared и обновляем страничку с настройками туннелей.
Видно что номер версии изменился и пропало сообщение о необходимости обновления.
Пытаюсь уже пару часов сделать бесплатный домен на сайте Freenom, и все без результатов. Есть какие-то новые сайты где это можно сделать ?
ОтветитьУдалитьМатериал в которым был упомянут регистратор freenom был написан больше двух лет назад. С тех пор много чего изменилось, особенно в плане безопасности. И поэтому например тот же cloudflare не работает с бесплатными доменами выданными этим регистратором.
Удалитькак можно узнать будет ли работать тот же cloudflare с платным доменом с другого сайта (к примеру отсюда -www.namecheap.com) ?
Удалитьесли домен первого уровня принадлежит какой-либо стране или является основным международным (com, net, info, org и т.д.), и не является новомодным (blog, xyz, и т.д.), то шанс что cloudflare будет с ним работать составляет 99.999999%
Удалить