Представь, что тебе нужно безопасно подключиться к своей домашней сети с TrueNAS из любой точки мира — проверить состояние резервных копий, получить доступ к файлам или управлять виртуальными машинами. OpenVPN на TrueNAS — это идеальное решение. Давай разберем, как превратить твой TrueNAS в полноценный VPN-сервер, шаг за шагом, как для junior-разработчика.
Зачем запускать OpenVPN на TrueNAS?
TrueNAS — это не просто система хранения, а полноценная платформа, на которой можно развернуть сервисы. Запуск OpenVPN на TrueNAS дает несколько преимуществ:
- Безопасный удаленный доступ ко всей домашней сети через один вход
- Возможность работать с сетевыми ресурсами (SMB, NFS) как из локальной сети
- Доступ к веб-интерфейсам сервисов (TrueNAS, Nextcloud, Plex) без проброса портов в интернет
- Шифрование всего трафика между клиентом и сервером
- Централизованное управление доступом через один сервер
Метод 1: OpenVPN на TrueNAS Scale через Docker
TrueNAS Scale основан на Debian Linux и поддерживает запуск приложений через Docker (Kubernetes). Это наиболее гибкий и современный способ.
Шаг 1: Подготовка сети и хранилища
Сначала создадим Dataset для хранения конфигурации OpenVPN и сертификатов:
- В веб-интерфейсе TrueNAS перейди в «Datasets»
- Создай новый Dataset (например,
openvpn-config) - Установи права доступа: Владелец/Группа —
apps, разрешения —770
Шаг 2: Настройка статического IP для TrueNAS
Для VPN-сервера критически важно иметь статический IP-адрес в локальной сети:
# Проверь текущие сетевые настройки
ip addr show
# В веб-интерфейсе TrueNAS:
# 1. Перейди в Network → Interfaces
# 2. Выбери основной интерфейс (обычно enp0sX или eth0)
# 3. Установи статический IP, маску, шлюз и DNS
# 4. Примени изменения
Шаг 3: Установка приложения OpenVPN через TrueNAS Apps
Используем готовый образ kylemanna/openvpn — один из самых популярных и хорошо поддерживаемых.
- Перейди в «Apps» → «Discover Apps»
- Нажми «Launch Docker Image»
- Заполни параметры:
- Image Repository:
kylemanna/openvpn - Image Tag:
latestили конкретную версию
- Image Repository:
Шаг 4: Конфигурация контейнера OpenVPN
Настройка томов и переменных окружения — ключевой этап:
# В разделе Storage (тома) добавь:
- Host Path: /mnt/pool/openvpn-config
Mount Path: /etc/openvpn
Read Only: false
# В разделе Network Configuration:
- Network Type: Host Network
# ИЛИ если используешь отдельную сеть:
# Host Network: false
# Port Forwarding: 1194 UDP → 1194 контейнера
# Переменные окружения (Environment Variables):
- name: OVPN_SERVER_URL
value: "udp://ТВОЙ_ПУБЛИЧНЫЙ_IP_ИЛИ_DNS:1194"
- name: OVPN_NETWORK
value: "10.8.0.0 255.255.255.0"
- name: OVPN_DNS_SERVERS
value: "8.8.8.8,8.8.4.4" # или твои локальные DNS
Шаг 5: Инициализация сервера и генерация клиентских конфигов
После запуска контейнера нужно инициализировать PKI (инфраструктуру открытых ключей):
# 1. Подключись к консоли контейнера через TrueNAS UI
# 2. Инициализируй конфигурацию (замени EXAMPLE.COM на свой домен)
docker-compose run --rm openvpn ovpn_genconfig -u udp://EXAMPLE.COM:1194
# 3. Сгенерируй корневой сертификат и ключ
# Введи пароль для CA и пароль для сертификата сервера
docker-compose run --rm openvpn ovpn_initpki
# 4. Сгенерируй клиентский сертификат без пароля (для удобства)
docker-compose run --rm openvpn easyrsa build-client-full client1 nopass
# 5. Экспортируй конфиг для клиента
docker-compose run --rm openvpn ovpn_getclient client1 > client1.ovpn
client1.ovpn содержит приватные ключи. Храни его в безопасности! Не передавай по незащищенным каналам.
Метод 2: OpenVPN на TrueNAS Core через плагин
Для TrueNAS Core (на основе FreeBSD) используется плагин из коллекции FreeBSD.
Установка плагина OpenVPN
- Перейди в «Plugins»
- Найди «openvpn» в списке доступных плагинов
- Нажми «Install», выбери jail (или создай новую)
- После установки перейди в «Jails» → выбери jail OpenVPN → «Shell»
Базовая настройка сервера OpenVPN в FreeBSD jail
# Внутри jail обнови пакеты и установи OpenVPN
pkg update && pkg upgrade -y
pkg install openvpn easy-rsa
# Скопируй пример конфигурации
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf \
/usr/local/etc/openvpn/server.conf
# Отредактируй конфиг
vi /usr/local/etc/openvpn/server.conf
# Ключевые параметры для редактирования:
# port 1194
# proto udp
# dev tun
# server 10.8.0.0 255.255.255.0
# push "route 192.168.1.0 255.255.255.0" # твоя локальная сеть
# push "dhcp-option DNS 192.168.1.1" # твой DNS
Настройка сетевого моста и фаервола
Чтобы клиенты VPN могли видеть другие устройства в локальной сети, нужно правильно настроить маршрутизацию.
Включение IP-форвардинга на TrueNAS Scale
# Подключись к TrueNAS по SSH
ssh root@truenas.local
# Проверь текущие настройки
sysctl net.ipv4.ip_forward
# Если значение 0, включи форвардинг
sysctl -w net.ipv4.ip_forward=1
# Чтобы настройка сохранилась после перезагрузки:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Правила фаервола для OpenVPN
Не забудь открыть порт 1194 UDP на фаерволе TrueNAS:
# На TrueNAS Scale через веб-интерфейс:
# 1. Перейди в Network → Firewall Rules
# 2. Добавь новое правило:
# - Interface: выбери WAN интерфейс
# - Protocol: UDP
# - Port: 1194
# - Action: ALLOW
# - Description: OpenVPN Server
# Для TrueNAS Core (через IPFW в jail):
ipfw add allow udp from any to me 1194
Сравнение методов: Docker на Scale vs Плагин на Core
| Критерий | TrueNAS Scale + Docker | TrueNAS Core + Плагин |
|---|---|---|
| Простота настройки | Высокая (GUI, готовые образы) | Средняя (требует работы в shell) |
| Гибкость | Очень высокая (любые образы Docker) | Ограниченная (только FreeBSD пакеты) |
| Производительность | Отличная (прямой доступ к сети) | Хорошая (изоляция через jail) |
| Обновление | Простое (обновление образа) | Через pkg update |
| Рекомендация | Для новых установок и Scale | Для существующих систем Core |
Типичные проблемы и их решение
Решение: Проверь параметры
push "route ..." в конфиге сервера и включен ли IP-форвардинг.
Решение: Убедись, что время на сервере и клиенте синхронизировано (NTP). Проверь срок действия сертификатов.
Решение: 1) Используй протокол UDP вместо TCP. 2) Поэкспериментируй с параметрами шифрования. 3) Убедись, что у провайдера нет ограничений на VPN-трафик.
Оптимизация производительности OpenVPN
Для максимальной скорости добавь эти параметры в конфиг сервера:
# В server.conf или ovpn_env.sh:
sndbuf 0
rcvbuf 0
push "sndbuf 0"
push "rcvbuf 0"
# Используй современные алгоритмы шифрования:
cipher AES-256-GCM
auth SHA256
# Для многопоточности (только если CPU поддерживает):
# (добавь в конфиг клиента тоже)
# ncp-ciphers AES-256-GCM:AES-128-GCM
Безопасность: Лучшие практики
- Используй стойкие алгоритмы шифрования: AES-256-GCM вместо устаревшего Blowfish
- Регулярно обновляй OpenVPN: Уязвимости исправляются в новых версиях
- Ограничь доступ по IP: Настрой фаервол, чтобы принимать подключения только с доверенных сетей
- Используй двухфакторную аутентификацию: Можно интегрировать с Google Authenticator
- Веди логи: Мониторь подключения в
/var/log/openvpn.log
Автоматизация: Скрипт для быстрого создания клиентов
Создай скрипт для автоматической генерации клиентских конфигов:
#!/bin/bash
# save as /mnt/pool/openvpn-config/create_client.sh
CLIENT_NAME="$1"
if [ -z "$CLIENT_NAME" ]; then
echo "Usage: $0 client_name"
exit 1
fi
# Генерация клиента (для Docker-контейнера)
docker exec openvpn_app easyrsa build-client-full $CLIENT_NAME nopass
docker exec openvpn_app ovpn_getclient $CLIENT_NAME > /mnt/pool/openvpn-config/$CLIENT_NAME.ovpn
# Добавь параметры для Windows клиентов, если нужно
if [ "$2" = "windows" ]; then
echo -e "\n# Windows-specific settings\nroute-method exe\nroute-delay 2" >> /mnt/pool/openvpn-config/$CLIENT_NAME.ovpn
fi
echo "Client config generated: /mnt/pool/openvpn-config/$CLIENT_NAME.ovpn"
echo "Transfer this file securely to the client!"
Теперь у тебя есть полноценный VPN-сервер на базе TrueNAS. Ты можешь безопасно подключаться к своей домашней сети из любой точки мира, работать с файлами на NAS как из локальной сети и управлять другими сервисами. Помни о безопасности: регулярно обновляй, используй стойкие пароли и мониторь логи подключений.