Настройка OpenVPN-сервера с веб-интерфейсом в Docker
OpenVPN — это широко распространённое, безопасное и гибкое решение для создания виртуальных частных сетей (VPN). Оно позволяет объединять удалённые компьютеры в единую защищённую сеть, шифруя весь трафик между ними. OpenVPN работает поверх протоколов UDP или TCP, поддерживает аутентификацию по сертификатам, логину/паролю и может использоваться для:
- обеспечения безопасного доступа сотрудников к корпоративным ресурсам из дома;
- защиты соединения в общественных Wi-Fi сетях;
- объединения нескольких офисов в одну сеть.
В отличие от многих коммерческих VPN-сервисов, OpenVPN является полностью бесплатным и открытым. Вы можете развернуть собственный сервер на своём оборудовании или в облаке, получив полный контроль над данными и неограниченное количество одновременных подключений.
Однако ручное управление сертификатами и конфигурациями может быть сложным для новичков. Именно поэтому мы дополним OpenVPN удобным веб-интерфейсом, который позволит создавать клиентов, скачивать конфигурации и отслеживать статус сервера в несколько кликов.
В этой статье мы пошагово развернём OpenVPN-сервер с веб-панелью на базе Docker — самой популярной платформе контейнеризации. Всё будет работать в двух контейнерах:
kylemanna/openvpn — проверенный, стабильный образ самого сервера OpenVPN (более 10 млн загрузок).
d3vilh/openvpn-ui — современный веб-интерфейс для управления сервером.
Предварительные требования
- Сервер под управлением Linux (Ubuntu, Debian, CentOS, Fedora и т.д.) с доступом в интернет.
- Установленный Docker и Docker Compose (достаточно Docker Engine, Compose не обязателен, но удобен).
- Публичный IP-адрес сервера (или домен, указывающий на него).
- Открытые порты в фаерволе: 1194/udp (для VPN) и 8072/tcp (для веб-интерфейса).
Проверьте, загружен ли модуль ядра tun (необходим для работы VPN):
lsmod | grep tunЕсли пусто, загрузите модуль и добавьте в автозагрузку:
sudo modprobe tun
echo "tun" | sudo tee -a /etc/modules-load.d/tun.confВключите IP-форвардинг (маршрутизацию), чтобы клиенты могли выходить в интернет через VPN:
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.confПошаговая установка
1. Очистка старых контейнеров (если есть)
Чтобы избежать конфликтов, остановите и удалите все контейнеры, связанные с OpenVPN:
docker stop openvpn openvpn-server openvpn-ui 2>/dev/null
docker rm openvpn openvpn-server openvpn-ui 2>/dev/null2. Создание Docker-тома для данных
Том будет хранить все сертификаты, ключи и конфигурации. Данные не пропадут при пересоздании контейнеров.
docker volume create ovpn-data3. Генерация базовой конфигурации сервера
Укажите ваш публичный IP-адрес или домен, который будут использовать клиенты для подключения. Например, vpn.example.com или 203.0.113.10.
docker run -v ovpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://ВАШ_IP_ИЛИ_ДОМЕН4. Добавление management-интерфейса (необходим для веб-панели)
Веб-интерфейс d3vilh/openvpn-ui подключается к OpenVPN через специальный management-порт (по умолчанию 2080). Добавим эту опцию в конфигурацию:
docker run -v ovpn-data:/etc/openvpn --rm alpine sh -c "echo 'management 127.0.0.1 2080' >> /etc/openvpn/openvpn.conf"5. Инициализация PKI (создание центра сертификации)
Этот шаг создаст корневой сертификат (CA), серверный сертификат и ключи. Вам будет предложено придумать пароль CA — запишите его, он понадобится при создании клиентов.
docker run -v ovpn-data:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpkiСледуйте инструкциям:
- На запрос
Enter New CA Key Passphrase:введите пароль и подтвердите. - На
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:можно просто нажать Enter. - На запрос
Enter pass phrase for /etc/openvpn/pki/private/ca.key:введите тот же пароль.
6. Запуск OpenVPN-сервера
docker run -d \
--name openvpn \
--restart unless-stopped \
--cap-add=NET_ADMIN \
--device /dev/net/tun \
-p 1194:1194/udp \
-v ovpn-data:/etc/openvpn \
kylemanna/openvpnПроверьте, что контейнер запустился:
docker ps | grep openvpn7. Запуск веб-интерфейса
docker run -d \
--name openvpn-ui \
--restart unless-stopped \
--cap-add NET_ADMIN \
--privileged \
-p 8072:8080/tcp \
-e OPENVPN_ADMIN_USERNAME=admin \
-e OPENVPN_ADMIN_PASSWORD=ваш_пароль \
-v ovpn-data:/etc/openvpn \
-v openvpn-ui-data:/opt/openvpn-gui/db \
d3vilh/openvpn-ui:latestЗамените ваш_пароль на надёжный пароль для входа в веб-интерфейс.
8. Проверка работоспособности
Убедитесь, что management-порт внутри контейнера слушается:
docker exec openvpn netstat -tlnp | grep 2080Вывод должен содержать строку с openvpn и портом 2080.
Откройте браузер и перейдите по адресу:http://IP_вашего_сервера:8072
Введите логин admin и пароль, заданный на предыдущем шаге. Если всё настроено верно, вы увидите панель управления со статусом сервера Running.
Создание первого VPN-клиента
Через веб-интерфейс (рекомендуется)
- В левом меню выберите Clients → Add Client.
- Укажите имя клиента (например,
home-laptop). Можно оставить все остальные поля по умолчанию. - Нажмите Save. Система сгенерирует сертификат и ключ.
- Напротив созданного клиента нажмите кнопку Download (или Export) — скачается файл
client.ovpn. - Передайте этот файл пользователю. Он сможет подключиться, установив OpenVPN-клиент и импортировав конфигурацию.
Вручную (через командную строку)
Если веб-интерфейс по какой-то причине не может создавать клиентов (хотя обычно может), можно добавить клиента вручную:
# Создание клиента с именем client1 (без пароля на сертификат)
docker run -v ovpn-data:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full client1 nopass
# Получение .ovpn файла
docker run -v ovpn-data:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient client1 > client1.ovpnНастройка фаервола
Убедитесь, что на вашем сервере открыты порты:
- 1194/udp — для VPN-соединений.
- 8072/tcp — для веб-интерфейса.
Если используется firewalld (CentOS, Fedora):
sudo firewall-cmd --add-port=1194/udp --permanent
sudo firewall-cmd --add-port=8072/tcp --permanent
sudo firewall-cmd --reloadЕсли ufw (Ubuntu):
sudo ufw allow 1194/udp
sudo ufw allow 8072/tcpЕсли iptables:
sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8072 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4Проверка подключения
На клиентском устройстве установите официальный OpenVPN-клиент:
- Windows: OpenVPN GUI
- macOS: Tunnelblick или OpenVPN Connect
- Linux:
sudo apt install openvpn/sudo dnf install openvpn
Android/iOS: OpenVPN Connect из магазина приложений
Импортируйте полученный .ovpn файл и подключитесь. После успешного подключения вы сможете заходить на внутренние ресурсы сервера и выходить в интернет через его IP-адрес.
Управление и мониторинг
Веб-интерфейс позволяет:
- просматривать список активных подключений;
- отзывать сертификаты клиентов;
- изменять настройки сервера (порт, протокол, DNS и т.д.);
- обновлять пароль администратора;
- скачивать логи OpenVPN.
Обновление контейнеров
Чтобы обновить образы до последних версий:
docker pull kylemanna/openvpn:latest
docker pull d3vilh/openvpn-ui:latest
docker stop openvpn openvpn-ui
docker rm openvpn openvpn-uiЗатем повторно запустите контейнеры из шагов 6 и 7 (том с данными сохранится).
Заключение
Вы успешно развернули собственный OpenVPN-сервер с веб-интерфейсом в Docker. Теперь у вас есть полностью бесплатный, безопасный и масштабируемый VPN-сервис без ограничений на количество одновременных подключений (кроме мощности вашего сервера и ширины канала).
При возникновении проблем сверьтесь с логами:
docker logs openvpn
docker logs openvpn-uiБольшинство ошибок связано с фаерволом, не загруженным модулем tun или неверно указанным публичным IP. Если останутся вопросы — обращайтесь к официальной документации или сообществу OpenVPN.
ВНИМАНИЕ !!!! Статья техническая для организации безопастных каналов связи для производственных целей и личного использования, и не призывает использовать технологии для обхода блокировок и нарушения законодательства.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.