Инструкция по настройке сервера и клиента 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

15. Информация о выходе новых версий OpenVPN


Заключение


Обход блокировок с помощью российских 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/community-downloads/, найдите там файл «WINDOWS INSTALLER (NSIS)» и скачайте установщик с расширением .exe. Или скачайте последнюю версию по прямой ссылке http://build.openvpn.net/downloads/releases/latest/openvpn-install-latest-stable.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)
sudo ./easyrsa init-pki
sudo dd if=/dev/urandom of=pki/.rand bs=256 count=1 
sudo dd if=/dev/urandom of=pki/.rnd bs=256 count=1 
sudo ./easyrsa build-ca

Нужно будет придумать и два раза ввести пароль от 4 до 1023 символов.

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

  • /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).

Когда появится фраза:

Enter pass phrase for /usr/share/easy-rsa/pki/private/ca.key:

Нужно будет ввести пароль Центра Регистрации, который установили на предыдущем шаге.

Копируем в нужную папку файлы, которые нужны для запуска сервера 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:

sudo 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-server
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

# Будет создана виртуальная локальная сеть
# Здесь указываются её параметры
# Не нужно ничего менять без особых причин
topology subnet
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 # Этот файл нужно хранить в секрете

# Выбор криптографических шифров
# У клиентов должно быть также
# для версий ранее 2.5
#cipher AES-256-CBC
# для версии 2.5
data-ciphers AES-256-GCM:AES-128-GCM

# Включение сжатия и отправка настройки клиенту
;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-client
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 # для старых версий до 2.5
data-ciphers AES-256-GCM:AES-128-GCM

# Сжатие. Не включайте, если не включено на сервере
#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-client
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 # для старых версий до 2.5
data-ciphers AES-256-GCM:AES-128-GCM

# Сжатие. Не включайте, если не включено на сервере
#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: на телефон, например, или на другой компьютер – отдельные файлы сертификатов больше не нужны.

Информация о выходе новых версий OpenVPN

Информация о выходе новых версий, а также другой интересный материал об OpenVPN на форуме.

