Установка Nginx Proxy Manager в lxc контейнер
Nginx Proxy Manager (NPM) — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.
Основные функции
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.
После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.
Установка Nginx Proxy Manager
Для установки NPM в lxc контейнер, нам понадобиться скрипт с сайта https://community-scripts.github.io/ProxmoxVE/scripts?id=nginxproxymanager
А так же VPN подключение на роутере, для того что бы весь трафик в сети шел через VPN, некоторые пакеты в скрипте не доступны из России
В консоли ноды необходимо ввести
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/nginxproxymanager.sh)"
Сообщения о ошибках можно игнорировать, на все вопросы отвечаем Y
Если все в порядке, после установки у вас появится доступ к панели по адресу http://<ip lxc контейнера с portain>:81
Настройка Nginx Proxy Manager
После установки нам необходимо выполнить несколько обязательных вещей
Проброс портов к npm
В OPNsense нам необходимо перейти в раздел раздел Firewall, далее далее NAT NAT и перейти в в Port Forward, в открывшемся окне нажать справа сверху на на +(add)
В открывшемся окне нужно заполнить поля
Interface: WAN
TCP/IP Version: IPv4
Protocol: TCP
Destination: WAN adress
Destination port range: from: HTTP; to: HTTP
Redirect target IP: Single host of Network, ниже ip используемого lxc контейнера
Redirect target port: HTTP
Description: NPM HTTP for Let's Encrypt
Нажать кнопку кнопку Save
После этого нажимаем кнопку кнопку Apply changes changes и создаем следующее правило кнопкой кнопкой +(add)
Interface: WAN
TCP/IP Version: IPv4
Protocol: TCP
Destination: WAN adress
Destination port range: from: HTTPS; to: HTTPS
Redirect target IP: Single host of Network, ниже ip используемого lxc контейнера
Redirect target port: HTTPS
Description: NPM HTTPS for Let's Encrypt
Нажать кнопку кнопку Save
После этого нажимаем кнопку кнопку Apply changes
Покупка домена reg.ru
Для настройки доменных имен в npm доменное имя необходимо купить по этому поводу уже написана написана подробная статья
После покупки доменного имени и указания его у ДНС провайдера потребуется время что бы запись появилась у ДНС резолверов, проверить это проще всего командой на любом клиенте сети с установленным линукс, я для этих целей создал отдельный тестовый тестовый lxc контейнер
В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.
Настройка сертификата
Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через через certbot, reg.ru ru позволяет запрашивать запрашивать wildcard wildcard сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.
На сайте сайте reg.ru заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.
В В NPM нужно создать создать wildcard-сертификат, во вкладке вкладке Certificates Certificates нужно нажать на кнопку кнопку Let's Encrypt via DNS
В открывшемся окне необходимо заполнить поля
Domain Names: тут указываешь <твоедоменноеимя.ru> и <*.твоедоменноеимя.ru>
DNS Provider: reg.ru
Credentials File Content:
dns_username=<твоя почта на reg.ru>
dns_password=<api колюч>
Propagation Seconds: Лучше указать 600 так как сервера reg.ru могут работать не стабильно
После этого необходимо нажать кнопку кнопку Save Save и подождать 1-5 минут.
Настройка split dns
Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить настроить split dns dns на нашем нашем opnsense.
Технически можно реализовать эту технологию на любом локальном локальном dns dns сервере, но в opnsense уже установлен установлен unbound dns, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку вкладку Services, далее далее Unbound DNS, далее далее Overrides, в открывшемся окне в разделе разделе Hosts Hosts нажать на на +
В открывшемся окне необходимо заполнить поля
Enabled: Галочка
Host: *
Domain: <твой домен>
Type: A (IPv4 address)
IP address: <ip адрес lxc контейнера>
Description: NPM
Далее нажать кнопку кнопку Save Save и Apply
Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.
Для этого необходимо перейти во вкладку вкладку Query forwarding forwarding нажать на + и в открывшемся окне заполнить поля
Enabled: Галочка
Domain: ocsp.int-x3.letsencrypt.org
Server IP: 1.1.1.1
Далее нажать нажать Save Save и и Apply
Теперь необходимо перейти в панель панель npm npm и настроить там группу доступа которую мы будем указывать при создании доменов.
Для этого необходимо перейти во вкладку вкладку Acces list нажать на кнопку кнопку Add Acces list и в открывшемся окне заполнить форму
Во вкладке вкладке Details Details необходимо указать имя нашей группы
Во вкладке вкладке Rules Rules необходимо добавить подсети из которых у нас будет доступ к нашим доменам
Создание и настройка поддомена
Для создания поддомена нам необходимо перейти во вкладку Proxy Hosts и нажать на кнопку Add Proxy Host, в открывшемся окне необходимо заполнить поля
Domain Names: Вводим необходимы домен или поддомен
Scheme: В зависимости от панели к которой хотим открыть доступ выбираем http или https
Forward Hostname / IP: ip нашего сервиса,
Forward Port: Порт нашего сервиса
Access List: в зависимости от того хотим ли что бы сервис работал только локально или был публичным выбираем созданную нами группу доступа или Publicly Accessible
Cache Assets: (Опционально) Включает кэширование статических ресурсов (CSS, JS, изображения) на прокси-сервере для ускорения загрузки страниц, снижая нагрузку на backend-сервер.
Block Common Exploits: (Опционально) Активирует встроенные правила Nginx для защиты от распространённых веб-атак (XSS, SQL-инъекции, кликджекинг) через заголовки безопасности вроде X-Frame-Options и Content-Security-Policy.
Websockets Support: (Опционально) Включает поддержку WebSocket-протокола (ws://, wss://), необходимую для real-time приложений вроде чатов, дашбордов или игр (например, Grafana, Homarr в homelab).
Переходим во вкладку вкладку SSL SSL в открывшемся окне необходимо заполнить поля
SSL Certificate: Указываем созданный нами раннее сертификат
Force SSL: (Опционально) Принудительно перенаправляет весь HTTP-трафик (порт 80) на HTTPS (порт 443) с помощью 301-редиректа, обеспечивая обязательное шифрование.
HSTS Enabled: (Опционально) Включает HTTP Strict Transport Security — браузеры запоминают домен как HTTPS-only на заданный период (max-age), предотвращая MITM-атаки и downgrade до HTTP.
HTTP/2 Support: (Опционально) Активирует протокол HTTP/2 для мультиплексирования запросов, сжатия заголовков и ускорения загрузки (требует SSL).
HSTS Sub-domains: (Опционально) Расширяет HSTS-политику на все поддомены (includeSubDomains), заставляя браузеры применять HTTPS ко всем *.domain.com.
После нажатия кнопки кнопки Save Save домен появится в списке и ресурс станет доступен по заданному домену









