Бортовой журнал
Бортовой журнал

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

Но что делать, если вы не хотите указывать свои данные в VPN-сервисах? В таком случае вы можете заказать собственный сервер и установить на него программу OpenVPN. Об этой процедуре мы расскажем в статье и ответим на два вопроса:

  • Как установить OpenVPN на серверную ОС (например Ubuntu)?
  • Как настроить OpenVPN на сервере?

Начнем с теории.

Что такое OpenVPN и зачем он нужен

Прежде чем рассказать об OpenVPN, дадим общее описание технологии VPN.

VPN (Virtual Private Network) — это виртуальная частная сеть. Чтобы рассказать о ней подробнее, разделим понятие виртуальной частной сети на три части:

  1. Сеть — это несколько узлов (например, компьютеров или серверов), которые соединены между собой. Сети используются для обмена данными между узлами: на этом строится работы многих сервисов.
  2. Частная — это сеть, которая строится “поверх” Всемирной паутины: к ней могут подключиться только те пользователи, которым выдан доступ. Информация об этих пользователях маркируется и защищается шифром — так она не попадет в общий доступ.
  3. Виртуальная — то есть независимая от физических комплектующих. В виртуальной сети узлы связаны между собой при помощи “виртуальных кабелей” — программного обеспечения.

По своей сути VPN-соединение — это зашифрованный канал между компьютером и сервером. Создание такого “туннеля” происходит по следующему алгоритму:

  1. Вы подключаетесь к VPN с компьютера, вводя логин и пароль.
  2. Сервер идентифицирует сеть и сверяет ваши аутентификационные данные с собственной базой. Если логин и пароль совпали, между компьютером и сервером устанавливается соединение.
  3. Компьютер направляет запрос со своего IP-адреса (его выдает интернет-провайдер) на сервер.
  4. Сервер отвечает на запрос и присваивает вашему компьютеру другой IP. Компьютер будет подключаться к сервисам под новым адресом.

OpenVPN — это инструмент, который позволяет создать собственный VPN на сервере. Благодаря гибким настройкам OpenVPN вы можете сделать подключение к серверу безопасным — это достигается при помощи шифрования входящего и исходящего трафика.

OpenVPN можно установить на любую из популярных операционных систем: например на Windows, MacOS, Android, iOS, ChromeOS и ОС семейства Linux.

В качестве примера ниже описана настройка OpenVPN на ОС Ubuntu.

Как сделать свой VPN-сервер на VPS

Для того чтобы создать свой ВПН-сервер с помощью OpenVPN, вам понадобится VDS (VPS) любой мощности с предустановленной ОС Ubuntu версии 22.04.

Создание сервера VPN проводится в несколько этапов:

  1. Установка OpenVPN на VPS
  2. Создание удостоверяющего центра
  3. Создание ключей клиентов
  4. Настройка конфигурационного файла
  5. Включение маршрутизации трафика

Каждый этап установки и настройки требует подключения по SSH. Это можно сделать по инструкции.

Установка OpenVPN на VPS с Ubuntu

Чтобы установить OpenVPN:

  1. Обновите пакеты:
    sudo apt update
    sudo apt upgrade

  2. Установите OpenVPN на сервер (server) Ubuntu:
    sudo apt install openvpn easy-rsa net-tools

Создание удостоверяющего центра

  1. Скопируйте файлы OpenVPN в директорию /etc/openvpn/:
    sudo cp -R /usr/share/easy-rsa /etc/openvpn/
    Затем перейдите в папку с копиями файлов:
    cd /etc/openvpn/easy-rsa

  2. Сгенерируйте удостоверяющий центр и его корневой сертификат. Для этого поочередно выполните следующие команды:
    export EASYRSA=$(pwd)
    sudo ./easyrsa init-pki
    sudo ./easyrsa build-ca

    Далее введите пароль: он будет использоваться для подписи ключей и сертификатов в будущем.

    После этого будут созданы два файла:

    /etc/openvpn/easy-rsa/pki/ca.crt — сертификат,
    /etc/openvpn/easy-rsa/pki/private/ca.key — приватный ключ.

  3. Создайте отдельную директорию для файлов сертификата:
  4. mkdir /etc/openvpn/certs/
  5. Переместите файл сертификата в созданную директорию:
    cp /etc/openvpn/easy-rsa/pki/ca.crt
    /etc/openvpn/certs/ca.crt

На следующих этапах будет описана настройка OpenVPN на VPS.

