Установка и настройка OpenVPN на сервере Ubuntu 18.04

Случилось мне пользоваться Kbuntu на старом ноутбуке. Система KDE мне нравится больше поэтому выбрал Kbuntu вместо Ubuntu. Так вот столкнулся с проблемой создания VPN соединения в GUI. Нужный пункт есть но создать соединение не дает. Пишет нет прав. Опишу как создать соединение через NetworkManager. Настраивать буду на примере соединения L2TP. Итак давайте посмотрим как происходит создание VPN соединения из консоли Linux.

Что нужно знать в теории?

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

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

  1. Вы используете для доступа в интернет-соединение со слабой защитой.
  2. В месте вашего пребывания действует цензура на доступ к информации.
  3. Вы находитесь в месте с точками доступа Wi-Fi для общественного пользования.
  4. Вам нужно хорошо скрыть своё местонахождение от других пользователей сети.
  5. Вы хотите ещё лучше защитить свои личные данные и пароли.

СОВЕТ. Сеть VPN называется виртуальной, поскольку все её элементы объединены с помощью программного обеспечения, которое применяет виртуальные соединения. 

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

Что нужно знать в теории?

Базовые понятия

Туннель — это безопасное, защищённое соединение, которое использует ресурсы небезопасной сети (в этом случае интернета), и позволяет обмениваться информацией по частному каналу, настроенному только на доверенные устройства.

Читайте также:  Linux Mint — как установить и настроить компьютер на нём

Клиент — это программа, которая устанавливается на оборудование, где нужно обеспечить канал обмена данными сервером. Этот канал обладает защитой.

Сервер — компьютер или место, где хранятся учётные записи пользователей виртуальной частной сети. Использование сервера позволяет ускорить работу программ и уменьшить трафик (объём передаваемых данных).

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

Что нам понадобится

Провайдер VPS

Первым делом нужно выбрать провайдера, который нам предоставит виртуальный выделенный сервер (VPS). Что выбирать — дело каждого и зависит от страны и от того, сколько ты готов платить. Главная рекомендация — выбирай страну, наиболее близкую по географическому расположению, это сведет задержку к минимуму. Но, конечно, живя в Китае, покупать сервис в Индии или Пакистане смысла мало.

Выбор ОС

Я буду использовать RHEL 7.4. Для точного копирования команд из статьи годится и CentOS 7 (1708), так как это бесплатная и почти идентичная копия RHEL, основанная на его коде. Возможно, подойдут другие дистрибутивы, а также производные RHEL (Fedora), но пути конфигурационных файлов и версии программ могут отличаться.

Настройка подключения на Linux

Для подключения к OpenVPN-AS из-под Linux необходимо выполнить следующие шаги:

1. Установить OpenVPN-клиент. Наиболее лёгкий способ установки – из стандартных репозиториев операционной системы. Примеры команд:

RedHat/Fedora/CentOS:

yum install openvpn

Ubuntu/Debian:

apt-get install openvpn

Настройка подключения на Linux

Примечание: рекомендуем обратить внимание на версии устанавливаемого клиента, т.к. его версия должна быть не ниже 2.1, иначе подключение к AS будет невозможным. Проверить версию установленного OpenVPN-клиента можно командой:

openvpn —version

2. В браузере подключаемся к клиентской веб-форме OpenVPN с данными какого-либо существующего пользователя на сервере. В появившейся форме выбираем возможный файл для скачивания и сохраняем его.

Читайте также:  Как установить yandex disk в линукс минт

3. Теперь делаем запуск OpenVPN командой:

service openvpn start

Поднимаем инфраструктуру для конфигурирования клиентов

Создание конфигурационных файлов для клиентов OpenVPN может быть трудозатратно, так как каждый клиент должен иметь собственный файл конфигурации, и каждая из конфигураций должна совпадать с настройками, указанными в файле конфигурации сервера. Вместо того, чтобы создавать для каждого клиента свой файл конфигурации, создадим «базовый» конфигурационный файл, а затем скрипт, который позволит нам генерировать уникальные конфигурационные файлы клиентов на основе «базового». Скрипт также поместит в один конфигурационный файл все необходимые сертификаты и ключи.

