Files
wikipedia/HomeLab/LXC - npm_keenetic_setup.md
T

7.1 KiB
Raw Blame History

#npm #ssl #keenetic

Настройка Nginx Proxy Manager (NPM) в связке с Keenetic

Руководство по переносу маршрутизации трафика и управлению SSL-сертификатами Let's Encrypt с роутера Keenetic (при наличии белого IP) на специализированный реверс-прокси Nginx Proxy Manager, развернутый в LXC-контейнере.


Архитектурная схема

[Интернет] 
    ↓ (порты 80, 443)
[Роутер Keenetic] (Проброс портов / NAT)
    ↓
[LXC: Nginx Proxy Manager] (Терминация SSL, маршрутизация)
    ├── → https://ha.domain.link   →  [LXC: Home Assistant] (порт 8123)
    ├── → https://nas.domain.link  →  [TrueNAS / Synology] (порт 5001)
    └── → https://proxmox.domain.link → [Proxmox VE] (порт 8006)

Шаг 1. Подготовка роутера Keenetic

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

  1. Отключение встроенного проксирования KeenDNS:
    • Перейдите в Сетевые правила → KeenDNS.
    • Удалите (или отключите) все правила из секции «Доступ к веб-ресурсам домашней сети», чтобы Keenetic не перехватывал субдомены 4-го порядка.
  2. Проброс портов (NAT):
    • Перейдите в Сетевые правила → Переадресация.
    • Создайте два правила для вашего интерфейса «Провайдер» (основной интернет-канал):
      • HTTP: Внешний порт 80 → IP-адрес вашего LXC NPM → Внутренний порт 80.
      • HTTPS: Внешний порт 443 → IP-адрес вашего LXC NPM → Внутренний порт 443.

Шаг 2. Выпуск Wildcard-сертификата в NPM (DNS Challenge)

Чтобы не открывать порт 80 для каждой проверки Let's Encrypt и автоматически защитить все субдомены вида *.yourdomain.keenetic.link, настроим проверку через DNS API.

💡 Примечание: Так как Keenetic не всегда предоставляет полноценный API-доступ сторонним утилитам для доменов *.keenetic.link, для выпуска Wildcard-сертификата в NPM рекомендуется использовать связку со сторонним бесплатным DNS-провайдером (например, Cloudflare, перенеся туда управление зоной, либо используя Cloudflare-сертификат). Если вы остаетесь на чистом keenetic.link, используйте метод проверки HTTP Challenge (через порт 80).

Инструкция для выпуска общего Wildcard-сертификата (через DNS API Cloudflare/других):

  1. Откройте веб-интерфейс NPM (обычно порт 81).
  2. Перейдите во вкладку SSL Certificates → Add SSL Certificate → Let's Encrypt.
  3. Заполните поля:
    • Domain Names: yourdomain.keenetic.link и затем на следующей строчке *.yourdomain.keenetic.link.
    • Включите тумблер Use a DNS Challenge.
    • В списке DNS Provider выберите вашего провайдера (например, Cloudflare).
    • Вставьте ваш секретный API-токен в текстовое поле конфигурации ниже.
  4. Согласитесь с условиями Let's Encrypt и нажмите Save. В течение 1–2 минут сертификат будет готов.

Шаг 3. Добавление прокси-хоста (на примере Home Assistant)

  1. В интерфейсе NPM перейдите во вкладку Hosts → Proxy Hosts → Add Proxy Host.
  2. Во вкладке Details заполните параметры:
    • Domain Names: ha.yourdomain.keenetic.link (замените ha на ваш субдомен 4-го порядка).
    • Scheme: http (большинство сервисов внутри локальной сети работают по HTTP).
    • Forward Name/IP: Локальный IP-адрес вашего Home Assistant (например, 192.168.1.100).
    • Forward Port: Порт сервиса (для HA по умолчанию 8123).
    • Включите тумблеры: Block Common Exploits и Websockets Support (критически важно для работы Home Assistant!).
  3. Перейдите во вкладку SSL:
    • В выпадающем списке SSL Certificate выберите выпущенный ранее Wildcard-сертификат.
    • Включите тумблеры: Force SSL (для автоматического редиректа с HTTP на HTTPS) и HTTP/2 Support.
  4. Нажмите Save.

Шаг 4. Настройка доверенного прокси в Home Assistant

Home Assistant по умолчанию блокирует запросы от обратных прокси-серверов в целях безопасности. Без этого шага при попытке войти через веб-интерфейс вы получите ошибку «400: Bad Request».

  1. Откройте конфигурационный файл Home Assistant (configuration.yaml).
  2. Добавьте или отредактируйте следующий блок кода:
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.1.50  # !!! ЗАМЕНИТЕ НА РЕАЛЬНЫЙ IP-АДРЕС ВАШЕГО LXC-КОНТЕЙНЕРА С NPM !!!
  1. Сохраните файл и перезапустите Home Assistant через панель разработчика или перезагрузив контейнер HA.

Чек-лист проверки работоспособности

  • Порты 80 и 443 проброшены на Keenetic в сторону IP NPM.
  • При переходе по адресу https://ha.yourdomain.keenetic.link открывается окно авторизации Home Assistant.
  • В адресной строке браузера горит значок «замочка» (сертификат валиден, выпущен Let's Encrypt).
  • Мобильное приложение Home Assistant Companion успешно подключается снаружи по новому адресу.