Files
wikipedia/HomeLab/LXC - npm_keenetic_setup.md
T

95 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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 успешно подключается снаружи по новому адресу.