Post

Локальні домени без портів: налаштовуємо AdGuard Home + Nginx Proxy Manager в Homelab

Локальні домени без портів: налаштовуємо AdGuard Home + Nginx Proxy Manager в Homelab

🇬🇧 Read this article in English


Коли кількість сервісів у домашній лабораторії (Homelab) починає перевищувати три-чотири, настає біль. Запам’ятовувати десятки адрес на кшталт 192.168.50.125:3000 (Grafana), 192.168.50.125:8080 (інший сервіс) чи 192.168.50.67:32400 (Plex) стає просто неможливо.

Набагато приємніше вводити в браузері прості й красиві імена: http://grafana.home, http://adguard.home чи http://truenas.home.

Сьогодні ми розгорнемо та зв’яжемо в єдину систему AdGuard Home (локальний DNS-сервер) та Nginx Proxy Manager (реверс-проксі) за допомогою Docker. Це дозволить назавжди забути про IP-адреси та номери портів у локальній мережі.


Як працює ця зв’язка?

Схема роботи дуже проста і виглядає так:

  1. Ви вводите в браузері адресу http://grafana.home.
  2. Ваш комп’ютер запитує у локального DNS (AdGuard Home): «Де лежить цей домен?».
  3. AdGuard Home відповідає: «Він лежить на IP нашого проксі-сервера (Ubuntu VM)».
  4. Запит прилітає на проксі-сервер (Nginx Proxy Manager) на стандартний веб-порт 80.
  5. Проксі-сервер дивиться на домен grafana.home, розуміє, що цей сервіс запущений на порті 3000, і непомітно для вас перенаправляє туди трафік.

Крок 1. Запуск через Docker Compose

Ми об’єднаємо обидва сервіси в один стек. Для цього створимо окрему робочу папку /opt/gateway на сервері та запустимо такий файл docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3.8'

services:
  adguardhome:
    image: adguard/adguardhome:latest
    container_name: adguardhome
    restart: unless-stopped
    volumes:
      - ./adguard/workdir:/opt/adguardhome/work
      - ./adguard/confdir:/opt/adguardhome/conf
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "3002:3000/tcp" # Порт для початкового налаштування
      - "8080:80/tcp"   # Порт панелі адміна AdGuard

  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'   # Стандартний веб-порт HTTP
      - '81:81'   # Панель адміна проксі
      - '443:443' # Порт HTTPS
    volumes:
      - ./npm/data:/data
      - ./npm/letsencrypt:/etc/letsencrypt

⚠️ Важлива порада щодо Ubuntu Server:
Ubuntu за замовчуванням запускає службу systemd-resolved, яка займає порт 53 (DNS). Щоб контейнер AdGuard зміг запуститися, вам потрібно вимкнути заглушку в файлі /etc/systemd/resolved.conf (встановити DNSStubListener=no) та перезапустити резолвер.


Крок 2. Налаштування AdGuard Home

Після запуску відкриваємо первинне налаштування на порті 3002 (наприклад, http://192.168.50.125:3002), створюємо користувача та переходимо у головну панель адміністрування.

Авторизація в AdGuard Мал. 1. Панель авторизації AdGuard Home

Тепер нам потрібно створити правило, яке направлятиме всі локальні домени на проксі-сервер.

  1. Перейдіть у меню Filters (Фільтри) -> DNS Rewrites (Перенаправлення DNS).
  2. Натисніть Add DNS Rewrite.
  3. Замість того, щоб додавати кожен сайт вручну, зробимо глобальний wildcard-запис:
    • Domain: *.home
    • IP Address: IP твого проксі-сервера (наприклад, 192.168.50.125).

Налаштування DNS Rewrite в AdGuard Мал. 2. Налаштування DNS-перенаправлень у меню AdGuard Home

Тепер будь-який домен, що закінчується на .home (наприклад, grafana.home, portainer.home), автоматично перенаправлятиметься на IP-адресу реверс-проксі.


Крок 3. Налаштування Nginx Proxy Manager

Заходимо в панель проксі-сервера на порт 81 (вхід за замовчуванням: admin@example.com / changeme).

Тепер створюємо правила для перенаправлення наших красивих доменів на внутрішні порти. Для кожного сервісу створюємо Proxy Host:

  • Domain Names: Вказуємо локальний домен (наприклад, grafana.home).
  • Forward Host/IP: Вказуємо IP-адресу, де працює сервіс.
  • Forward Port: Вказуємо порт (наприклад, 3000 для Grafana чи 8080 для AdGuard).

Список проксі хостів NPM Мал. 3. Список налаштованих проксі-хостів в Nginx Proxy Manager

Коли ви збережете налаштування, Nginx Proxy Manager автоматично перехоплюватиме запити на grafana.home і проксіюватиме їх на відповідний порт.


🔒 Безпека та захист від хакерів

Оскільки ми налаштовуємо сервери самостійно, важливо дотримуватися правил цифрової гігієни, щоб не залишити лазівок для зловмисників:

  1. Тільки локальний DNS: Наші домени на .home існують виключно всередині вашої домашньої мережі. Інтернет про них нічого не знає. Це робить їх повністю невидимими для зовнішніх сканерів та хакерів.
  2. Не відкривайте адмін-панелі на роутері: Панель керування проксі (порт 81) та панель AdGuard (порт 8080) мають бути закритими ззовні. Ніколи не прокидайте ці порти на роутері (Port Forwarding). Якщо потрібен віддалений доступ — заходьте тільки через Tailscale або інший захищений VPN.
  3. Локальні IP-адреси: Відображення адрес типу 192.168.50.X у скріншотах чи статтях є абсолютно безпечним, оскільки це «сірі» (приватні) IP-адреси, які не маршрутизуються в інтернеті. Жоден хакер не зможе підключитися до них ззовні.

Висновок

Комбінація AdGuard Home та Nginx Proxy Manager робить керування домашнім сервером неймовірно зручним. Ви отримуєте не тільки чистий інтернет без реклами для всієї родини, але й красиву, зручну навігацію по всіх сервісах вашої ІТ-лабораторії.

This post is licensed under CC BY 4.0 by the author.