OpenVPN в Docker
Итак в этом посте я вам расскажу как за пару минут поднять OpenVPN на вашем сервере используя Docker.
Все эксперименты проводились на серверве с Debian Jessie и примеры соответственно оттуда, но разницы в других дистрах быть не должно. Все же основной цимес у нас внутри Docker-контейнера который у всех будет одинаковым.
Если вам уже интересно то прошу под кат:
Поехали
1. Создаем контейнер с данными
OVPN_DATA="ovpn-data" docker run --name $OVPN_DATA -v /etc/openvpn busybox
Тут у нас создается переменная окружения OVPN_DATA и потом создается контейнер на основе образа busybox с названием хранящимся в ней.
В этом контейнере будут храниться данные (конфиги и ключи) openvpn.
2. Получаем контейнер с OpenVPN и выполняем первичную настройку
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_genconfig -u udp://100.100.100.100 docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn ovpn_initpki
Как мы видим тут к контейнеру с openvpn линкуется наш data-volume контейнер из пункта 1 и затем запускается скрипт первоначальной конфигурации OpenVPN. В аргументе указываем ip или хост нашего сервера.
Тут нас попросят придумать пароль который нам дальше пригодится для генеации ключей. Сохраните его.
3. Пилим systemd-сервис чтобы в будущем стартовать наш VPN в одну команду
cd /etc/systemd/system vim dockeropenvpn.service
Вставляем содержимое dockeropenvpn.service
[Unit] Description=OpenVPN based on Docker container After=docker.service Requires=docker.service [Service] TimeoutStartSec=0 ExecStart=/usr/bin/docker run --volumes-from ovpn-data --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn [Install] WantedBy=multi-user.target ~
Пробуем включить и запустить наш сервис
systemctl enable /etc/systemd/system/dockeropenvpn.service systemctl start dockeropenvpn.service
Убеждаемся в том что наш Docker-контейнер стартанул при старте сервиса
docker ps
4. Генерируем пользовательские сертификаты и конфиги
docker run --volumes-from $OVPN_DATA --rm -it kylemanna/openvpn easyrsa build-client-full USERNAME nopass
Как раз тут нам пригодится пароль из пункта 2.
Генерируем готовый пользовательский конфиг connect.ovpn
docker run --volumes-from $OVPN_DATA --rm kylemanna/openvpn ovpn_getclient USERNAME > /home/USERNAME/connect.ovpn
Как вы наверное уже догадались USERNAME нужно везде поменять на имя пользователя VPN (не обязательно наличие такого пользователя на сервере).
Вот собственно и все. Быстрого и безопасного вам интернета, друзья!