OpenVPN — pritunl в docker

Пожалуй, самый быстрый и легкий способ поднять OpenVPN c удобным GUI для управления. Недавно я собрал docker-image и выложил на Docker Hub. Что такое Docker , как его установить и т.д., вы можете найти на официальных страницах, здесь же я коротко изложу, как быстро поднять VPN-сервер у себя на сервере или VDS.

Pritunl — это удобное управление OpenVPN, его можно установить и не используя контейнеры. У нас же, другая задача — быстро и с минимальным вмешательством в родительскую OS.

Подразумевается, что docker вы уже установили.
Первым делом, получаем подготовленный мной имидж:


# docker pull andrey0001/pritunl

Запускать контейнер будем в привилегированном режиме с сетью в режиме --net=host — это самый простой вариант (есть еще вариант с пробросом портов внутрь контейнера):


# docker run --privileged --name pritunl --restart unless-stopped --net=host -d -t andrey0001/pritunl

--restart unless-stopped — не работает на старых версиях докера, но это не страшно, это можно пропустить. Эта опция отвечает за то, будет ли контейнер стартовать автоматически при старте/рестарте основной машины.
--net=host — не создает отдельный сетевой интерфейс, а использует сеть основной машины.

Вы не поверите — но это всё. Да, конечно, надо подождать пока контейнер полностью стартанёт (около 2-х минут).
Есть некоторые ньюансы, которые надо поправить, но и без них, вы уже получили решение:

1. По умолчанию, pritunl использует порт tcp 443, а так же 80, что нам явно не подходит — обычно на VPS эти порты уже используются. А это значит, что при первом старте контейнера, временно остановите сервис, который слушает у вас эти порты (nginx, apache). Далее, зайдите через браузер на вашу машину с логином и паролем pritunl , поменяйте логин/пароль и порт, на котором pritunl слушает:

pritunl-1

pritunl-2

Но это еще не всё. Надо выключить редирект (pritunl так же слушает на 80-м порту). Для этого подключаемся к контейнеру:


# docker exec -it pritunl bash

и выполняем:


# pritunl set app.redirect_server false

Ctrl-D (exit) — выходим из контейнера.

Теперь, необходимо рестартануть контейнер, на основной машине:


# docker stop pritunl
# docker start pritunl

После этого, если вы останавливали Ваши сервисы, которые слушают на портах 80 и 443, запустите их обратно.
Если Вы не используете порты 80 и 443 на своем сервере (VPS), можете пропустить этот пункт.

2. Через GUI , который мы повесили на порт 9700(как на картинке), подключаемся к своему серверу, добавляем организацию, добавляем сервер (порт/протокол), привязываем организацию к серверу и можем создавать пользователей.

3. По умолчанию, pritunl, в бесплатной версии урезает некоторые настройки, в частности управление сжатием в рамках OpenVPN. Сейчас мы обойдём этот запрет:
Останавливаем сервер через GUI (Stop Server)
подключаемся к контейнеру:


# docker exec -it pritunl bash

подключаемся к mongo:


# mongo pritunl

выполняем:


> db.servers.update({}, {$set: {"lzo_compression" : true}}, { multi: true })

Ctrl-D (exit) — выходим из контейнера.
Стартуем сервер через GUI (Start Server)

Эту процедуру необходимо проделать уже после того как вы создали сервер в GUI.

4. Если у Вас на сервере работает firewall, не забудьте открыть нужные порты. Так же, если в пункте 1 вы опустили свои сервисы на портах 80 и 443, не забудьте из запустить.

Вот и всё. Мы получили OpenVPN сервер, с удобным интерфейсом управления, не затронув основную OS.

Удачи в настройках.
© shadow_alone