Сам я, можно сказать, в теме почти новичок. Толчком послужила возникшая год назад идея перевести семью с сервиса Google Фото на самохостящийся аналог, а качестве которого был выбран Immich.
Итогом моих малоопытных усердий стала такая схема (использующаяся и в настоящий момент).
Мини-ПК с двумя сетевыми интерфейсами: один -— в локалку, другой (с динамическим белым IP)— к провайдеру. На нем установил PVE и развернул две полноценных виртуалки:
OpenWRT. Поднял на нем DoH и zapret;
openmediavault. На нем по SMB организован файловый сервис, а в Docker-контейнерах развернуты qtbittorent, Immich, caddy и cloudflared.
Снаружи нужен был исключительно удобный и безопасный доступ к Immich. Для этого регистрировал доменное имя, в Cloudflare пробрасывал ZeroTrust-туннель к контейнеру cloudflared на нужный порт. В качестве дополнительной защиты на CF включил доступ по клиентским сертификатам (благо мобильное приложение Immich такое позволяет, а при доступе со своего ноута извне в него тоже можно добавить клиентский сертификат).
Чтобы в домашней сети подключение с мобильных к сервису не требовало перенастройки приложения, резолвю свой домен на локальный адрес, а для поддержки SSL-сертификатов в локалке как раз и нужен caddy.
В общем, схему описал достаточно подробно. Вероятно, в чем-то она избыточная.
Сейчас с доступом через CF известная нестабильность. Кроме того, в голову приходят мысли, что мою задачу можно решить более простыми способами. Да и видео про NetBird заставило задуматься. И если есть белый IP (пусть и динамический), то нужен ли мне домен?
Хотел бы попросить более опытных хоумлабщиков подсказать мне более простые и изящные решения для моего случая. Заранее спасибо всем откликнувшимся.
В случае получения от провайдера анонсированного IP-адреса, пусть и динамического (как в моем случае), необходимости во внешнем VPS для доступа к домашней сети нет.
VPS в моем случае опционален и дает возможность дополнительной защиты доступа, обеспечиваемой услугами хостера VPS (например, защита от DDOS). Если VPS не использовать, то эта часть полностью ложится на мои плечи, как администратора домашней сети.
В случае построения схемы без VPS предпочтительно доступ извне организовывать через обратный прокси, даже в случае публикования единственного сервиса.
Поскольку в наши дни незащищенных соединений нужно избегать, то соединение с обратным прокси должно устанавливаться по защищенному SSL-протоколу. А это значит — доменное имя (какого-то уровня) и сертификаты от Let’s Encrypt.
Чтобы не перенастраивать мобильное приложения в домашней сети, разрешать в локальном DNS имя сервиса в тот же реверс-прокси, который ответит с тем же сертификатом (ему без разницы каких клиентов обслуживать). Причем дома трафик пойдет хоть и через обратный прокси, но в локалке — так что проблем со скоростью не будет.
Правильно ли я все понял?
И вопросы:
Где предпочтительнее поднимать обратный прокси — прямо на OpenWrt или лучше в отдельной VM (или LXC-контейнере)?
Поскольку в этой схеме используется DDNS, достаточно ли будет DuckDNS с его бесплатным доменом уровня 3+ (кстати, для таких доменов есть проблема с выпуском и обновлением сертификатов) или нужно регистрировать домен 2-го уровня (как в таком случае использовать его в контексте DDNS — через сервера имен того же DuckDNS)?
Поделюсь своим опытом немного.
До недавнего времени использовал DuckDNS, пока не обнаружил, что его заблокировали (по крайней мере в мобильных сетях тех провайдеров, которыми пользуюсь). Поиск аналогичных сервисов показал, что либо они так же заблокированы, либо не поддерживают DNS challenge для автоматического продления ssl сертификатов. Поэтому пришел к решению, что свой домен нужен.
По поводу обратного прокси, в моей схеме он поднят дома в отдельном LXC. Но доступ к ресурсам получаю через VPS и WG туннель.
на любых роутерах давно есть раздел динднс
роутер просто дергает хттп запрос, где передает новый ип + логин с паролем или ключ апи
в зависимости от провайдера
Регистрируете LE сертификаты при помощи DNS Challenge (самый стабильный вариант)
Добавляете CNAME запись своем домене например @ CNAME ds83edsd.duckdns.org и * CNAME ds83edsd.duckdns.org
PROFIT
В такой схеме можно использовать любой DDNS, в роутерах часто есть или готовый список или что-то свое, как минимум в кинетиках и микротиках есть собственные реализации прямо из коробки в пару кликов
В качестве роутера у меня OpenWrt в VM. Про DuckDNS выше написали, что не во всех сетях работает (надо будет проверить). Если пользоваться обычными регистраторами (типа REG.RU), у них есть API для обновления записей?
Вот список DNS провайдеров и регистраторов, которые поддерживают API для выпуска сертификатов Let’s Encrypt. Там есть и упомянутый выше REG.RU. Можно приобрести домен у одного регистратора, а провайдером выбрать того, кто поддерживает API.
Большое спасибо за ссылку. Проверил все Free по этому списку. Без дополнительных ухищрений открываются сайты лишь двух DNS-провайдеров: Dynu и DNSPod. Думаю, с них и начну.
Про провайдера я правильно понял, что, например, регистрирую свой домен в зоне .RU у какого-нибудь sprinthost.ru, а в качестве серверов имен указываю NS кого-нибудь из этого списка (кажется, это и называется делегированием зоны)? Соответственно, управление зоной я осуществляю через сайт/API провайдера. Я верно все понял?
Ну так можно купить домен сразу на reg.ru и использовать его встроенный DNS, certbot поддерживает работу с ним и больше никаких танцев с бубном.
Пока еще стабильно работает бесплатный DNS от cloudflare.com, я сам держу там зоны, купленные на reg.ru
Да, указывается NS сервер провайдера и полное управление зоной производится уже на его стороне.
P.S. покупать в конечном счете лучше у основных игроков, у меня было несколько доменов на 2domains.ru, они тогда еще по 99р регистрировали домены, потом подняли цены до уровня reg.ru, а потом просто закрылись с переводом всех доменов в reg.ru и когда у сломались мои домены я пошел восстанавливать доступ доменам на reg.ru
Назовите это жлобством, но продление домена в .RU за 1000 руб. для своей хоумлабы я считаю слишком оверпрайсовым. Речь не о публичном сайте идет, а о закрытом доступе для ограниченного круга лиц. Посему для себя рассматриваю порядок цен 150/300. Ну и за имя я не цепляюсь в случае проблем.
Тут я согласен, сам отказался от нескольких доменов по экономическим причинам
sprinthost очень похож ценами и политикой на 2domains, там у меня тоже была куча доменов со скидкой, но потом скукожились. Думал прикупить себе еще один домен для хомлабы, может на sprinthost и сделаю это.
И чтобы два раза не вставать, сразу спрошу. Если провайдер меня вдруг загонит в неанонсированную зону адресов или же сам созрею для VPS, какие минимальные характеристики порекомендуете для него, исходя из того, что разворачивать на нем буду обратный прокси с туннелем в домашнюю сеть, а также что-то из набора того, без чего сейчас ни одна уважающая себя домохозяйка не обходится.
Вроде как на минималках везде предлагают 1 CPU / 0,5–1 GB RAM / 10 GB SSD. Нужен ли 1 ГБ памяти или для такого достаточно 512 МБ? То же самое про дисковое пространство. Локация, естественно, закордонная. И за какие деньги можно такое взять сегодня?
Конкретные предложения, если есть, дабы не превращать пост в рекламный, с благодарностью приму в личку.
На мой взгляд для homelab как раз лучше подойдет отечественный провайдер, у некоторых хостеров есть предложения по цене меньше, чем провайдер просит за белый IP. Плюсом получаю еще и дополнительные вычислительные мощности.
Вот мой reverse proxy с развернутым docker + traefik+authentik proxy outpost + vault agent + nginx для статических страниц ошибок
Это конфигурация с учетом прокачки 2.5Г трафика, если что
Я в свое время остановился на WeaselCloud для обратного направления трафика (надеюсь, понимаете о чем я) по причине
низких цен (Вам хватит минималки за 3 бакса)
безлимитного трафика (там написано 100 мбит, но по факту см. ниже )
возможности оплаты рос. картой
поддержки ipv6
Реальная скорость на той виртуалке
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Deutsche Telekom (Dusseldorf) [197.20 km]: 23.235 ms
Testing download speed................................................................................
Download: 625.45 Mbit/s
Testing upload speed......................................................................................................
Upload: 453.03 Mbit/s