Инструкция по настройке сервера и клиента OpenVPN

Оглавление

1. Обход блокировок с помощью российских VPS

2. Для чего нужен VPN, что он даёт

3. Как работает VPN

4. Что такое OpenVPN

5. Понятная и рабочая инструкция по настройке OpenVPN

6. Сертификаты OpenVPN

7. Как установить OpenVPN

8. Создание ключей OpenVPN

9. Создание ключей OpenVPN в Debian, Ubuntu, Linux Mint, Kali Linux

10. Создание ключей OpenVPN в Arch Linux, BlackArch

11. Размещение файлов ключей на сервере и на клиенте

12. Запуск сервера OpenVPN

12.1 Конфигурационный файл OpenVPN

12.2 Тестирование и запуск сервера OpenVPN

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

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

13.1 Настройка Windows для использования OpenVPN

13.2 Настройка Debian (Ubuntu, Linux Mint, Kali Linux), а также Arch Linux( BlackArch) для использования OpenVPN

14. Встраивание сертификатов в файл .ovpn

Заключение


Обход блокировок с помощью российских VPS

Начнём с небольшого лайф-хака: если у вас уже есть VPS (виртуальный частный сервер – разновидность хостинга, когда в отличие от совместного (shared-хостинга) вам в аренду дают не папку на сервере, а целую виртуальную машину, в которую вы можете установить любую операционную систему и настроить её как вам заблагорассудится), так вот, если у вас уже есть VPS и даже если виртуальный сервер находится в РФ, то весьма вероятно, что он подойдёт для обхода блокировок Роскомнадзора.

Чтобы это проверить, необязательно настраивать VPN – подключитесь к вашему удалённому серверу (например, по SSH) и попробуйте выполнить что-то вроде:

curl заблокированный_URL_или_IP

Вполне вероятно, что вы получите HTML код страницы заблокированного ресурса – это означает, что на вашем российском VPS можно настроить VPN для обхода блокировок.

В принципе, причина очевидна: оборудование для блокировок заставили установить только провайдеров «последней мили». Т.е. это разные ростелекомы, билайны и т.п. – те, кому вы платите за Интернет.

У кого есть российские VPS – пишите в комментариях, у вас через VPS открываются заблокированные сайты или нет? Будет интересно собрать некоторую статистику. Также указывайте, настроен ли IPv6 – возможно, дело просто в этом.

Только не думайте, что я агитирую арендовать именно российские VPS для обхода блокировок – нет, просто если вы веб-мастер и у вас УЖЕ ЕСТЬ такой сервер, то вы можете сэкономить несколько долларов в месяц, обойдясь без аренды зарубежного VPS под VPN.

Для чего нужен VPN, что он даёт

VPN создаёт соединение между одним или несколькими компьютерами. Это соединение использует надёжное шифрование. В результате чего, можно безопасно передавать данные используя ненадёжные соединения. Например, при подключении к открытой Wi-Fi сети, ваш трафик подвержен сниффингу, как со стороны других устройств локальной сети, так и со стороны тех, кто даже не подключился к этой сети – достаточно перехватывать беспроводной трафик, не подключаясь к ней. Но если вы после подключения к открытой сети начинаете использовать VPN, то ваш трафик передаётся в зашифрованном виде.

Из этого зашифрованного трафика невозможно извлечь какие-либо данные. К примеру, если без VPN вы открываете сайт, использующий HTTPS, то в результате сниффинга невозможно узнать, какие именно данные вы отправили и какие страницы посетили. Но даже при HTTPS видно, к каким именно сайтам вы подключаетесь. При использовании VPN третья сторона, даже если у ней есть доступ к вашему трафику, никак не может определить, какие сайты вы открывали либо извлечь другие данные – весь трафик представляет собой поток зашифрованных данных, имеющих такую же ценность для посторонних, как случайный набор нулей и единиц.

Как работает VPN

Технология VPN позволяет объединять несколько устройств в безопасную сеть.

В своей работе VPN использует разделение на сервер и клиент. У одного сервера может быть несколько клиентов, которые объединены в виртуальную частную сеть, где они могут безопасно обмениваться данными.

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

К примеру, если вы настроили VPN сервер на компьютере (к примеру, на VPS – виртуальном частном сервере), находящемся не в РФ, то при выходе в Интернет, этот сервер будет запрашивать для вас информацию, в результате, ваш IP адрес будет скрыт (будет показываться IP адрес удалённого сервера), а поскольку для зарубежных компьютеров не работают российские блокировки, то вы сможете получить доступ к любому сайту, который вы не можете открыть напрямую.

Что такое OpenVPN

OpenVPN – это бесплатная программа с открытым исходным кодом, которая реализует технологию VPN. Эта программа имеет и клиентскую часть, и серверную. Работает на различных операционных системах, в том числе на Linux и Windows.

Благодаря распространённости, даже существуют роутеры, которые поддерживают OpenVPN.

Понятная и рабочая инструкция по настройке OpenVPN

Я попытался максимально понятно описать каждый шаг. Если у вас возникли вопросы, то пишите их в комментариях.

