Установка и настройка Nginx proxy manager в docker portainer, настройка split dns, настройка wildcard-сертификата
После установки docker portainer
Nginx Proxy Manager (NPM) — это удобный инструмент с веб-интерфейсом для управления обратным прокси на базе Nginx, который упрощает маршрутизацию трафика к сервисам в Docker, LXC или VM без редактирования конфигов вручную.
Основные функции
Поддерживает проксирование по доменам/поддоменам, автоматическое получение SSL-сертификатов Let's Encrypt, HTTP-аутентификацию, списки доступа (ACL) и блокировку IP. Позволяет настраивать перенаправления, кастомные страницы ошибок и потоки TCP/UDP через Streams.
После покупки домена и регистрации его у dns провайдеров у нас появляется возможность реализовать обратный прокси трафика по доменному имени, это позволит нам убрать отображение ip адресов из нашей homelab и реализовать доступ из интернета к веб панелям необходимых нам сервисов.
Установка Nginx Proxy Manager
Для установки Nginx Proxy Manager (npm) в docker через portainer, нам необходимо перейти в веб-интерфейс portainer
http://<ip lxc контейнера>:9000
В веб интерфейсе необходимо перейти в docker
Слева или в центре экрана выбрать Stacks
Слева сверху выбрать +Add stack
В name указать название нашего контейнера npm
Ниже в поле для ввода кода Web editor, вводим код нашего docker-compose файла
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Админка NPM
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
DISABLE_IPV6: 'true'
После ввода необходимо нажать кнопку Deploy the stack
Если все в порядке, после установки у вас появится доступ к панели по адресу http://<ip lxc контейнера с portain>:81
Настройка Nginx Proxy Manager
После установки нам необходимо выполнить несколько обязательных вещей
Проброс портов к npm
В OPNsense нам необходимо перейти в раздел Firewall, далее 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 и создаем следующее правило кнопкой +(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 контейнер
dig <ваш домен>
В выводе команды должен отобразится внешний ip адрес, запись проводится в течении 1-24 часов.
Настройка сертификата
Так как мы планируем использовать большое количество поддоменов нам не подходит вариант с обычным запросом сертификата через certbot, reg.ru позволяет запрашивать wildcard сертификат на домен и все поддомены, поэтому мы будем настраивать сразу его.
На сайте reg.ru заходишь в личный кабинет, далее Настройки API, запрашиваешь ключ API, его необходимо записать.
В NPM нужно создать wildcard-сертификат, во вкладке Certificates нужно нажать на кнопку Let's Encrypt via DNS
В открывшемся окне необходимо заполнить поля
Domain Names: тут указываешь <твоедоменноеимя.ru> и <*.твоедоменноеимя.ru>
DNS Provider: reg.ru
Credentials File Content:
dns_username=<твоя почта на reg.ru>
dns_password=<api колюч>
После этого необходимо нажать кнопку Save и подождать 1-5 минут.
Настройка split dns
Так как мы не хотим что бы все наши домены были доступны из сети, и для оптимизации подключения к доменам, нам необходимо настроить split dns на нашем opnsense.
Технически можно реализовать эту технологию на любом локальном dns сервере, но в opnsense уже установлен unbound dns, в котором есть необходимый нам функционал (ubound dns должен быть включен и настроен), для этого нам необходимо перейти во вкладку Services, далее Unbound DNS, далее Overrides, в открывшемся окне в разделе Hosts нажать на +
В открывшемся окне необходимо заполнить поля
Enabled: Галочка
Host: *
Domain: <твой домен>
Type: A (IPv4 address)
IP address: <ip адрес lxc контейнера>
Description: NPM
Далее нажать кнопку Save и Apply
Следующим шагом нужно указать Query forwarding для нашего сертификата, что бы избежать проблем с сертификатами в локальной сети при переходе по нашим доменам.
Для этого необходимо перейти во вкладку Query forwarding нажать на + и в открывшемся окне заполнить поля
Enabled: Галочка
Domain: ocsp.int-x3.letsencrypt.org
Server IP: 1.1.1.1
Далее нажать Save и Apply
Теперь необходимо перейти в панель npm и настроить там группу доступа которую мы будем указывать при создании доменов.
Для этого необходимо перейти во вкладку Acces list нажать на кнопку Add Acces list и в открывшемся окне заполнить форму
Во вкладке Details необходимо указать имя нашей группы
Во вкладке 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 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 домен появится в списке и ресурс станет доступен по заданному домену















No comments to display
No comments to display