Начнем с создания нового каталога, в котором будем хранить файлы конфигурации клиентов в каталоге, который мы создали ранее:

mkdir -p ~/client-configs/files

Далее скопируем пример конфигурационного файла клиента в директорию client-configs, чтобы использовать его в качестве «базового» конфигурационного файла:

cp /usr/share/doc/openvpn/examples/sample-config-files/ ~/client-configs/

Откроем этот файл в текстовом редакторе:

nano ~/client-configs/

Находим параметр remote. Он указывает клиенту на публичный адрес доступа сервера OpenVPN:

remote ip_вашего_сервера 1194

Убедимся, что используемый протокол совпадает с конфигурацией сервера:

proto udp

Далее, раскомментируем параметры user и group:

# Downgrade privileges after initialization (non-Windows only) user nobody group nogroup

Находим параметры ca, cert и key. Закокомментируем эти параметры, так как вскоре мы добавим сертификаты и ключи в файл:

# SSL/TLS parms. # See the server config file for more # description. It’s best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. #ca #cert #key

Параметры cipher и auth в конфигурационном файле клиента должны совпадать с конфигурацией сервера:

cipher AES-256-CBC auth SHA256

Далее, добавим параметр key-direction в любое место конфигурационного файла. Установим его значение – 1, для того, чтобы VPN корректно работал на клиентской машине:

Читайте также:  Выбираем самый быстрый и лучший торрент клиент

key-direction 1

И наконец, добавим несколько закомментированных параметров. Мы включим эти параметры в каждый отдельный файл конфигурации клиента, а потом нам понадобиться лишь включить эти параметры в случае необходимости. Это нужно для клиентов Linux, в которых используется файл /etc/openvpn/update-resolv-conf – этот скрипт используется для обновления DNS на Linux-клиентах.

# script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf

Если клиент работает под управлением Linux и имеет файл /etc/openvpn/update-resolv-conf, раскомментируйте эти строки из файла конфигурации клиента после его создания.

Сохраняем и закрываем файл.

Затем создаем простой скрипт, который будет компилировать нашу базовую конфигурацию с соответствующими сертификатами и ключами, а затем поместит сгенерированную конфигурацию в каталог ~ / client-configs / files. Создадим новый файл с именем make_ в каталоге ~ / client-configs:

nano ~/client-configs/make_

Добавляем следующее содержимое:

#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/ cat ${BASE_CONFIG} \ <(echo -e ‘<ca>’) \ ${KEY_DIR}/ \ <(echo -e ‘</ca>\n<cert>’) \ ${KEY_DIR}/${1}.crt \ <(echo -e ‘</cert>\n<key>’) \ ${KEY_DIR}/${1}.key \ <(echo -e ‘</key>\n<tls-auth>’) \ ${KEY_DIR}/ \ <(echo -e ‘</tls-auth>’) \ > ${OUTPUT_DIR}/${1}.ovpn

Сохраним и закроем файл. Прежде чем двигаться дальше, убедимся, что файл помечен как исполняемый:

chmod 700 ~/client-configs/make_

Этот скрипт сделает копию файла , соберет все файлы сертификатов и ключей, которые мы создали для своего клиента, извлечёт их содержимое, добавит их в копию базового файла конфигурации и экспортирует все это содержимое в единый файл конфигурации клиента. Это означает, что вместо того, чтобы отдельно управлять конфигурацией клиента, сертификатом и ключевыми файлами, вся необходимая информация будет хранится в одном файле. Преимущество такого подхода в том, что при необходимости добавления клиента, мы можем просто запустить этот скрипт, чтобы быстро создать файл конфигурации и быть уверенными, что вся важная информация хранится в одном удобном для пользователя месте.

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