Этот репозиторий содержит Docker-образ для запуска OpenVPN-сервера с автоматизированной настройкой PKI с использованием EasyRSA, а также с возможностью генерации клиентских конфигурационных файлов (OVPN) в один шаг. Образ оптимизирован для производительности и безопасности и основан на Alpine Linux.
- OpenVPN сервер: Использует UDP на порту 1194.
- Автоматизированная PKI: Генерация CA, серверного и клиентских сертификатов с помощью EasyRSA.
- Docker Compose: Легко разворачивается через Docker Compose.
- Генерация клиентского OVPN: Скрипт client.shавтоматически генерирует файл конфигурации для подключения клиента, включая встроенные сертификаты и ключи.
- Настройка NAT: Скрипт init.shдобавляет правило iptables для MASQUERADE, позволяющее клиентам VPN иметь доступ к интернету.
- Минимальный размер и повышенная безопасность: Образ основан на Alpine Linux.
Создайте файл docker-compose.yml со следующим содержимым:
services:
  vpn:
    image: ghcr.io/devem-tech/vpn
    restart: always
    ports:
      - "1194:1194/udp"
    volumes:
      - vpn_data:/etc/openvpn
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
volumes:
  vpn_data:Запустите контейнер:
docker compose up -dКонтейнер будет автоматически запущен и настроен для работы OpenVPN-сервера.
Чтобы получить файл конфигурации для подключения клиента (сгенерируется новый клиентский сертификат и ключ, если они еще не существуют), выполните команду:
docker compose exec -T vpn /client.sh > client.ovpnПримечание: Использование флага
-Tгарантирует, что вывод, генерируемый скриптом, не будет содержать лишних управляющих символов, и весь результат будет корректно перенаправлен в файлclient.ovpn.
- Скопируйте полученный файл client.ovpnна устройство, с которого хотите подключаться.
- Импортируйте этот файл в клиентское приложение OpenVPN (например, OpenVPN Connect, Tunnelblick или другое).
- Запустите подключение и наслаждайтесь безопасным доступом к сети.
- 
SERVER_IP: 
 По умолчанию, при генерации клиентского файла, если переменнаяSERVER_IPне задана, скрипт попытается автоматически определить публичный IP с помощьюcurl. Вы можете задатьSERVER_IPв переменных окружения контейнера для явного указания адреса сервера.
- 
Настройка OpenVPN: 
 Файлserver.confи скриптыinit.shиclient.shможно модифицировать для изменения параметров сервера, шифрования, DNS и других настроек OpenVPN.
- 
PKI и сертификаты: 
 При первом запуске контейнера PKI автоматически инициализируется и генерируются необходимые сертификаты и ключи. Все данные сохраняются в томеvpn_data.
- 
Отсутствие доступа в интернет у клиентов: 
 Убедитесь, что на хосте включен IP forwarding, а также проверьте, что правило NAT (MASQUERADE) корректно применяется (оно настраивается автоматически вinit.sh).
- 
Проблемы с генерацией сертификатов: 
 Если возникают ошибки при создании клиентских сертификатов, проверьте логи контейнера на предмет ошибок EasyRSA и убедитесь, что контейнер запущен с нужными правами (например, сNET_ADMIN).
Этот проект распространяется под лицензией MIT License.
Если у вас возникнут вопросы или предложения, пожалуйста, создайте issue в репозитории или свяжитесь с разработчиком.