OpenVPN в Docker за 5 минут

Ulsk forest

Всем привет!
Два с половиной года назад я писал пост о том как быстро поднять OpenVPN на своем сервере при помощи Docker. Это было сильно быстрее чем устанавливать и конфигурировать OpenVPN вручную, но есть вариант настроить все еще быстрее при помощи Docker-compose.

Предполагается что вы установили Docker и Docker-compose.

Создаем директорию docker-compose-openvpn и создаем внутри нее файл docker-compose.yml с вот таким содержанием:

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
version: '2'
services:
openvpn:
cap_add:
- NET_ADMIN
image: kylemanna/openvpn
container_name: openvpn
ports:
- "1194:1194/udp"
restart: always
volumes:
- ./openvpn-data/conf:/etc/openvpn

Это копипаст из доки автора решения - https://github.com/kylemanna/docker-openvpn/blob/master/docs/docker-compose.md

Затем инициализируем конфигурацию

1
2
docker-compose run --rm openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM
docker-compose run --rm openvpn ovpn_initpki

Тут вместо VPN.SERVERNAME.COM можете просто указать IP своего сервера.

В процессе генерации конфига OpenVPN попросит задать пароль. Задаем его и сохраняем. Он понадобится для управления пользователями.

Затем необходимо создать новых пользователей VPN и сгенерировать им клиентские конфиги.

Тут я для удобства запилил 2 bash-скрипта. Конфиги создаю менее секьюрные, без запроса пароля. За это отвечает параметр nopass.

new.sh

1
2
3
#!/bin/bash
docker-compose run --rm openvpn easyrsa build-client-full $1 nopass
docker-compose run --rm openvpn ovpn_getclient $1 > $1.ovpn

remove.sh

1
2
#!/bin/bash
docker-compose run --rm openvpn ovpn_revokeclient $1 remove

Не забудьте сделать chmod +x new.sh && chmod +x remove.sh

Затем создаем первого пользователя с именем test.

1
./new.sh test

Здесь нам пригодится ранее заданный пароль на управление сертификатами. В итоге в директории появится конфиг test.ovpn который теперь необходимо скачать с сервера и импортировать в свой VPN-клиент.

Стартуем VPN

1
docker-compose up -d

Вот собственно и все!


UPD: Скомпоновал все это в отдельный репозиторий и добавил удобный мейкфайл

Теперь для того чтобы развернуть OpenVPN достаточно на сервере выполнить:

  1. git clone https://github.com/rhamdeew/docker-compose-openvpn.git
  2. cd docker-compose-openvpn/
  3. make genconfig host=vpn.example.com
  4. make initpki
  5. make new username=example
  6. make up

Копируем example.ovpn из client_configs/example.ovpn к себе в OpenVPN-клиент и пользуемся)