#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. Добавьте или отредактируйте следующий блок кода: ```yaml http: use_x_forwarded_for: true trusted_proxies: - 192.168.1.50 # !!! ЗАМЕНИТЕ НА РЕАЛЬНЫЙ IP-АДРЕС ВАШЕГО LXC-КОНТЕЙНЕРА С NPM !!! ``` 3. Сохраните файл и **перезапустите** Home Assistant через панель разработчика или перезагрузив контейнер HA. --- ## Чек-лист проверки работоспособности - [ ] Порты 80 и 443 проброшены на Keenetic в сторону IP NPM. - [ ] При переходе по адресу `https://ha.yourdomain.keenetic.link` открывается окно авторизации Home Assistant. - [ ] В адресной строке браузера горит значок «замочка» (сертификат валиден, выпущен Let's Encrypt). - [ ] Мобильное приложение Home Assistant Companion успешно подключается снаружи по новому адресу.