Представь, что у тебя на TrueNAS работает несколько веб-приложений: Nextcloud, Bitwarden, домашняя страница. Каждое слушает на своём порту, и ты вынужден запоминать кучу адресов типа 192.168.1.100:8080, 192.168.1.100:8181. Неудобно, небезопасно и непрофессионально. Решение — обратный прокси (reverse proxy). Он станет единым входом, который будет грамотно распределять запросы по приложениям, добавлять SSL-шифрование и управлять доступом. Давай разберём, как настроить proxy в TrueNAS.
Что такое обратный прокси и зачем он нужен в TrueNAS?
Обратный прокси — это сервер, который принимает запросы от клиентов (твоего браузера) и перенаправляет их на соответствующие внутренние сервисы. В контексте TrueNAS это даёт несколько ключевых преимуществ:
- Единая точка входа: Все приложения доступны через один домен или IP-адрес на стандартных портах (80, 443).
- Централизованное SSL/TLS: Настраиваешь сертификаты один раз на прокси, а не в каждом приложении.
- Безопасность: Прячешь внутреннюю структуру сети, добавляешь базовую аутентификацию, ограничиваешь доступ по IP.
- Балансировка нагрузки: Если приложение запущено в нескольких экземплярах.
- Кэширование: Ускорение отдачи статического контента.
Выбор решения для прокси в TrueNAS
Есть два основных кандидата: Nginx Proxy Manager (удобный GUI) и Traefik (нативный для Kubernetes). Выбор зависит от твоей системы и опыта.
| Решение | Лучше для | Плюсы | Минусы |
|---|---|---|---|
| Nginx Proxy Manager | TrueNAS Scale (как приложение) и TrueNAS Core (в jail) | Веб-интерфейс, простота, встроенный Let's Encrypt | Меньше гибкости для сложных сценариев |
| Traefik | TrueNAS Scale (нативный ingress-контроллер) | Автоматическое обнаружение сервисов, идеально для Kubernetes | Конфигурация через файлы, требует понимания K8s |
| Ручной Nginx/Caddy | TrueNAS Core (в jail), полный контроль | Максимальная гибкость и производительность | Требует глубоких знаний, настройка вручную |
Настройка Nginx Proxy Manager в TrueNAS Scale
Это самый популярный и простой способ. Устанавливаем его как обычное приложение из каталога TrueNAS.
Шаг 1: Установка приложения
- В веб-интерфейсе TrueNAS Scale перейди в «Apps».
- Нажми «Discover Apps».
- Найди «nginx-proxy-manager» (официальный образ от jc21).
- Нажми «Install».
Шаг 2: Конфигурация установки
В настройках установки критически важно правильно пробросить порты и тома (storage).
# Пример конфигурации портов в манифесте приложения (Apps -> Edit)
networking:
containerPort: 80 # Внутренний порт HTTP
hostPort: 80 # Проброс на порт 80 хоста (основной веб)
containerPort2: 443
hostPort2: 443 # Проброс на порт 443 хоста (HTTPS)
containerPort3: 81
hostPort3: 81 # Проброс на порт 81 хоста (админка NPM)
storage:
# Обязательно пробрось том для данных
- mountPath: /data
datasetName: путь/к/твоему/датасету # Например, pool/apps/npm_data
Шаг 3: Первый вход и базовая настройка
- После установки открой
http://IP_ТВОЕГО_TRUENAS:81. - Стандартные учётные данные: Email: admin@example.com, Password: changeme. Сразу смени пароль.
- Перейди в «SSL Certificates» → «Add SSL Certificate» → «Let's Encrypt».
- Введи свой домен (например,
nas.tvoi-domain.ru), email для уведомлений. Убедись, что порт 80 открыт для интернета или используешь DNS challenge.
Шаг 4: Добавление прокси-хоста (Proxy Host)
Теперь создадим правило для перенаправления запросов на твоё внутреннее приложение, например, Nextcloud.
- В панели NPM нажми «Hosts» → «Proxy Hosts» → «Add Proxy Host».
- Domain Names:
nextcloud.tvoi-domain.ru(или subdomain, или путь). - Scheme:
http(если приложение не на HTTPS). - Forward Hostname / IP: Внутренний IP или DNS-имя контейнера Nextcloud. В Scale это часто что-то вроде
ix-nextcloud. - Forward Port: Порт, на котором слушает Nextcloud (например, 8080).
- На вкладке «SSL» выбери выданный ранее сертификат Let's Encrypt, включи «Force SSL» и «HTTP/2 Support».
- Сохрани. Через пару минут сможешь зайти на
https://nextcloud.tvoi-domain.ru.
Использование Traefik как Ingress-контроллера в TrueNAS Scale
Если ты разворачиваешь приложения через официальные «Apps» в Scale, Traefik уже предустановлен как системный ingress-контроллер. Настройка идёт через аннотации в конфиге приложения.
Настройка приложения для работы с Traefik
При установке приложения (например, Nextcloud) нужно добавить несколько аннотаций в раздел «Web Portal Configuration» или «Advanced DNS/Ingress».
# Пример аннотаций для приложения в TrueNAS Scale
# В разделе конфигурации Ingress/Portal добавь:
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
traefik.ingress.kubernetes.io/router.tls: "true"
cert-manager.io/cluster-issuer: letsencrypt-prod # Если используешь cert-manager
# В разделе Hosts укажи свой домен
hosts:
- host: nextcloud.tvoi-domain.ru
paths:
- path: /
pathType: Prefix
serviceName: ix-nextcloud # Имя сервиса приложения
servicePort: 8080
После применения конфигурации Traefik автоматически обнаружит новое правило, получит сертификат (если настроен cert-manager) и начнёт маршрутизировать трафик.
Настройка прокси в TrueNAS Core через Jail
В Core нет встроенного менеджера приложений. Создаём jail, устанавливаем в него Nginx вручную и конфигурируем.
Шаг 1: Создание и настройка Jail
# В CLI TrueNAS Core или через веб-интерфейс создай jail
# Через веб: Jails -> Add -> Укажи имя (например, proxy-jail)
# Зайди в jail
sudo iocage console proxy-jail
# Обнови репозитории и установи nginx и редактор
pkg update && pkg upgrade -y
pkg install -y nginx nano
Шаг 2: Базовая конфигурация Nginx
Создаём конфиг виртуального хоста для нашего прокси.
# /usr/local/etc/nginx/nginx.conf (основной конфиг) - оставь дефолтный.
# Создай конфиг для сайта в sites-available
nano /usr/local/etc/nginx/sites-available/truenas-proxy
# Вставь базовую конфигурацию:
server {
listen 80;
server_name nas.tvoi-domain.ru;
location / {
proxy_pass http://192.168.1.100; # IP твоего TrueNAS
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# Создай симлинк в sites-enabled
ln -s /usr/local/etc/nginx/sites-available/truenas-proxy /usr/local/etc/nginx/sites-enabled/
# Проверь конфигурацию
nginx -t
# Запусти nginx и добавь в автозагрузку
service nginx start
sysrc nginx_enable="YES"
Продвинутые сценарии и оптимизация
Настройка аутентификации (Basic Auth)
В Nginx Proxy Manager это делается в пару кликов в интерфейсе. Для ручного Nginx в Core:
# Создай файл с паролями
sudo sh -c "echo -n 'user:' >> /usr/local/etc/nginx/.htpasswd"
sudo sh -c "openssl passwd -apr1 >> /usr/local/etc/nginx/.htpasswd"
# Введи пароль дважды
# Добавь в location блок в конфиге nginx
auth_basic "Restricted Area";
auth_basic_user_file /usr/local/etc/nginx/.htpasswd;
Проброс реального IP-адреса клиента
Чтобы внутренние приложения (например, Nextcloud или логгеры) видели настоящий IP пользователя, а не IP прокси, используй эти заголовки (уже есть в примерах выше) и настрой доверенные подсети.
# В основной конфиг nginx (http блок) или в конфиг прокси
set_real_ip_from 192.168.1.0/24; # Твоя локальная сеть
real_ip_header X-Forwarded-For;
real_ip_recursive on;