Создание серверных ключей

  1. Создайте закрытый ключ и файл запроса. Для этого выполните команду:
    ./easyrsa gen-req server nopass

  2. Подпишите файлы с помощью ключа, созданного на предыдущем этапе:
    ./easyrsa sign-req server server

    После этого подтвердите действие и введите пароль, который вы сгенерировали ранее.

  3. Скопируйте файл запроса и приватный ключ. Для этого поочередно выполните команды:
    cp /etc/openvpn/easy-rsa/pki/issued/server.crt
    /etc/openvpn/certs/
    cp /etc/openvpn/easy-rsa/pki/private/server.key
    /etc/openvpn/certs/

  4. Сформируйте файл параметров по стандарту Diffie–Hellman:
    openssl dhparam -out /etc/openvpn/certs/dh2048.pem 2048

  5. Сгенерируйте HMAC-ключ:
    openvpn --genkey --secret /etc/openvpn/certs/ta.key

  6. После выполненных действий в папке /etc/openvpn/certs/ должно быть пять файлов. Проверьте их наличие с помощью команды:ls -l /etc/openvpn/certs/
    Вывод будет иметь следующий вид:

    total 24
    -rw------- 1 root root 1204 Jan 01 00:00 ca.crt
    -rw-r--r-- 1 root root 424 Jan 01 00:05 dh2048. pem
    -rw------- 1 root root 4608 Jan 01 00:10 server.crt
    -rw------- 1 root root 1704 Jan 01 00:15 server.key
    -rw------- 1 root root 636 Jan 01 00:20 ta.key

Создание ключей клиента

  1. Сгенерируйте закрытый ключ и запрос на сертификат:
    ./easyrsa gen-req client-1 nopass

  2. Подпишите файл: ./easyrsa sign-req client client-1
    После этого подтвердите действие и введите пароль, который вы сгенерировали ранее.

Настройка конфига сервера OpenVPN на Ubuntu

Конфигурация сервера (server) OpenVPN зависит от настроек, которые прописаны в файле server.conf. В качестве примера мы задействовали стандартные значения.

Для настройки:

  1. Откройте конфигурационный файл OpenVPN: sudo nano /etc/openvpn/server.conf

  2. Добавьте следующее содержимое:
    # Порт для OpenVPN
    port 1194


    # Протокол, который использует OpenVPN
    ;proto tcp
    proto udp


    # Интерфейс
    ;dev tap
    dev tun


    # Ключи

    # Сертификат CA
    ca /etc/openvpn/certs/ca.crt
    # Сертификат сервера
    cert /etc/openvpn/certs/server.crt
    # Приватный ключ сервера
    key /etc/openvpn/certs/server.key #не распространяется и хранится в секрете


    # параметры Diffie Hellman
    dh /etc/openvpn/certs/dh2048.pem


    # Создание виртуальной сети и ее параметры

    # IP и маска подсети
    server 10.8.0.0 255.255.255.0


    # После перезапуска сервера клиенту будет выдан прежний IP
    ifconfig-pool-persist /etc/openvpn/ipp.txt


    # Установка шлюза по умолчанию
    push "redirect–gateway def1 bypass–dhcp"


    # Разрешить использовать нескольким клиентами одну и ту же пару ключей
    # не рекомендуется использовать, закомментирована
    ;duplicate–cn


    # Пинговать удаленный узел с интервалом в 10 секунд
    # Если узел не отвечает в течение 120 секунд, то будет выполнена попытка повторного подключения к клиенту
    keepalive 10 120


    # Защита от DoS–атак портов UDP с помощью HMAC
    remote-cert-tls client
    tls-auth /etc/openvpn/certs/ta.key 0 # файл хранится в секрете


    # Криптографические шифры
    cipher AES-256-CBC #для клиентов нужно указывать такой же


    # Сжатие и отправка настроек клиенту
    ;compress lz4–v2
    ;push "compress lz4–v2"


    # Максимальное число одновременных подключений к OpenVPN (Ubuntu server)
    ;max–clients 100


    # Понижение привилегий демона OpenVPN
    # после запуска
    # Не использовать для Windows
    ;user nobody
    ;group nobody


    # При падении туннеля не выключать интерфейсы, не перечитывать ключи
    persist-key
    persist-tun


    # Лог текущих соединений
    # Каждую минуту обрезается и перезаписываться
    status openvpn–status.log


    # Логи syslog
    # Используется только один. Раскомментировать необходимый


    # перезаписывать файл журнала при каждом запуске OpenVPN
    ;log openvpn.log


    # дополнять журнал
    ;log–append openvpn.log


    # Уровень вербальности
    #
    # 0 тихий, кроме фатальных ошибок
    # 4 подходит для обычного использования
    # 5 и 6 помогают в отладке при решении проблем с подключением
    # 9 крайне вербальный
    verb 4


    # Предупреждение клиента о перезапуске сервера
    explicit-exit-notify 1


    Важно: если подсеть адресов 10.8.0.0/24 занята другими сервисами, укажите другой IP формата 10.x.x.x.

    Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.
  3. Проверьте конфигурационный файл на ошибки:
    openvpn /etc/openvpn/server.conf
    Если конфиг настроен корректно, в последней строке вывода вы увидите сообщение Initialization Sequence Completed.

  4. Запустите службу OpenVPN:
    systemctl start openvpn@server.service

  5. Добавьте OpenVPN в автозагрузку:
    systemctl enable openvpn@server.service

  6. Проверьте работу службы:
    systemctl status openvpn@server.service

    Если служба работает, в выводе отобразится статус Active (running).