Я не поленился и проверил работоспособность OpenVPN сервера на двух VPS’ках под управлением Arch Linux (мой основной виртуальный сервер) и Debian (специально арендовал для написания инструкции), а также проверил клиенты под управлением Windows, Debian (Kali Linux, Ubuntu), Arch Linux.

Т.е. если у вас не получается или возникают ошибки, то попробуйте выполнять операции более внимательно. Если это не помогает – то пишите в комментариях – попробуем разобраться вместе.

При всей своей детальности, эта инструкция не для полных нубов, как минимум вы:

  • должны иметь VPS
  • должны уметь пользоваться текстовыми редакторами с интерфейсом командной строки (vim или nano). Nano проще – если не умеете пользоваться vim, то в командах заменяйте его на nano

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

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

Мы будем настраивать OpenVPN так, что в своей работе программа будет использовать сертификаты. Это очень надёжный способ как зашифровать передаваемый трафик, так и защитить подключение к серверу.

Настройка OpenVPN будет понятнее, если уяснить криптографические основы. 

В криптографии есть понятие симметричного шифрования и асимметричного шифрования.

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

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

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

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

Но это не всё. Пары ключей нельзя создавать просто так – они должны быть подписаны центром авторизации (certification authority (CA)). Для подписания сертификатов, центр сертификации использует свой собственный приватный ключ. А чтобы можно было проверить, что сертификат действительно подписан уполномоченным центром сертификации, распространяется публичный ключ (сертификат) этого CA.

Итак, получается что:

  • сервер имеет два файла (сертификат, т.е. публичный ключ, и приватный ключ)
  • клиент имеет два файла (сертификат, т.е. публичный ключ, и приватный ключ)
  • центр сертификации имеет два файла (сертификат, т.е. публичный ключ, и приватный ключ)

