Свой VPN-сервер с использованием Docker

12 February 2016 #vps#privacy#security#docker

Я уже писал про настройку OpenVPN на сервере с Ubuntu. Это довольно нетривиальный процесс, когда все приходиться делать своими руками. С момента написания указанной статьи я перестал пользоваться своим сервером, и до сегодняшнего дня предпочитал использовать услуги существующих VPN-провайдеров.

Но ребята из Apple Russian, подсказали, что уже есть Docker-решения для организации своего сервера, позволяющие использовать автоматический запуск VPN при обращении к сети. И дали ссылку на gaomd/docker-ikev2-vpn-server. Ну как тут не попробовать??

У моего любимого хостера DigitalOcean как раз появились машинки с предустановленным Docker:

docker

Все что остается сделать, это создать новый сервер (я выбрал минимальную машинку за $5 в месяц с 1Tb трафика), на что уходит порядка 55 секунд (по заявлению DigitalOcean, я не замерял, но реально быстро). После чего достаточно зайти на него по SSH и использовать команду для установки и запуска контейнера:

# docker run -d --name ikev2-vpn-server --privileged -p 500:500/udp -p 4500:4500/udp gaomd/ikev2-vpn-server:0.2.2

На всю операцию потребовалось меньше минуты. Но что больше всего меня удивило, после завершения работы указанной команды, VPN уже работал, и единственное, что осталось сделать, это настроить клиенты для доступа к серверу, для чего генерируем профили:

# docker run -i -t --rm --volumes-from ikev2-vpn-server -e "HOST=vpn1.example.com" gaomd/ikev2-vpn-server:0.2.2 generate-mobileconfig > ikev2-vpn.mobileconfig

Вместо vpn1.example.com нужно указывать или доменное имя вашего сервера, или его IP-адрес. В локальной директории на сервере создается файл с именем ikev2-vpn.mobileconfig, который импортируем в настройки своего компьютера или телефона. На маке для этого достаточно дважды по нему кликнуть мышью, а на телефон передать через AirDrop.

Первая команда по созданию VPN-сервиса создает и запускает docker-контейнер в фоне, после чего с ним достаточно просто работать, используя только его имя. К примеру, для последующей остановки или запуска контейнера можно использовать команды:

# docker stop ikev2-vpn-server
# docker start -a ikev2-vpn-server

Теперь осталось только предусмотреть вариант автоматического старта нашего контейнера при старте основного сервера. Так как на сервере используется Ubuntu 14.04, то в качестве диспетчера задач используется Upstart. И нам достаточно только создать новый файл с описанием задачи:

# vim /etc/init/vpn.conf 

В котором используем следующее содержимое:

description "Ikev2 VPN Server"
author "Denis Evsyukov"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker start -a ikev2-vpn-server
end script

Теперь при перезагрузке сервера, наш VPN-сервис поднимется автоматически.

Больше всего меня удивила скорость, с которой удалось поднять сервис. В общей сложности порядка 3 минут на все. Это просто фантастика! Теперь планирую так же попробовать поднять с помощью Docker сервисы Piwik и Asterisk.

Если вы задумывались о своей безопасности, или если вы хотите попробовать поднять свой собственный VPN-сервис, используйте мою реферальную ссылку для регистрации в DigitalOcean, что даст вам $10 на счет, которые можно использовать для тестирования сервера в течение двух месяцев.