Запустить за 60 секунд. Экспресс OpenVPN

Учитывая, что каждый день рандомно падают десятки сервисов, иметь VPN становится необходимостью. В интернете есть предложения от компаний, предлагающих услугу под ключ за разумные деньги и с хорошей производительностью, если вы совсем ничего не хотите делать. Например https://tgvpn.com. Для среднестатистического юзера это неплохой выбор по цена/качество, однако мы тут собрались, чтобы сделать все своими руками.

В этом посте я опишу, как быстро поднять свой VPN сервер и подключиться к нему. Let the hacking begin (c).

1. Арендуем сервер.

Подробно вдаваться в аренду VPS сервера не буду, т.к. данный вопрос уже раскрывался в статье про создание Telegram бота. (http://abdulmadzhidov.ru/blog//Telegram-bot-in-30-min/) Другие хостинги в плане алгоритма не отличаются от Digital Ocean.

2. Устанавливаем нужные пакеты

Первым делом поставим утилиты, которые нужны для работы apt через https. Возможно они уже будут на вашей машине и тогда команда сообщит вам об этом. Сначала мы обновим список пакетов, которые доступны в репозиториях. Второй командой установим нужные программы.

sudo apt update

sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Я предпочитаю поднимать сервисы в докер контейнерах, так что далее установим docker.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88

Командами выше достаем ключи для проверки подписи на тех пакетах, что мы будем ставить из официального репозитория с докером и удостоверяемся, что они успешно загрузились.

Если все хорошо, мы должны получить подобный ответ с информацией о том, кем выдан ключ, его отпечатком…

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22

Добавляем сам репозиторий и снова обновляем список пакетов.

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt update

После этого можем установить docker.

sudo apt install docker-ce

Для проверки, что все прошло успешно, мы можем запустить тестовый контейнер, который поприветствует нас

sudo docker run hello-world

Установку пакетов закончили.

P.S. Иногда бывают проблемы, что докер доступен только от рута. Для решения создаем группу docker и добавляем своего пользователя в нее.

sudo groupadd docker
sudo usermod -aG docker $USER

После этого релогинимся на машину под своей учеткой.

3. Настраиваем наш OpenVPN

Создаем папку, в которую будут сложены наши конфиги и ключи

mdkir ~/openvpn_data

и запускаем докер контейнер с openvpn с командой genconfig.

docker run -v ~/opevpn_data:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u udp://<ip-адрес-вашей-машины-здесь>

docker run -v ~/openvpn_data:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

Вы можете ввести пароль для защиты приватного ключа. Поле Common Name можно оставить пустым.

На этом моменте у нас в папке ~/openvpn_data должны хранится конфиги для нашего VPN сервера.

4. Запускаем сервер

docker run -v ~/openvpn_data:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

Готово, сервер запущен и работает. Осталось сгенерировать конфигурационные файлы и сертификаты для клиентов.

5. Создаем клиентов

docker run -v ~/openvpn_data:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full <имя_клиента> nopass

docker run -v ~/openvpn_data:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient <имя_клиента> > <имя_клиента>.ovpn

Первая команда создаст сертификат для клиента с заданным именем, а вторая сгенерирует конфигурационный файл .ovpn, с влкюченным туда сертификатом. В процессе вас попросят ввести ваш пароль, который мы задали выше.

6. Подключение клиентов

В итоге в папке ~/openvpn_data мы получаем .ovpn файл для каждого клиента, который необходимо отправить уже на устройство.

Это можно сделать разными путями, но я просто поднимал в папке openvpn_data веб сервер на питоне и скачивал файлы с клиентской машины.

cd ~/openvpn_data

python -m SimpleHTTPServer

Пока команда запущена, все содержимое папки будет доступно на порту 8000.

Заходим с клиента на http://ip_адрес_вашей_машины:8000 и скачиваем нужный .ovpn файл.

Подключение зависит от OpenVPN клиента, которым вы пользуетесь. На MacOS есть TunnelBlink с удобным интерфейсом. На Ubuntu я предпочитаю консольный openvpn клиент.

sudo apt install openvpn

sudo openvpn --config <путь_до_конфиг_файла> --daemon

На этом все.

Written on April 25, 2018