Сертификаты при этом не являются секретными, а приватные ключи должны быть секретными!

  • дополнительно генерируется файл .pem: протокол Ди́ффи — Хе́ллмана (англ. Diffie-Hellman, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.

Получается уже семь обязательных файлов.

  • для добавления дополнительной HMAC подписи к пакетам рукопожатия SSL/TLS, можно создать ещё один файл – он будет восьмым. Это необязательный файл, но мы всё равно будем его использовать, поскольку он позволяет отбросить явно неподходящие пакеты.

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

Если кому-то интересно, посмотрите соответствующие статьи в Википедии (если вам это не совсем понятно, то не переживайте, свой VPN мы всё равно настроем):

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

Как установить OpenVPN

В разные системы OpenVPN ставится чуть по-разному. В Linux мы одновременно устанавливаем и сервер, и клиент. В Windows мы будем работать только с клиентом. Т.е. вам нужно выполнить установку и на сервер, и на клиентскую машину. Например, если у вас VPS с Linux, а пользоваться VPN вы будете с домашнего компьютера под управлением Windows, то устанавливайте OpenVPN на оба компьютера как это писано для каждой системы ниже.

Установка OpenVPN в Debian, Ubuntu, Linux Mint, Kali Linux

Для установки пакетов достаточно выполнить следующие команды (рекомендуется, чтобы предварительно система была обновлена и перезагружена):

sudo apt update
sudo apt install openvpn easy-rsa

Установка OpenVPN в Arch Linux, BlackArch

Установка выполняется следующей командой:

sudo pacman -S openvpn easy-rsa

Установка OpenVPN в Windows

Для Windows имеется OpenVPN с графической оболочкой. Перейдите на страницу https://openvpn.net/index.php/open-source/downloads.html, найдите там файл «Installer, Windows 7 and later» и скачайте установщик с расширением .exe.

Установка выполняется как обычно для Windows программ с мастером установки.

Обратите внимание, что при желании вы можете поставить галочку напротив «EasyRSA 2 Certificate Management Scripts». Это программа и скрипты для генерирования ключей. В этой инструкции ключи мы будем генерировать на Linux машине, т.е. эти скрипты нам не понадобятся, но при желании вы можете их установить.

Решение проблемы с ошибкой «OpenVPN GUI не поддерживает более 50 конфигураций. Пожалуйста свяжитесь с автором, если вам нужно больше.»

Возможно возникновение ошибки:

OpenVPN GUI не поддерживает более 50 конфигураций. Пожалуйста свяжитесь с автором, если вам нужно больше.

Для её исправления зайдите в папку C:\Program Files\OpenVPN\config\ и удалите оттуда файлы. Эти файлы могла оставить сборка на основе OpenVPN.

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

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

Для простоты, я буду выполнять действия на одной системе (на OpenVPN сервере), а потом перенесу клиентские ключи на нужный компьютер.

Имя файла Нужен для Цель Секретный
ca.crt сервер + все клиенты Публичный ключ (сертификат) корневого центра сертификации (CA) НЕТ
ca.key только для машины, подписывающей ключи Приватный ключ корневого центра сертификации (CA) ДА
dh{n}.pem только сервер Параметры Диффи Хеллмана НЕТ
ta.key сервер + все клиенты HMAC подпись к пакетам SSL/TLS ДА
server.crt только сервер Сертификат (публичный ключ) сервера НЕТ
server.key только сервер Приватный ключ сервера ДА
client1.crt только client1  Сертификат (публичный ключ) Client1 НЕТ
client1.key только client1  Приватный ключ Client1 ДА
client2.crt только client2  Сертификат (публичный ключ) Client2 НЕТ
client2.key только client2  Приватный ключ Client2 ДА
client3.crt только client3  Сертификат (публичный ключ) Client3 НЕТ
client3.key только client3  Приватный ключ Client3 ДА

Ключи могут генерироваться на любой операционной системе – они будут работать также на любой ОС. Например, сервер работает на Arch Linux и ключи созданы на нём, а затем клиентские ключи передаются в ОС под управлением Windows или Ubuntu.

В зависимости от вашей системы, выберите нужную инструкцию: для производных Debian или для производных Arch Linux.

Создание ключей OpenVPN в Debian, Ubuntu, Linux Mint, Kali Linux

Начинаем с инициализации центра сертификации:

cd /usr/share/easy-rsa
export EASYRSA=$(pwd)
./easyrsa init-pki
./easyrsa build-ca

Будет создано два файла:

  • /usr/share/easy-rsa/pki/ca.crt
  • /usr/share/easy-rsa/pki/private/ca.key

Первый (ca.crt) – это сертификат, т.е. открытый ключ центра сертификации. Он нужен и для сервера и для каждого клиента – с помощью него они будут проверять, что публичные ключи других действительно подписаны центром сертификации и что не появился кто-то «левый», не одобренный центром сертификации.

Создаём папку, где будут все сертификаты сервера OpenVPN:

mkdir /etc/openvpn/certs/

и сразу копируем туда первый файл:

cp /usr/share/easy-rsa/pki/ca.crt /etc/openvpn/certs/ca.crt

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

Теперь нам нужно сгенерировать пару ключей OpenVPN сервера.

./easyrsa gen-req server nopass

Нужно подписать сертификат ключами Центра Сертификации, для этого:

./easyrsa sign-req server server

Будет задан вопрос, точно ли мы хотим подписать, наберите yes, затем введите пароль от Центра Сертификации (CA).

Копируем в нужную папку файлы, которые нужны для запуска сервера OpenVPN:

cp /usr/share/easy-rsa/pki/issued/server.crt /etc/openvpn/certs/
cp /usr/share/easy-rsa/pki/private/server.key /etc/openvpn/certs/

Файл параметров Diffie-Hellman (DH) нужен для протокола обмена публичными ключами.

openssl dhparam -out /etc/openvpn/certs/dh2048.pem 2048

Создайте ключ HMAC:

openvpn --genkey --secret /etc/openvpn/certs/ta.key

Теперь у нас 5 файлов, необходимые для запуска сервера OpenVPN, размещены в папке /etc/openvpn/certs/. Проверьте, все ли файлы на месте:

ls -l /etc/openvpn/certs/

Создание и подпись ключей клиентов OpenVPN

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

Аналогично нужно будет ответить на вопрос yes и ввести пароль вашего Центра Сертификации.

Теперь с сервера скачайте файл /etc/openvpn/certs/ca.crt и разместите его по этому же пути, т.е. /etc/openvpn/certs/ca.crt на клиентской машине.

С сервера скачайте файл /etc/openvpn/certs/ta.key и разместите его по этому же пути, т.е. /etc/openvpn/certs/ta.key на клиентской машине.

С сервера скачайте файл /usr/share/easy-rsa/pki/issued/client1.crt, но в клиентской машине разместите его по пути /etc/openvpn/certs/client1.crt.

С сервера скачайте файл /usr/share/easy-rsa/pki/private/client1.key, но в клиентской машине разместите его по пути /etc/openvpn/certs/client1.key.

Файлы можно открывать текстовым редактором и копировать-вставлять на клиентскую машину.

Проверьте, все ли файлы на месте (на клиенте должно быть четыре файла):

ls -l /etc/openvpn/certs/

Итак, если вы создали ключи в Debian (или производных), то вам не нужно создавать ключи в Arch Linux, т.е. пропустите следующий раздел.

Создание ключей OpenVPN в Arch Linux, BlackArch

Размещение файлов ключей на сервере и на клиенте

Итак, всего на сервере должно быть пять файлов и они должны быть размещены в следующих директориях:

  • /etc/openvpn/certs/ca.crt
  • /etc/openvpn/certs/servername.crt
  • /etc/openvpn/certs/servername.key
  • /etc/openvpn/certs/dh2048.pem
  • /etc/openvpn/certs/ta.key

Проверьте, все ли файлы на месте:

ls -l /etc/openvpn/certs/

На клиентской машине должны быть следующие файлы, и в случае Linux разместите их так:

  • /etc/openvpn/certs/ca.crt
  • /etc/openvpn/certs/client1.crt
  • /etc/openvpn/certs/client1.key
  • /etc/openvpn/certs/ta.key

Проверьте, все ли файлы на месте:

ls -l /etc/openvpn/certs/

Файлы можно скачать используя программу scp или любым другим способом. Также их содержимое можно копировать-вставлять, поскольку они представляют собой обычный текст.

Для Windows машин создайте папку C:\Program Files\OpenVPN\certs\ и разместите там эти файлы:

  • C:\Program Files\OpenVPN\certs\ca.crt
  • C:\Program Files\OpenVPN\certs\client1.crt
  • C:\Program Files\OpenVPN\certs\client1.key
  • C:\Program Files\OpenVPN\certs\ta.key

Запуск сервера OpenVPN

Это универсальная инструкция для Debian, Ubuntu, Linux Mint, Kali Linux, Arch Linux и их производных.

Конфигурационный файл OpenVPN

В архиве /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz или в папке /usr/share/openvpn/examples/ имеются примеры файлов настройки. Оттуда можно взять файл server.conf и настроить его под свои нужды. Если вы действовали по этой инструкции, то можете просто создать новый файл /etc/openvpn/server/server.conf

vim /etc/openvpn/server/server.conf

и скопируйте туда:

# Какой порт использовать
# Значением по умолчанию является 1194
# я использую 53 порт, мимикрируя под DNS трафик
# ещё такая настройка иногда помогает обойти
# перехватывающие порталы (Captive Portals)
#port 1194
port 53

# TCP или UDP протокол. Рекомендуется UDP 
;proto tcp
proto udp

# Не нужно менять
;dev tap
dev tun

# Ключи: первым идёт публичный ключ центра сертификации
# затем публичный ключ сервера
# затем приватный ключ сервера
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/servername.crt
key /etc/openvpn/certs/servername.key  # Этот файл нужно хранить в секрете

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

# Будет создана виртуальная локальная сеть
# Здесь указываются её параметры
# Не нужно ничего менять без особых причин
server 10.8.0.0 255.255.255.0

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


# Эта настройка делает так, что при подключении к VPN
# для клиентов сервер VPN становится шлюзом по умолчанию
push "redirect-gateway def1 bypass-dhcp"


# Если раскомментировать эту настройку, 
# то для нескольких клиентов можно использовать одну и ту же пару
# приватный-публичный ключ,
# но это не рекомендуется
;duplicate-cn

# Пинговать удалённый узел каждые 10 секунд
# и считать его упавшим, если он не ответил за 120 секунд
keepalive 10 120

# Дополнительная защита для DoS атак и флудинга портов UDP
# благодаря созданию "HMAC файервола"
# за счёт добавления дополнительной подписи к SSL/TLS
# Файл ta.key был создан во время генерирования ключей,
# он должен быть доставлен также каждому клиенту
remote-cert-tls client
tls-auth /etc/openvpn/certs/ta.key 0 # Этот файл нужно хранить в секрете

# Выбор криптографических шифров
# У клиентов должно быть также
cipher AES-256-CBC

# Включение сжатия и отправка настройки клиенту
;compress lz4-v2
;push "compress lz4-v2"

# Максимальное число одновременно подключённых клиентов
;max-clients 100

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

# Хранить ключи в памяти, на случай, если не получается
# получить к ним доступ из-за понижения привилегий
persist-key
persist-tun

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

# По умолчанию логи идут в syslog 
# "log" означает перезапись файла журнала при каждом запуске OpenVPN,
# а "log-append" означает дополнение журнала
# Используйте только одну, а не обе!
;log         openvpn.log
;log-append  openvpn.log

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

# Предупреждать клиента, что сервер перезапускается
# чтобы клиенты могли автоматически переподключиться.
explicit-exit-notify 1

Сохраните и закройте файл.

Тестирование и запуск сервера OpenVPN

Протестировать настройки OpenVPN сервера можно так:

openvpn /etc/openvpn/server/server.conf

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

cat /var/log/openvpn.log
cat /var/log/openvpn-status.log

А если всё в порядке запустите OpenVPN сервер и добавьте его в автозагрузку

systemctl start openvpn-server@server.service
systemctl status openvpn-server@server.service
systemctl enable openvpn-server@server.service

Обратите внимание, что с systemctl используется команда вида openvpn-server@<configuration>.service, где <configuration> - это файл конфигурации, который лежит в папке /etc/openvpn/server/, но без расширения .conf

Если вы следовали этой инструкции и не меняли название файла, то вышеприведённые команды вам подойдут, их не нужно менять.

Если вы столкнулись с ошибкой:

Options error: --explicit-exit-notify cannot be used with --mode server

То из файла /etc/openvpn/server/server.conf

Удалить директиву

explicit-exit-notify 1

Причина ошибки в том, что поддержка директивы explicit-exit-notify 1 была добавлена в OpenVPN начиная с версии 2.4. А на вашей машине, очевидно, OpenVPN более старой версии.

Если вы столкнулись с ошибкой «Address already in use», например:

TCP/UDP: Socket bind failed on local address [AF_INET][undef]:53: Address already in use
Exiting due to fatal error

Это означает, что порт занят другой программой. Проверить, какая программа использует порт, можно командой:

sudo netstat -tulpn | grep ":НОМЕР_ПОРТА"

К примеру, для проверки порта 53:

sudo netstat -tulpn | grep ":53"

Используйте любой другой, не занятый порт – для этого в конфигурационных файлах OpenVPN сервера и клиента отредактируйте директиву port 53.

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

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

Для этого создайте файл vpn_route.sh.

Обратите внимание, что я создаю скрипт в папке /root/bin/, если у вас её нет, то создайте её предварительно

mkdir /root/bin/

Если вы хотите разместить скрипт в другой папке, то отредактируйте последующие данные под свои.

Создаём файл:

vim /root/bin/vpn_route.sh

B этот файл скопируйте следующее содержимое, отредактировав его под свои нужды. Обратите внимание на:

  • PRIVATE=10.8.0.0/24 – измените подсеть в соответствии с вашими настройками. Если делали по этой инструкции, то менять ничего не нужно.
  • Укажите значение DEV! Впишите там имя вашего сетевого интерфейса. Это имя можно посмотреть командой
ip a

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

#!/bin/sh

# укажите имя интерфейса, иначе скрипт попытается выбрать его автоматически
#DEV='eth0'
DEV='ens3'
PRIVATE=10.8.0.0/24

if [ -z "$DEV" ]; then
	DEV="$(ip route | grep default | head -n 1 | awk '{print $5}')"
fi
# Включаем форвардинг пакетов, чтобы из туннельного интерфейса
# они попадали на внешний интерфейс
sysctl net.ipv4.ip_forward=1
# Убеждаемся, что iptables не блокируют перенаправляемый трафик:
iptables -I FORWARD -j ACCEPT
# Преобразование адресов (NAT) для приходящих из туннеля пакетов
# При включенной пересылке пакеты по умолчанию перенаправляются 
# с исходным адресом без изменений, то есть в нашем случае 10.8.0.*
# такие пакеты либо удаляются на шлюзе ISP, либо даже если они
# отправляются в пункт назначения, ответ никогда не находит обратного пути.
# Эти частные адреса не маршрутизируются в Интернете.
#
# Решением является преобразование адресов (NAT) исходящего трафика, 
# то есть заменить частный 10.8.0.* адрес общедоступным IP адресом VPN-сервера. 
# Это позволит ответам достичь VPN-сервера, 
# и там они будут отправлены обратно в туннель.
iptables -t nat -I POSTROUTING -s $PRIVATE -o $DEV -j MASQUERADE

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

chmod 755 /root/bin/vpn_route.sh

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

bash /root/bin/vpn_route.sh

Если всё нормально, то для добавления его в автозагрузку создайте файл /etc/systemd/system/enable-openvpn-routing.service:

vim /etc/systemd/system/enable-openvpn-routing.service

Со следующим содержимым:

[Unit]
Description=Включение роутинга OpenVPN трафика.

[Service]
ExecStart=/root/bin/vpn_route.sh

[Install]
WantedBy=multi-user.target

Обратите внимание на строку /root/bin/vpn_route.sh – замените её на свой путь, если мы разместили файл в другом месте или назвали его по-другому.

И активируйте автозапуск этого файла:

systemctl enable enable-openvpn-routing

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

Настройка Windows для использования OpenVPN

Как уже было сказано, необходимые ключи должны быть размещены в следующих папках:

  • C:\Program Files\OpenVPN\certs\ca.crt
  • C:\Program Files\OpenVPN\certs\client1.crt
  • C:\Program Files\OpenVPN\certs\client1.key
  • C:\Program Files\OpenVPN\certs\ta.key

Теперь в папке C:\Program Files\OpenVPN\config\ создайте файл client.ovpn со следующим содержимым:

ВНИМАНИЕ: замените в строке remote 185.117.153.79 IP адрес на свой!!!

# Программа выступает в роли клиента (а не сервера)
client

# Самая важная настройка:
# впишите здесь IP адрес СВОЕГО OpenVPN СЕРВЕРА
# Другие настройки можно вообще не менять!!!
remote 185.117.153.79

# Сервер использует 53 порт, этот же порт указывается здесь
port 53

# Не меняйте
dev tun

# Выбор протокола TCP или UDP
# Должен быть таким же, как на сервере
;proto tcp
proto udp

# Имя хоста/IP и порт сервера.
# Можно вписать несколько удалённых серверов
# для балансировки нагрузки.
;remote my-server-1 1194
;remote my-server-2 1194

# Если для балансировки нагрузки вы вписали несколько хостов
# то при включении этой опции будет выбран случайный
# в противном случае они будут следовать по очереди
;remote-random

# Бесконечно пытаться преобразовать имя хоста
# сервера OpenVPN. Очень полезно на машинах
# которые подключены к интернету не постоянно,
# например, для ноутбуков
resolv-retry infinite

# Большинству клиентов не нужно
# привязываться к определённому локальному порту
nobind

# Понизить привилегии после подключения (только для не-Windows)
;user nobody
;group nobody

# Пытаться сохранить прежнее состояние после перезапуска.
persist-key
persist-tun

# Здесь можно настроить HTTP прокси
# для подключения к OpenVPN серверу
# поддерживается аутентификация на удалённом прокси
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Беспроводные сети часто создают много дублирующих пакетов
# Включите эту настройку, чтобы не показывать предупреждения
# о дубликатах
;mute-replay-warnings

# Путь до сертификатов
# Обратите внимание, как это делается в Windows:
# Путь до файлов взят в двойные кавычки,
# обратные слеши экранированы
ca "C:\\Program Files\\OpenVPN\\certs\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\certs\\client1.crt"
key "C:\\Program Files\\OpenVPN\\certs\\client1.key"

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

# Ключ для дополнительной защиты
tls-auth "C:\\Program Files\\OpenVPN\\certs\\ta.key" 1

# Набор шифров как на сервере
cipher AES-256-CBC

# Сжатие. Не включайте, если не включено на сервере
#comp-lzo

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

Теперь выберите подключение «client» и нажмите «Подключиться»:

Свой IP вы можете проверить на сайте https://suip.biz/ru/?act=myip

Настройка Debian (Ubuntu, Linux Mint, Kali Linux), а также Arch Linux( BlackArch) для использования OpenVPN

Это универсальная инструкция для всех производных Debian и Arch Linux по подключению к OpenVPN.

Теперь настроем клиента, который будет пользоваться OpenVPN на Linux. Как это было сказано почти в самом начале, пакет OpenVPN у вас уже должен быть установлен.

Сгенерированные ключи должны быть в этих файлах:

  • /etc/openvpn/certs/ca.crt
  • /etc/openvpn/certs/client1.crt
  • /etc/openvpn/certs/client1.key
  • /etc/openvpn/certs/ta.key

Если у вас нет папки /etc/openvpn/certs/, то создайте её:

sudo mkdir /etc/openvpn/certs/

И скопируйте туда все необходимые ключи.

Проверьте, все ли файлы на месте (4 файла):

ls -l /etc/openvpn/certs/

Создайте файл /etc/openvpn/client/client.conf

sudo gedit /etc/openvpn/client/client.conf

И скопируйте туда (обязательно поменяйте IP адрес в строке remote 185.117.153.79 на IP адрес ВАШЕГО OpenVPN сервера):

# Программа выступает в роли клиента (а не сервера)
client

# Самая важная настройка:
# впишите здесь IP адрес СВОЕГО OpenVPN СЕРВЕРА
# Другие настройки можно вообще не менять!!!
remote 185.117.153.79

# Сервер использует 53 порт, этот же порт указывается здесь
port 53

# Не меняйте
dev tun

# Выбор протокола TCP или UDP
# Должен быть таким же, как на сервере
;proto tcp
proto udp

# Имя хоста/IP и порт сервера.
# Можно вписать несколько удалённых серверов
# для балансировки нагрузки.
;remote my-server-1 1194
;remote my-server-2 1194

# Если для балансировки нагрузки вы вписали несколько хостов
# то при включении этой опции будет выбран случайный
# в противном случае они будут следовать по очереди
;remote-random

# Бесконечно пытаться преобразовать имя хоста
# сервера OpenVPN. Очень полезно на машинах
# которые подключены к интернету не постоянно,
# например, для ноутбуков
resolv-retry infinite

# Большинству клиентов не нужно
# привязываться к определённому локальному порту
nobind

# Понизить привилегии после подключения (только для не-Windows)
;user nobody
;group nobody

# Пытаться сохранить прежнее состояние после перезапуска.
persist-key
persist-tun

# Здесь можно настроить HTTP прокси
# для подключения к OpenVPN серверу
# поддерживается аутентификация на удалённом прокси
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Беспроводные сети часто создают много дублирующих пакетов
# Включите эту настройку, чтобы не показывать предупреждения
# о дубликатах
;mute-replay-warnings

# Путь до сертификатов
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/client1.crt
key /etc/openvpn/certs/client1.key

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

# Ключ для дополнительной защиты
tls-auth /etc/openvpn/certs/ta.key 1

# Набор шифров как на сервере
cipher AES-256-CBC

# Сжатие. Не включайте, если не включено на сервере
#comp-lzo

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

Протестировать настройки OpenVPN сервера можно так:

sudo openvpn /etc/openvpn/client/client.conf

Слова «Initialization Sequence Completed» говорят о том, что подключение прошло успешно.

Если по каким-то причинам нет Интернета, то проверьте, пингуются ли IP

ping 8.8.8.8

и пингуются ли имена хостов:

ping ya.ru

Если пинг к IP проходит, а к именам хостов – нет, то откройте файл /etc/resolv.conf:

sudo gedit /etc/resolv.conf

И замените его содержимое на:

nameserver 8.8.8.8

А если всё в порядке запустите клиент OpenVPN в фоне и при желании добавьте его в автозагрузку. Это необязательно – вы можете подключаться к OpenVPN только по мере необходимости.

Запуск:

sudo systemctl start openvpn-client@client.service

Проверка статуса:

sudo systemctl status openvpn-client@client.service

Добавление в автозагрузку:

sudo systemctl enable openvpn-client@client.service

Если нужно остановить, то введите:

sudo systemctl stop openvpn-client@client.service

Если нужно отключить из автозапуска, то выполните:

sudo systemctl disable openvpn-client@client.service

Встраивание сертификатов в файл .ovpn

Сертификаты необязательно должны быть в отдельных файлах. Сертификат можно внедрить прямо в файл .ovpn и, на самом деле, это очень удобно! То есть для распространения конфигурации среди клиентов OpenVPN сервера не нужно передавать пять файлов (настройки и четыре сертификата) достаточно передать только один файл настроек, в который уже встроены сертификаты.

OpenVPN позволяет включать файлы в главный конфигурационный файлы, которые указываются опциями --ca, --cert, --dh, --extra-certs, --key, --pkcs12, --secret, --crl-verify, --http-proxy-user-pass, --tls-auth и --tls-crypt.

Перед каждым сертификатом ставится строка <опция> (где вместо слово «опция» нужно вписать ту опцию, которую заменяет данный сертификат, то есть это ca, cert, dh и так далее). Когда текст сертификата заканчивается, то ставится закрывающий тег </опция>.

Пример использования встроенного сертификата:

<cert>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</cert>

Как можно увидеть, нужно копировать содержимое файлов целиком, вместе с комментариями. Если внедряется файл --pkcs12, то его нужно закодировать в base64. Закодировать файл .p12 в base64 можно сделать, например, с помощью OpenSSL, запустив

openssl base64 -in input.p12

Рассмотрим конкретно для нашей конфигурации. Мы используем четыре сертификата:

ca "C:\\Program Files\\OpenVPN\\certs\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\certs\\client1.crt"
key "C:\\Program Files\\OpenVPN\\certs\\client1.key"
tls-auth "C:\\Program Files\\OpenVPN\\certs\\ta.key" 1

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

key-direction 1

Теперь прямо в файл .ovpn добавьте:

<ca>
 [...]
</ca>
<cert>
[...]
</cert>
<key>
 [...]
</key>
<tls-auth>
 [...]
</tls-auth>

Где вместо многоточий […] вставьте соответствующие сертификаты/ключи полностью, вместе с комментариями. Получается примерно так:

<ca>
-----BEGIN CERTIFICATE-----
[...]
-----END CERTIFICATE-----
</ca>
<cert>
[...]
</cert>
<key>
-----BEGIN PRIVATE KEY-----
[...]
-----END PRIVATE KEY-----
</key>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
[...]
-----END OpenVPN Static key V1-----
</tls-auth>

Теперь файл настроек .ovpn можно загружать в различные клиенты OpenVPN: на телефон, например, или на другой компьютер – отдельные файлы сертификатов больше не нужны.

Заключение

Если у вас нет своего VPS, и вы хотите его купить прямо сейчас, то пара ссылок:

Рекомендуется Вам:

20 комментариев to Инструкция по настройке сервера и клиента OpenVPN

  1. Андрей:

    А каК тор работет из под впн? Скорость падает? Спасибо за подробную инструкцию 

    • Alexey Alexey:

      Да, если внутри VPN использовать Tor (например, сервер с OpenVPN настроить так, чтобы пришедший из туннеля трафик он отправлял через сеть Tor), то скорость упадёт до обычной скорости Tor’а. Такую конструкцию имеет смысл делать если вы хотите скрыть факт использования Tor’а. Т.е. со стороны будет виден только зашифрованный канал к определённому IP (от вашего компьютера до сервера OpenVPN).

      На мой взгляд, если вы не делаете секрета из того, что используете Tor, то используйте его напрямую, без VPN. Со стороны это будет выглядеть как создание зашифрованного соединения с разными IP. Поскольку IP Tor’а не являются секретом, то третья сторона может определить, что вы используете Tor. Но к передаваемым данным тот, кто сниффит трафик от вас до ноды Tor, никак не сможет получить доступ в любом из рассмотренных случаев – у Tor тоже очень надёжное шифрование.

      Но не надо слишком доверять сети Tor! На выходной ноде обмен с глобальной сетью происходит «как есть». Т.е. если это HTTP трафик – то выходная нода видит его незашифрованным, если это HTTPS трафик, то он, само-собой зашифрован. Так вот, ничто (!) не мешает владельцу выходной ноды настроить пассивный сниффер и собирать пароли/кукиз из незашифрованного трафика. Хотя IP источника (т.е. ваш) он всё равно не узнает, но адрес сайта/логин/пароль/кукиз вполне может перехватить.

      Это же касается и сторонних бесплатных/платных VPN. Считайте по умолчанию, что ваш трафик там непрерывно сниффится и сохраняются логи всей сетевой активности, в том числе ваш IP адрес, с которого вы подключились, и адреса ресурсов, куда вы делали запросы. Т.е. чтобы зайти на заблокированный ресурс или провести сканирование сайта без криминала – для этого сгодиться. А если действия связаны с серьёзным криминалом – то уже вряд ли. Естественно, лучше не делать ничего криминального – это лучшая защита от проблем с законом.

      • Андрей:

        Да, никакого крименала. Мне просто и самому интересно. Я вообще сервисный инженер. И к администрированию сети имею поскольку постольку. Но в детстве увлекался данной тематикой (1994 году)… А потому как то стало не до этого….С тех пор все стало только интересней и недавно снова окунуться так сказать в андеграунд решил, посмотреть что да как теперь дела… Кстати интересно что когда начинаю с админами  говорить о безопасности они делают круглые глаза, странно что админы очень слабо разбрираються в сетевой безопасности. Да пароли да надежные но про способы атак на сеть вообще имеют очень размытые представления…. 

      • Андрей:

        Да про VPN я слышал что зарубежные с большой неохотой дают логи Российским спецслужбам. Но я также слышал что для спецслужб не составляет особого труда взломать зарубежных хостеров если уж действительно крименал и далее СОРМ и пиндыр….  Мне понравился этот ролик про СОРМ

        https://www.youtube.com/watch?v=MvJwN8pD2qc

  2. Андрей:

    Так что я уверен что посетители этого ресурса уже автоматически попадают в базу даных СОРМ))) Так что если кто тут пришел что бы творить безпредел в сети - НЕСОВЕТУЮ. 

  3. Андрей:

    Вот еще про СОРМ кому интересно….) что бы читатели не думал что раз знает пару атак уже стал "хацкером" https://www.youtube.com/watch?v=ow4ZOyWCJMo

    • анонимус:

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

      • Андрей:

        Да согласен, уровень «русских хакеров выбравших Трампа» на лицо. Такого позора с телеграммом и законом яровой еще нигде небыло.но лучше перебдеть чем недобдеть. Могут и гбшники нанять свободных художников. Оутсорсинг рулит -  и дать им сорм в помощь. То что было с телеграммом и дурацким законом о хранении данных показатель как далеко правительство (где кстати и президент неумеет компом пользоваться) далеки от этого всего. …………………………………….. …. в стране где правительство строит электронное государство и неумеет даже винду поставить сами.. это правительство а не гбшники. Те тож любят анонимничить. 

        • Alexey Alexey:

          Ребят, я разделяю ваше мнение. Но не нужно про политику – просто чтобы разных кремлеботов не набежало и мне не пришлось тратить время на лишнюю модерацию. Кстати, сейчас всё отлично – очень адекватные посетители сайта, задумываюсь, чтобы отключить предварительную модерацию.

          И особенно не нужно призывов к противоправным действиям (DDoS’у в том числе) – им от этого ничего не будет, а мне, как владельцу этого сайта, может аукнуться.

          Ну и само-собой, мы с вами изучаем infosec чтобы сделать информационные технологии защищённее, а не чтобы совершать противоправные деяния.

          • кукумария в:

            Ссылка на зарубежные хостеры не рабит((( просто не нажимаеться. Русские хостеры открываються.

          • Андрей:

            Извеняюсь… поделюсь своей бедой . Cоздал VPS на Ubuntu 16.04 -i686minimal 

            Установил openvpn 

            создал ключи раскидал по машинам

            Но при создании на сервере файла server.conf обнаружил что папки server несуществует. (у меня на попугае она есть) Создал ее руками и сделал там файл server.conf

            но при команде (openvpn /etc/openvpn/server/server.conf) пишеться что - Options error: --explicit-exit-notify cannont be used with --mode server Use --help for more information

            мож я нуб( это мой первый раз))) Может что подскажите?

             

            • Alexey Alexey:

              Приветствую! Поддержка директивы

              explicit-exit-notify 1

              Была добавлена в OpenVPN начиная с версии 2.4.

              Вариантов два:

              1) из файла /etc/openvpn/server/server.conf

              Удалить директиву

              explicit-exit-notify 1

              (это не критично)

              2) использовать более новую версию Ubuntu/Debian, где в репозиториях уже OpenVPN 2.4

              П.с. Просто из любопытства, почему за основу серверной ОС вы берёте Ubuntu, а не берёте Debian-minimal последней версии?

              Я спрашиваю, поскольку в минимальных версиях там всё равно в основном нет «супер плюшек Ubuntu», зато есть устаревший софт.

              Кстати, в Ubuntu 17.10 уже OpenVPN 2.4.

  4. Андрей:

    Ну тут причин две 

    - первая) я сначало поставил дебиан и не минимальный  и что то у меня с при установке сети не пошло с сетевым интерфейсом, сеть установщик никак неловил на VPS…Вот и схватился за то что работает…) 

    - Вторая - Я нуб))) Всем этим интересным я занялся где то с месяц назад) Тогда же впервые увидил и Linux)))

     

    Огромное спасибо) Дождусь пока ноут зарядиться. А то разрядил его за день…и буду пробывать снова. Повторение мать учения)

    • Alexey Alexey:

      Сразу предупрежу о другой возможно ошибке. Не знаю, будет ли эта проблема на минимальной версии Ubuntu, но на настольной Ubuntu порт UDP 53 занят процессом systemd-resolve.

      Можно проверить, занят ли этот порт:

      netstat -tulpn | grep ":53 "

      Если занят, то используйте любой другой, не занятый – в конфигурационных файлах OpenVPN сервера и клиента это директива port 53.

      • кукумария в:

        спасибо, переставил на дебиан9минимал и все пошло…запустился сервак успешно завтра уже буду воевать с клиентами на виндов и попугае. ) Весь день проковырялся… ппц но полезно. Огромное спасибо.

      • кукумария в:

        дополнение в debian9 - netstat не работает там надо

        lsof -i:номер порта

        а далее kill если надо

        • кукумария в:

          и еще сори за флуд

          с kali или попугая на vps можно зайти по команде в терминале

          ssh root@ipсервера

          вводим пароль и погнали) может помочь комуто.

  5. Есть еще невероятно простой способ, с помощью графического приложения https://github.com/delfer/ssheller
    Код открыт, работает под Windows, macOS и Linux.
    Не требуется никакого доп. софта. И сервер настроит, и файл подключения скачает.

  6. asdasd:

    Гигантское спасибо за инструкцию, просто выше всяких похвал

Добавить комментарий

Ваш e-mail не будет опубликован.