Заключение

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


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

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

  1. Андрей:

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

    • 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:

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

          И особенно не нужно призывов к противоправным действиям (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:

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

              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:

      Сразу предупрежу о другой возможно ошибке. Не знаю, будет ли эта проблема на минимальной версии 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:

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

  7. User:

    Здравствуйте!

    Цель - настроить vpn на Linux Mint 19.1. Удобнее не из командной строки запускать, а вручную, кликом на сетевые соединения. При настрйке нужно добавить файлы сертификатов. У меня есть файл с расширением .ovpn (создал на серваке по простой инструкции в несколько команд).

    Вопрос. Как можно извлечь из него сертификаты, чтобы потом вручную добавить?

    • Alexey:

      Думаю, вы собираетесь использовать NetworkManager, эта программа прекрасно понимает файлы .ovpn со встроенными сертификатами. Для этого нажмите на иконку Wi-Fi в панели рядом с часами, там выберите Network Settings (на русском наверное будет Настройки сети). В открывшемся окне внизу слева нажмите плюсик (+) и там нажмите Import from file (на русском будет Импортировать из файла).

      NetworkManager сам извлечёт сертификаты и сохранит куда нужно.

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

  8. WazZzuP:

    1000 раз извиняюсь, но уж помогите коли можете… Да, я только начинаю изучать все связанное с линуксом, поэтому вопрос "нубский". Дошел я до Easy RSA и на этом все кончилось((

    init-pki и build-ca no such file…

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

    куда податься пока не могу понять ибо с OpenVPN Easy-RSA определенно устанавливается(пытался установить отдельно - терминал уверяет что уже все есть). В папке usr/share/easy-rsa существует только build-ca (из требуемых мануалом)

    • Alexey:

      Приветствую! Напишите, какой у вас дистрибутив Linux?

      Ещё посмотрите, пожалуйста, на раздел под спойлером «Для старой версии - больше не актуально» - я специально его не удалил, так как для некоторых он может быть всё же актуальным. Возможно, команды из этого раздела у вас сработают.

      • WazZzuP:

        Да, версию забыл указать, отправил и из за модерации не смог оперативно исправить - пробовал на убунту 18.04LTS (устанавливается easy-RSA 2.2 через apt-get install easy-rsa, хотя как вижу в большинстве мануалов во всю используется 3 версия) так же пробовал на Debian (на VPS'е от digital ocean) эффект прям такой же, хотя это совсем и не удивило. Пробовал с GitHub загрузить третью версию, но пока не разобрался, после работы попробую по вашему совету, спасибо

      • WazZzuP:

        Спасибо за ответ, с этим разобрался - сработало именно то что больше не актуально) и, к моему стыду, действовал я не от имени root… sudo не спасало(бала куча ругани в терминале на необходимость "source ./vars") и тут под пивом вспомнил про "sudo -i", а дальше с мелкими "перефразированиями" все пошло как надо) неоднократно перечитывал и старался вникнуть во все что написано (чтоб не копипастить не понимая как это работает), возможно из-за этого openvpn и кажется чем то невероятно непростым. Так или иначе надеюсь с клиентскими ключами проблем далее не возникнет(сегодня не возьмусь - пиво дошло до мозга). Спасибо за интересные материалы (не только касаемые openvpn - уже многое прочел) и помощь в решении сего недоразумения!

  9. Григорий:

    Алексей,
    интернет через wifi вопрос:
    можно ли поставить openvpn сервер и клиента на один ноутбук с debian(ubuntu) и с этого ноута пользоваться vpn через wifi
    или надо поставить сервер на одни комп а пользоваться vpn с другого.
    Спасибо.

    • Alexey:

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

      В принципе можно сделать так, что клиент на компьютере будет подключён к OpenVPN серверу, который находится на этом же компьютере. НО: OpenVPN сервер будет выходить в Интернет с этого же компьютера, в результате: а) IP адрес будет таким же, как и изначально, б) трафик от OpenVPN сервера, когда он выходит в Интернет, не зашифрован.

      По итогу для условного «внешнего наблюдателя» в трафике с этого компьютера абсолютно ничего не поменяется.

      Случаи, когда OpenVPN сервер и клиент на одном компьютере имеет смысл: а) тестирование настроек OpenVPN (например, у вас нет VPS сервера, но хочется попробовать свои силы в настройке OpenVPN); б) тестирование виртуальной частной сети с использованием виртуальных компьютеров: можно настроить несколько виртуальных машин VirtualBox на одном компьютере, подключить их к OpenVPN серверу, который также может быть виртуальной машиной, и в этой системе делать разные тесты по маршрутизации и настройки сервисов внутри виртуальной частной сети. Но это уже только для тех, кто чётко понимает для чего ему это. Для подмены своего IP и шифрования выходящего во вне трафика это не поможет.

  10. Григорий:

    Alexey,
    большое спасибо за ващ подробный ответ.

  11. Alexey:

    А как сделать VPN для нескольких клиентов?

     

    Например я поставил себе недавно https://github.com/Nyr/openvpn-install

    Но работает только для 1 пользователя

  12. Игорь:

    Добрый день.

    Как решить проблему с утечкой DNS на debian 9?

  13. Михаил:

    Подскажите пожалуста, на ubuntu 1804 закидываю сертики и послекомманды openvpn /etc/openvpn/client/client.conf выскакивает ошибка "Wed May 22 07:48:39 2019 /sbin/ip addr add dev tap0 10.0.0.10/-1 broadcast 255.255.255.254
    Error: any valid prefix is expected rather than "10.0.0.10/-1".
    Wed May 22 07:48:39 2019 Linux ip addr add failed: external program exited with error status: 1
    Wed May 22 07:48:39 2019 Exiting due to fatal error

    "

  14. Someone:

    Ни на одном английском сайте не увидел такого подробного описания. Спасибо

  15. Вадим:

     Process: 149 ExecStart=/usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf 
    (code=exited, status=1/FAILURE)

    Что это означает? Все по инструкции делаю, слово в слово. Не работает(

    • Alexey:

      Не поленился и настроил новый OpenVPN сервер на одном из своих Debian серверов. Полный цикл — вместе с перенаправлением трафика, подключением клиента и т. д. Всё работает.

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

  16. Sergey:

    Косательно enable-openvpn-routing.service:

    [Service]

    ExecStart=/root/bin/vpn_route.sh - так нехочет запускаться, ругается.

     

    [Service]

    ExecStart=/bin/bash /root/bin/vpn_route.sh - так все нармально запустилось

    Linux archlinux 5.5.13-arch2-1

    Статья очень хорошая и полезная, мне понравилось. 

    Расположение файлов в каталоге openvpn на ubuntu отличается от archi, а тут всё расписано как надо. 

    • Alexey:

      Приветствую! Спасибо за дополнение. Обычно явное указание bash для запуска файлов .sh требуется если файл не является исполнимым. То есть возможно, что вы пропустили команду из инструкции:

      chmod 755 /root/bin/vpn_route.sh

      Вы можете проверить, есть ли разрешения на исполнение данного файла:

      ls -l /root/bin/vpn_route.sh

      Должно быть что-то вроде такого (должны быть x):

      -rwxr-xr-x 1 root root 415 Apr 26  2018 /root/bin/vpn_route.sh
      

      Ещё одна возможная причина, в начале файла /root/bin/vpn_route.sh пропущен шебанг:

      #!/bin/sh
      
      • Sergey:

        Да Вы правы, я был не вниметелен. Действительно в скрипте пропустил 

        #!/bin/sh

        Добавил строчку и все зароботало. Спасибо. 

  17. Ersin:

    Добрый день.

    Хочу поднять  две тестовых  конфигураций 1) VPN-TOR-VPN с использованием двух VPS,один до Тор ,другой после с использованием ОpenVPN и 2)такая же схема только

    вместо первого VPS поднять сервер на домашней машине с Debian,а в качестве клиента использовать гостевую ОС на VirtualBox.Скажите вторая схема будет корректно работать с ОpenVPN или могут быть подводные камни?Я так понимаю при использовании Тор надо использовать ТСР пакеты.

    Заранее благодарю.

     

    • Alexey:

      ИМХО, какая-то бессмыслица. Если для доступа к локальным ресурсам из одной VPN сети в другую VPN сеть, то это глупость — внутри локальной сети пониженные меры безопасности (например, веб-сервер без HTTPS и т. п.) и вот этот вот трафик передавать через узел чужого дяди?

      Если для обеспечения анонимности, то я уже много раз говорил:

      Анонимность Tor > Анонимность Tor + VPN

      Добавление к Tor прокси, VPN и прочего снижает анонимность, а не увеличивает её.

      Ну вот например вы реализовали свою супер схему VPN → Tor →VPN. Где вы будете брать VPN сервера? Ну допустим вы возьмёте ненадёжные VPN сервера с мыслью, что первый VPN не будет знать куда делаются запросы, а второй VPN не будет знать от кого делаются запросы. Проблема в том, что трафик VPN зашифрован для внешнего наблюдателя, но для сервера VPN этот трафик НЕ зашифрован, если он не зашифрован на других уровнях (HTTPS, например). То есть первый VPN будет знать куда вы делаете запросы. Первый VPN должен обязательно знать IP адрес второго VPN, иначе это просто не будет работать. А второй VPN обязательно будет знать IP адрес первого VPN. Ну и отдельная песня, как это должно идти через сеть Tor, которая не поддерживает никаких нестандартных пакетов — только подключения к сайтам.

  18. Ersin:

    Добрый день.
    Хочу поднять тестовую конфигурацию VPN-TOR-VPN с помощью OpenVPN на двух VPS,один до Тор, другой после и вторую схему ,в которой вместо первого VPS(до Тор) ,сервер будет поднят на домашней системе (Debian),а клиент будет находиться на гостевой системе в VirtualBox.Скажите какие могут быть подводные камни при использовании второй схемы,должно ли все корректно работать?

    Заранее благодарю.

  19. Ersin:

    Понял Вас. Спасибо за разъяснение. Просто на форумах ИБ, для обеспечения анонимности часто советуют эту схему, ссылаясь на то,что второй VPS (VPN) не видит IP первого, который находится за Тор. Скажите пожалуйста  вкратце Анонимность Tor > Анонимность Tor + VPN  какую предполагает физическую реализацию.

    Еще раз спасибо.

    Прошу прощения за дублирование.

    • Alexey:

      вкратце Анонимность Tor > Анонимность Tor + VPN какую предполагает физическую реализацию

      Конечно, лучше вам просить на тех самых форумах, где об этом говорят. А примерно это как-то так:

      1. Ваш компьютер является клиентом первого VPN сервера

      2. Первый VPN сервер является клиентом второго VPN сервера (клиент ОБЯЗАТЕЛЬНО знает IP адрес сервера, иначе быть не может)

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

      В этой теоретической схеме второй VPN будет видеть в качестве IP адреса клиента IP адрес сети Tor. То есть получается, что я был не совсем прав в первом сообщении. Но у меня нет уверенности, что удастся настроить канал между двумя VPN через Tor из-за ограничения сети Tor, которая пересылает только полноценные HTTP соединения.

  20. Alex:

    Большое спасибо за статьи. Очень позновательные.

    Напишите статьи по установке shadowsocks+v2rang.

     

  21. Zamp:

    Спасибо, Алексей, за замечательную статью. Реальная помощь, отлично всё изложено!

  22. Илья:

    Спасибо за такую подробную инструкцию. Теперь можно создавать хоть понимать что делаешь.

    Подскажите, может не совсем по теме. Я создал сервер на Ubuntu 18.04, и вижу, что со стандартных репозиториев качается только openvpn v2.4.4. 

    Если настроить репозиторий с самого сайта openvpn, то можно ставить для Ubuntu 18.04 версию 2.5.2.

    Почему в стандартном репозе не хранится последняя версия openvpn для этой Ubuntu 18.04? Это как-то связано с возможными багами и толкьо 2.4.4 тестировалась для этой убунты? Какую версию openvpn лучше поставить, с точки зрения безопасности и устойчивости сервера?

    • Alexey:

      Приветствую! Давно, лет 15+ назад я только осваивал Linux и писал инструкции в духе «Как установить последнюю версию OpenOffice на Linux Mint/Ubuntu» потому что версии в официальном репозитории были очень старые. С тех пор я много чего узнал и много чему научился, но я до сих пор не знаю, почему сопроводители этих дистрибутивов любят старые версии пакетов.

      По этой причине я перешёл на Arch Linux, это rolling дистрибутив, в котором пакеты обновляются по мере их выхода. Ещё мне нравится Kali Linux, за продуманный подход к дистрибутиву в целом и это тоже rolling дистрибутив.

      Это как-то связано с возможными багами и только 2.4.4 тестировалась для этой убунты?

      Почему пользователи Windows могут поставить самую последнюю версию OpenVPN, а пользователи Ubuntu не могут? И такой же вопрос можно задать про пакеты от LibreOffice до PHP, неужели там какие-то специальные баги для Ubuntu?

      То есть старые версии в репозитории Ubuntu не потому что они особенно хорошие и особенно проверенные, а старые они потому что их не обновили.

      Если интересно, можно посмотреть списки изменений:

      • Илья:

        Алексей, спасибо за ответ, не ожидал такого быстрого отклика!

        Как я понял, разные дистрибутивы по разному интересны в зависимости от предпочтений. Если нужно надежное как топор, то это в сторону Debian, а если новинки и эксперименты - то Ubuntu. Arch Linux - это похоже тоже новинки и эксперименты, однако изначальная его разгруженность позволяет самому выбирать путь, однако для этого нужно больше опыта. Это мне так это видится на сегодняшний день.

        По поводу старых версий в репозиториях Ubuntu. Еще немного поизучал и похоже это выглядит как путь к стабильности и защищенности. Судя по списку изменений http://changelogs.ubuntu.com/changelogs/pool/main/o/openvpn/openvpn_2.4.4-2ubuntu1.5/changelog периодически выпускаются фиксбаги на версию 2.4.4. (до этого я не обращал на это внимание)

        А из плюсов такого подхода - старая версия фиксится, а новые фичи, которые, в свою очередь, имеют потенциальные баги не добавляются - таким образом Ubuntu LTS к концу своего жизненного цикла стремится к Debian.

         

         

        • Alexey:

          Эммм, у меня ощущение, что вы не совсем понимаете, как соотносятся эти дистрибутивы.

          В начале есть Debian. И у него есть три версии:

          • Debian Unstable — новые пакеты добавляются при их выходе
          • Debian Testing — пакеты сюда попадают из Debian Unstable через несколько дней автоматически, если они не ломают систему и вообще компилируются для всех архитектур
          • Debian Stable — рано или поздно testing «замораживается» для неминуемой подготовки к становлению стабильным выпуском, получается Debian Stable.

          Так вот, Ubuntu берёт один из выпусков Debian Stable и… ещё раз его «замораживает». В результате пакеты оказываются устаревшими на чёрт знает сколько лет.

          Примерно так это работает.

          Я пользуюсь Arch Linux (самостоятельный дистрибутив) и Kali Linux (основывается на Debian Testing), то есть как-то прокомментировать, как именно обновляются пакеты в Ubuntu я не могу. Из моего прошлого опыта я помню, что в Ubuntu/Linux Mint пытался установить программу для распознавания текста. Программа не работала, выдавала ошибку. На сайте автора уже была новая версия, выпущенная уже года 2-3 как. Но в репозиториях Ubuntu/Linux Mint была старая, нерабочая версия. «Не может работать — не может сломаться» - видимо этот принцип лежит в основе стабильности и надёжности Ubuntu… Как-то так.

  23. Aser:

    Как можно создат openvn сервер для 70 клиентов на ubuntu 21 ? Зфрфне спс !!!

    • Alexey:

      В этой статье я выкладывал скрипт для автоматизации создания ключей OpenVPN. Давно им не пользовался, поэтому он может в чём-то устарел — если что, пишите ошибки, поправлю.

  24. Илья:

    Kali Linux - для меня как космический корабль с тысячей кнопок. У меня он на виртуалке постольку-поскольку. Как VPS его наверное не стоит ставить. Хотя конечно зависит от задач=)

  25. Иван:

    Доброго дня настроил по вашей инструкции все осталось непонятным одно.

    Есть три машины в одной сети 192.168.1.0

    в этой же сети стоит сервер VPN  192.168.1.16 1194

    могу внутри сети зайти с одной машины на сервер VPN  192.168.1.16 1194 в предварительно созданую папку.

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

    из вне тоже самое.

    Что делаю не так.

  26. Олег:

    Нужна помощь. Два пользователя VPN при подключении выбрасывают друг друга из сессии. Это происходит из за того, что им выдается 1 и тот же ip адрес. С остальными пользователями все нормально. Скорее всего у них на сервере прописана статика. Где, в каком файле на сервере это можно посмотреть/исправить?

     

  27. Алексей:

    Доброго дня! Успешно добрался до пункта:

    cd /etc/easy-rsa

    easyrsa sign-req server servername

    easyrsa sign-req client client1

    При выполнении команд: #easyrsa sign-req server servername и #easyrsa sign-req client client1 получаю ошибки в обоих случаях:

    Notice: Using Easy-RSA configuration from: /etc/easy-rsa/vars * WARNING: Move your vars file to your PKI folder, where it is safe! * Notice: Using SSL: openssl OpenSSL 1.1.1p 21 Jun 2022 Easy-RSA error: Missing expected CA file: index.txt (perhaps you need to run build-ca?) Run without commands for usage and command help. Host: nix | Linux | /bin/bash

    Всё делаю на одной машине. И сервер СА и клиента. Подскажите пожалуйста куда думать дальше и как победить ошибку?

    • Alexey:

      Приветствую! У вас решение ошибки указано в сообщении: «perhaps you need to run build-ca?» - означает «вероятно вам нужно запустить build-ca?».

      В данной инструкции эта команда уже указана.

      Если вы запускали эту команду, но всё равно возникла ошибка, значит команда с build-ca тоже завершилась неудачей и нужно разбираться с этим.

      P.S. здесь инструкция разделена на 2 раздела: 1. Для производных Debian; 2) Для производных Arch Linux. Пожалуйста, указывайте используемый дистрибутив хотя бы того, чтобы в случае желания попробовать воспроизвести ошибку я знал, в каком дистрибутиве это делать.

      • Алексей:

        Спасибо за овет, с ошибкой разобрался, иду дальше)

        пс

        работаю на Арче))

  28. Alex:

    Начал запуск сервера OpenVPN -

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

    Получил ошибку -
    Job for openvpn-server@server.service failed because the control process exited with error code.
    See "systemctl status openvpn-server@server.service" and "journalctl -xeu openvpn-server@server.service" for details.

    Посмотрел параметр -
    systemctl status openvpn-server@server.service

    Результат -
    openvpn-server@server.service - OpenVPN service for server
         Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; disabled; preset: disabled)
         Active: activating (auto-restart) (Result: exit-code) since Thu 2022-07-21 09:06:46 MSK; 1s ago

    Посмотрел последний параметр -
    journalctl -xeu openvpn-server@server.service

    Результат на скриншоте

    Посоветуйте куда дальше двигаться?

    ПС
    работаю на Арче, всё делаю на одной железке
     

     

    • Alexey:

      На скриншоте ошибка «Permission denied» (в доступе отказано) к файлам сертификатов. Не знаю почему, или вы установили права доступа так, что процесс OpenVPN не может прочитать файлы, или что-то ещё.

      В инструкции прежде чем использовать systemctl рекомендуется запускать процесс в командной строке, в этом случае вы увидите все сообщения:

      openvpn /etc/openvpn/server/server.conf

      Если вы подключились к серверу не как root:

      sudo openvpn /etc/openvpn/server/server.conf
      
  29. Alex:

    Доброго дня!:)

    Вопрос по настройке vpn_route.sh. Если у меня весь входящий трафик попадает на шлюз 192.168.1.1/24 (Fedora+iptables) а настройки делаю на отдельной железке (Arch Linux) c ip 192.168.1.77/24 то что мне указать в секции :

    #DEV='eth0'

    DEV='ens3'

    PRIVATE=10.8.0.0/24

     

    я делал всё по инструкции, ничего не менял, всё на одной тачке

  30. Петр:

    Подскажите, пожалуйста, хватит ли самого дешёвого тарифа от игорхост(1cpu/512ram) для VPN 2 компьютера + 1 телефон?

Добавить комментарий для кукумария в Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *