Как быстро поднять сервер OpenVPN на своем VPS

Как быстро поднять сервер OpenVPN на своем VPS
Фото Sigmund на Unsplash
👋
Хочешь поучаствовать в жизни сайта? Мы ищем авторов!
Этот пост изначально был опубликован мной на английском здесь: How to quickly set up an OpenVPN server on your VPS.

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

Этот пост - упрощение инструкций к установке образа Docker kylemanna/openvpn, ничего нового здесь нет. Но мне было бы удобно иметь все конфиги на одной странице, как здесь, чтобы быстро копировать и вставлять, и может быть, вам тоже будет удобно.

Предварительная подготовка

У вас на сервере должны быть установлены Docker и Docker Compose прежде, чем мы начнем. Инструкции по их установке в вашей ОС вы можете найти в сети. Например, eсли вы используете Ubuntu, инструкцию можно найти здесь: Установка и настройка Docker в Ubuntu (см. заголовки "Установка Docker на Ubuntu" и "Установка Docker Compose на Ubuntu").

После установки того и другого создайте где-нибудь на сервере папку и зайдите в нее:

mkdir vpn
cd vpn

Здесь мы будет создавать нужные конфиги и скрипты.

Создайте файл docker-compose.yml

И заполните следующим содержимым:

version: "3"
services:
  ovpn:
    image: kylemanna/openvpn:2.4
    restart: always
    volumes:
      - ./ovpn-data:/etc/openvpn:rw
    ports:
      - 1194:1194/udp
    cap_add:
      - NET_ADMIN

Создайте файл init.sh

И заполните:

#!/bin/bash -x
docker-compose run --rm ovpn ovpn_genconfig -u udp://ВАШIP
docker-compose run --rm ovpn ovpn_initpki

Вместо ВАШIP напишите публичный IP-адрес своего сервера (тот, к которому можно подключиться из интернета).

Сделайте созданный скрипт исполняемым следующей командой:

chmod +x init.sh


Сгенерируйте ключи CA

(CA - Certificate Authority - удостоверяющий центр сертификатов).

Выполните команду:

./init.sh

Скрипт попросит вас ввести кодовую фразу - "passphrase". Сгенерируйте случайный пароль (например, с помощью генератора паролей 1Password), вставьте и сохраните на будущее. Эта кодовая фраза потребуется при генерации новых клиентских сертификатов.

Когда скрипт попросит "Common Name", введите что угодно.

Запустите VPN-сервер

Командой:

docker-compose up -d

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

Чтобы остановить VPN-сервер, выполните:

docker-compose down

Вы также можете посмотреть последние логи:

docker-compose logs --tail 100

Создайте файл create_client.sh

И заполните следующим содержимым:

#!/bin/bash -e

if [ "$#" -ne 1 ]
then
  echo "Введите название сертификата!"
  exit 1
fi

docker-compose run --rm ovpn easyrsa build-client-full $1 nopass
docker-compose run --rm ovpn ovpn_getclient $1 > $1.ovpn

Сделайте его исполняемым:

chmod +x create_client.sh

Вот и все

Теперь у вас есть рабочий VPN-сервер.

Читайте дальше о том, как к нему подключиться.

Генерация клиентских сертификатов

Скрипт create_client.sh принимает один аргумент: название сертификата. Вы можете запустить его следующим образом:

./create_client.sh myvpn-me

Он создаст файл myvpn-me.ovpn в той же папке: это конфигурация для клиента OpenVPN. Скачайте этот файл с сервера и импортируйте в OpenVPN на своем ПК или мобильном устройстве, чтобы подключиться.

Все подключенные клиенты будут выходить в интернет через этот сервер. Кроме того, они получат локальные IP-адреса в этой сети и смогут подключаться друг к другу (чтобы играть в сетевые игрушки, например).

Материал подготовлен с ❤️ редакцией Кухни IT.

Олег Ямников

Олег Ямников

Главный кухонный корреспондент.