Включение маршрутизации трафика

  1. Создайте новую директорию:
    mkdir /root/bin/

  2. Откройте файл скрипта маршрутизации:
    sudo nano /root/bin/vpn_route.sh

  3. Добавьте строки:
    #!/bin/sh
    # Сетевой интерфейс для выхода в интернет
    DEV='eth0'


    # Значение подсети
    PRIVATE=10.8.0.0/24

    if [ -z "$DEV" ]; then
    DEV="$(ip route | grep default | head -n 1 | awk '{print $5}')"
    fi
    # Маршрутизация транзитных IP-пакетов
    sysctl net.ipv4.ip_forward=1
    # Проверка блокировки перенаправленного трафика iptables
    iptables -I FORWARD -j ACCEPT

    # Преобразование адресов (NAT)
    iptables -t nat -I POSTROUTING -s $PRIVATE -o $DEV -j MASQUERADE

    Где:
    • 10.8.0.0/24 — ваша подсеть,
    • eth0 — название сетевого интерфейса. Его можно узнать при помощи команды:
      route | grep '^default' | grep -o '[^ ]*$'
      Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.
  4. Назначьте права измененному файлу:
    chmod 755 /root/bin/vpn_route.sh

  5. Запустите скрипт в тестовом режиме:
    bash /root/bin/vpn_route.sh

  6. Если скрипт завершился без ошибок, создайте файл:
    sudo nano
    /etc/systemd/system/openvpn-server-routing.service

  7. Добавьте строки:
    [Unit]
    Description=Включение маршрутизации трафика OpenVPN.
    [Service]
    ExecStart=/root/bin/vpn_route.sh
    [Install]
    WantedBy=multi-user.target

    Далее сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.

  8. Добавьте созданную службу в автозагрузку:
    systemctl enable openvpn-server-routing

Настройка клиента OpenVPN

Чтобы настроить клиентскую часть OpenVPN, необходимо создать файл .ovpn — он понадобится для подключения к VPN. Добавьте в него следующее содержимое:



# Роль
client

# IP сервера OpenVPN
remote 123.123.123.123

# Порт сервера OpenVPN, совпадает с конфигурацией сервера
port 1194

# Интерфейс
dev tun

# Протокол OpenVPN, как на сервере
;proto tcp
proto udp

# Имя хоста, IP-адрес и порт сервера

;remote my–server–1 1194
;remote my–server–2 1194

# Случайный выбор хостов. Если не указано, выбор производится по порядку
;remote–random

# Преобразование имени хоста
# (в случае непостоянного подключения к интернету)
resolv-retry infinite

# Привязка к локальному порту
nobind

# Шлюз по умолчанию
redirect-gateway def1 bypass-dhcp

# При падении туннеля не выключать интерфейсы, не перечитывать ключи
persist-key
persist-tun

# Настройка HTTP прокси при подключении OpenVPN серверу
;http–proxy–retry # retry on connection failures
;http–proxy [proxy server] [proxy port #]

# Отключение предупреждений о дублировании пакетов
;mute–replay–warnings

# Дополнительная защита
remote-cert-tls server

# Ключ HMAC
key-direction 1

# Шифрование
cipher AES-256-CBC

# Сжатие. Если на сервере отключено, не включается
#comp–lzo

# Вербальность журнала
verb 3

# Сертификаты

<ca>
Содержимое файла /etc/openvpn/certs/ca.crt
</ca>


<cert>
Содержимое файла /etc/openvpn/easy-rsa/pki/issued/client-1.crt
</cert>


<key>
Содержимое файла /etc/openvpn/easy-rsa/pki/private/client-1.key
</key>


<tls-auth>
Содержимое файла /etc/openvpn/certs/ta.key
</tls-auth>


Вместо 123.123.123.123 добавьте адрес вашего сервера. Также заполните теги:

  • <ca></ca> — данными из файла /etc/openvpn/certs/ca.crt,
  • <cert></cert> — данными из файла /etc/openvpn/easy-rsa/pki/issued/client-1.crt,
  • <key></key> — данными из файла /etc/openvpn/easy-rsa/pki/private/client-1.key,
  • <tls-auth></tls-auth> — данными из файла /etc/openvpn/certs/ta.key.

После этого сохраните изменения с помощью комбинации клавиш Ctrl + O и закройте файл сочетанием Ctrl + X.

Теперь ваш VPN-сервер на Ubuntu готов к использованию. Чтобы приступить к работе, загрузите клиент OpenVPN на компьютер или другое устройство. Обратите внимание, что нельзя получить доступ с использованием vpn-сервиса к ресурсам, доступ к которым ограничен на территории Российской Федерации.

Отличные VPS на NVMe-дисках и бесплатный тестовый период 3 дня!

Выбрать тариф