Инструкция по настройке сервера и клиента OpenVPN
Оглавление
1. Обход блокировок с помощью российских VPS
2. Для чего нужен VPN, что он даёт
5. Понятная и рабочая инструкция по настройке OpenVPN
9. Создание ключей OpenVPN в Debian, Ubuntu, Linux Mint, Kali Linux
10. Создание ключей OpenVPN в Arch Linux, BlackArch
11. Размещение файлов ключей на сервере и на клиенте
12.1 Конфигурационный файл OpenVPN
12.2 Тестирование и запуск сервера OpenVPN
12.3 Включение маршрутизации трафика на OpenVPN сервере
13. Настройка клиентов OpenVPN сервера
13.1 Настройка Windows для использования 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 мы всё равно настроем):
- https://ru.wikipedia.org/wiki/Инфраструктура_открытых_ключей
- https://ru.wikipedia.org/wiki/Центр_сертификации
- https://ru.wikipedia.org/wiki/Криптосистема_с_открытым_ключом
- https://ru.wikipedia.org/wiki/Протокол_Диффи_—_Хеллмана
После создания всех сертификатов, нужно настроить непосредственно сервер и клиент. Эта настройка заключается в том, что сгенерированные файлы ключей нужно скопировать в правильное расположение на сервере и клиентах (у каждого из клиентов по своей паре публичный-приватный ключ) и указать путь до файлов с ключами, указать 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, и вы хотите его купить прямо сейчас, то пара ссылок:
- зарубежный (крупный хостер, сервера в разных странах)
- отечественный (дешёвый, работаю с ними 2 года, нареканий нет – на нём я держу SuIP.biz)
Связанные статьи:
- Продвинутое использование OpenVPN (80.7%)
- autovpn2 и autovpn3 - скрипты для автоматического подключения к бесплатным VPN (77.7%)
- Как подключаться к OpenVPN через прокси или Tor (77.7%)
- Типичные ошибки, приводящие к деанонимизации (75.6%)
- Как быстро поменять IP в Linux (73.5%)
- Как в Kali Linux поменять среду рабочего стола без переустановки операционной системы (RANDOM - 0.8%)
А каК тор работет из под впн? Скорость падает? Спасибо за подробную инструкцию
Да, если внутри 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
Так что я уверен что посетители этого ресурса уже автоматически попадают в базу даных СОРМ))) Так что если кто тут пришел что бы творить безпредел в сети — НЕСОВЕТУЮ.
Вот еще про СОРМ кому интересно….) что бы читатели не думал что раз знает пару атак уже стал "хацкером" https://www.youtube.com/watch?v=ow4ZOyWCJMo
это обычные гбшные сказки,сорм сколько отследили преступников?телефоные террористы наносили миллионные убытки,где отдел к?телеграмм показал уровень гб инженеров,а здесь у нас не логинов заходим через впн и тор привет сорму,и спасибо алексею повышаем свой уровень
Да согласен, уровень «русских хакеров выбравших Трампа» на лицо. Такого позора с телеграммом и законом яровой еще нигде небыло.но лучше перебдеть чем недобдеть. Могут и гбшники нанять свободных художников. Оутсорсинг рулит — и дать им сорм в помощь. То что было с телеграммом и дурацким законом о хранении данных показатель как далеко правительство (где кстати и президент неумеет компом пользоваться) далеки от этого всего. …………………………………….. …. в стране где правительство строит электронное государство и неумеет даже винду поставить сами.. это правительство а не гбшники. Те тож любят анонимничить.
Ребят, я разделяю ваше мнение. Но не нужно про политику – просто чтобы разных кремлеботов не набежало и мне не пришлось тратить время на лишнюю модерацию. Кстати, сейчас всё отлично – очень адекватные посетители сайта, задумываюсь, чтобы отключить предварительную модерацию.
И особенно не нужно призывов к противоправным действиям (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
мож я нуб( это мой первый раз))) Может что подскажите?
Приветствую! Поддержка директивы
Была добавлена в OpenVPN начиная с версии 2.4.
Вариантов два:
1) из файла /etc/openvpn/server/server.conf
Удалить директиву
(это не критично)
2) использовать более новую версию Ubuntu/Debian, где в репозиториях уже OpenVPN 2.4
П.с. Просто из любопытства, почему за основу серверной ОС вы берёте Ubuntu, а не берёте Debian-minimal последней версии?
Я спрашиваю, поскольку в минимальных версиях там всё равно в основном нет «супер плюшек Ubuntu», зато есть устаревший софт.
Кстати, в Ubuntu 17.10 уже OpenVPN 2.4.
Ну тут причин две
— первая) я сначало поставил дебиан и не минимальный и что то у меня с при установке сети не пошло с сетевым интерфейсом, сеть установщик никак неловил на VPS…Вот и схватился за то что работает…)
— Вторая — Я нуб))) Всем этим интересным я занялся где то с месяц назад) Тогда же впервые увидил и Linux)))
Огромное спасибо) Дождусь пока ноут зарядиться. А то разрядил его за день…и буду пробывать снова. Повторение мать учения)
Сразу предупрежу о другой возможно ошибке. Не знаю, будет ли эта проблема на минимальной версии Ubuntu, но на настольной Ubuntu порт UDP 53 занят процессом systemd-resolve.
Можно проверить, занят ли этот порт:
Если занят, то используйте любой другой, не занятый – в конфигурационных файлах OpenVPN сервера и клиента это директива port 53.
спасибо, переставил на дебиан9минимал и все пошло…запустился сервак успешно завтра уже буду воевать с клиентами на виндов и попугае. ) Весь день проковырялся… ппц но полезно. Огромное спасибо.
дополнение в debian9 — netstat не работает там надо
lsof -i:номер порта
а далее kill если надо
и еще сори за флуд
с kali или попугая на vps можно зайти по команде в терминале
ssh root@ipсервера
вводим пароль и погнали) может помочь комуто.
Есть еще невероятно простой способ, с помощью графического приложения https://github.com/delfer/ssheller
Код открыт, работает под Windows, macOS и Linux.
Не требуется никакого доп. софта. И сервер настроит, и файл подключения скачает.
Гигантское спасибо за инструкцию, просто выше всяких похвал
Здравствуйте!
Цель — настроить vpn на Linux Mint 19.1. Удобнее не из командной строки запускать, а вручную, кликом на сетевые соединения. При настрйке нужно добавить файлы сертификатов. У меня есть файл с расширением .ovpn (создал на серваке по простой инструкции в несколько команд).
Вопрос. Как можно извлечь из него сертификаты, чтобы потом вручную добавить?
Думаю, вы собираетесь использовать NetworkManager, эта программа прекрасно понимает файлы .ovpn со встроенными сертификатами. Для этого нажмите на иконку Wi-Fi в панели рядом с часами, там выберите Network Settings (на русском наверное будет Настройки сети). В открывшемся окне внизу слева нажмите плюсик (+) и там нажмите Import from file (на русском будет Импортировать из файла).
NetworkManager сам извлечёт сертификаты и сохранит куда нужно.
Если всё равно нужно извлечь сертификаты вручную, то откройте .ovpn файл любым текстовым редактором — вы увидите сертификаты. Сохраните их в отдельные текстовые файлы. Проще говоря, делайте как в этом разделе, но только задом наперёд.
1000 раз извиняюсь, но уж помогите коли можете… Да, я только начинаю изучать все связанное с линуксом, поэтому вопрос "нубский". Дошел я до Easy RSA и на этом все кончилось((
init-pki и build-ca no such file…
куда податься пока не могу понять ибо с OpenVPN Easy-RSA определенно устанавливается(пытался установить отдельно — терминал уверяет что уже все есть). В папке usr/share/easy-rsa существует только build-ca (из требуемых мануалом)
Приветствую! Напишите, какой у вас дистрибутив Linux?
Ещё посмотрите, пожалуйста, на раздел под спойлером «Для старой версии — больше не актуально» — я специально его не удалил, так как для некоторых он может быть всё же актуальным. Возможно, команды из этого раздела у вас сработают.
Да, версию забыл указать, отправил и из за модерации не смог оперативно исправить — пробовал на убунту 18.04LTS (устанавливается easy-RSA 2.2 через apt-get install easy-rsa, хотя как вижу в большинстве мануалов во всю используется 3 версия) так же пробовал на Debian (на VPS'е от digital ocean) эффект прям такой же, хотя это совсем и не удивило. Пробовал с GitHub загрузить третью версию, но пока не разобрался, после работы попробую по вашему совету, спасибо
Спасибо за ответ, с этим разобрался — сработало именно то что больше не актуально) и, к моему стыду, действовал я не от имени root… sudo не спасало(бала куча ругани в терминале на необходимость "source ./vars") и тут под пивом вспомнил про "sudo -i", а дальше с мелкими "перефразированиями" все пошло как надо) неоднократно перечитывал и старался вникнуть во все что написано (чтоб не копипастить не понимая как это работает), возможно из-за этого openvpn и кажется чем то невероятно непростым. Так или иначе надеюсь с клиентскими ключами проблем далее не возникнет(сегодня не возьмусь — пиво дошло до мозга). Спасибо за интересные материалы (не только касаемые openvpn — уже многое прочел) и помощь в решении сего недоразумения!
Алексей,
интернет через wifi вопрос:
можно ли поставить openvpn сервер и клиента на один ноутбук с debian(ubuntu) и с этого ноута пользоваться vpn через wifi
или надо поставить сервер на одни комп а пользоваться vpn с другого.
Спасибо.
Может быть я не совсем понимаю, что вы имеете ввиду, но случай, когда и клиент и сервер на одном компьютере кажется бессмысленным.
В принципе можно сделать так, что клиент на компьютере будет подключён к OpenVPN серверу, который находится на этом же компьютере. НО: OpenVPN сервер будет выходить в Интернет с этого же компьютера, в результате: а) IP адрес будет таким же, как и изначально, б) трафик от OpenVPN сервера, когда он выходит в Интернет, не зашифрован.
По итогу для условного «внешнего наблюдателя» в трафике с этого компьютера абсолютно ничего не поменяется.
Случаи, когда OpenVPN сервер и клиент на одном компьютере имеет смысл: а) тестирование настроек OpenVPN (например, у вас нет VPS сервера, но хочется попробовать свои силы в настройке OpenVPN); б) тестирование виртуальной частной сети с использованием виртуальных компьютеров: можно настроить несколько виртуальных машин VirtualBox на одном компьютере, подключить их к OpenVPN серверу, который также может быть виртуальной машиной, и в этой системе делать разные тесты по маршрутизации и настройки сервисов внутри виртуальной частной сети. Но это уже только для тех, кто чётко понимает для чего ему это. Для подмены своего IP и шифрования выходящего во вне трафика это не поможет.
Alexey,
большое спасибо за ващ подробный ответ.
А как сделать VPN для нескольких клиентов?
Например я поставил себе недавно https://github.com/Nyr/openvpn-install
Но работает только для 1 пользователя
Добрый день.
Как решить проблему с утечкой DNS на debian 9?
Подскажите пожалуста, на 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
"
Ни на одном английском сайте не увидел такого подробного описания. Спасибо
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)
Что это означает? Все по инструкции делаю, слово в слово. Не работает(
Не поленился и настроил новый OpenVPN сервер на одном из своих Debian серверов. Полный цикл — вместе с перенаправлением трафика, подключением клиента и т. д. Всё работает.
При первом запуске OpenVPN сервера, возникла ошибка, т. к. я не поменял имена ключей в файле конфигурации. Но причина проблемы сразу стала понятна — соответствующее сообщение показывается в командной строке, т. к. первый запуск в этой инструкции делается без отсоединения от терминала (процесс не превращается в демон). Если бы вы делали по инструкции, вы тоже запускали бы таким образом и сразу бы увидели причины проблемы. Также в инструкции сказано, какие именно файлы журналов нужно смотреть если возникли проблемы.
Косательно 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, а тут всё расписано как надо.
Приветствую! Спасибо за дополнение. Обычно явное указание bash для запуска файлов .sh требуется если файл не является исполнимым. То есть возможно, что вы пропустили команду из инструкции:
Вы можете проверить, есть ли разрешения на исполнение данного файла:
Должно быть что-то вроде такого (должны быть x):
Ещё одна возможная причина, в начале файла /root/bin/vpn_route.sh пропущен шебанг:
Да Вы правы, я был не вниметелен. Действительно в скрипте пропустил
Добавил строчку и все зароботало. Спасибо.
Добрый день.
Хочу поднять две тестовых конфигураций 1) VPN-TOR-VPN с использованием двух VPS,один до Тор ,другой после с использованием ОpenVPN и 2)такая же схема только
вместо первого VPS поднять сервер на домашней машине с Debian,а в качестве клиента использовать гостевую ОС на VirtualBox.Скажите вторая схема будет корректно работать с ОpenVPN или могут быть подводные камни?Я так понимаю при использовании Тор надо использовать ТСР пакеты.
Заранее благодарю.
ИМХО, какая-то бессмыслица. Если для доступа к локальным ресурсам из одной 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, которая не поддерживает никаких нестандартных пакетов — только подключения к сайтам.
Добрый день.
Хочу поднять тестовую конфигурацию VPN-TOR-VPN с помощью OpenVPN на двух VPS,один до Тор, другой после и вторую схему ,в которой вместо первого VPS(до Тор) ,сервер будет поднят на домашней системе (Debian),а клиент будет находиться на гостевой системе в VirtualBox.Скажите какие могут быть подводные камни при использовании второй схемы,должно ли все корректно работать?
Заранее благодарю.
Понял Вас. Спасибо за разъяснение. Просто на форумах ИБ, для обеспечения анонимности часто советуют эту схему, ссылаясь на то,что второй VPS (VPN) не видит IP первого, который находится за Тор. Скажите пожалуйста вкратце Анонимность Tor > Анонимность Tor + VPN какую предполагает физическую реализацию.
Еще раз спасибо.
Прошу прощения за дублирование.
Конечно, лучше вам просить на тех самых форумах, где об этом говорят. А примерно это как-то так:
1. Ваш компьютер является клиентом первого VPN сервера
2. Первый VPN сервер является клиентом второго VPN сервера (клиент ОБЯЗАТЕЛЬНО знает IP адрес сервера, иначе быть не может)
3. На первом VPN сервере настроены правила маршрутизации для передачи трафика через второй VPN сервер, но при этом выход трафика разрешён только через сеть Tor.
В этой теоретической схеме второй VPN будет видеть в качестве IP адреса клиента IP адрес сети Tor. То есть получается, что я был не совсем прав в первом сообщении. Но у меня нет уверенности, что удастся настроить канал между двумя VPN через Tor из-за ограничения сети Tor, которая пересылает только полноценные HTTP соединения.
Большое спасибо за статьи. Очень позновательные.
Напишите статьи по установке shadowsocks+v2rang.
Приветствую! Что такое v2rang? Никогда не слышал и не гуглится.
Wozmozno on idel widu v2ray, eto plagin dlya shadowsocks
Приветствую! Спасибо за подсказку, посмотрю.
Спасибо, Алексей, за замечательную статью. Реальная помощь, отлично всё изложено!
Спасибо за такую подробную инструкцию. Теперь можно создавать хоть понимать что делаешь.
Подскажите, может не совсем по теме. Я создал сервер на Ubuntu 18.04, и вижу, что со стандартных репозиториев качается только openvpn v2.4.4.
Если настроить репозиторий с самого сайта openvpn, то можно ставить для Ubuntu 18.04 версию 2.5.2.
Почему в стандартном репозе не хранится последняя версия openvpn для этой Ubuntu 18.04? Это как-то связано с возможными багами и толкьо 2.4.4 тестировалась для этой убунты? Какую версию openvpn лучше поставить, с точки зрения безопасности и устойчивости сервера?
Приветствую! Давно, лет 15+ назад я только осваивал Linux и писал инструкции в духе «Как установить последнюю версию OpenOffice на Linux Mint/Ubuntu» потому что версии в официальном репозитории были очень старые. С тех пор я много чего узнал и много чему научился, но я до сих пор не знаю, почему сопроводители этих дистрибутивов любят старые версии пакетов.
По этой причине я перешёл на Arch Linux, это rolling дистрибутив, в котором пакеты обновляются по мере их выхода. Ещё мне нравится Kali Linux, за продуманный подход к дистрибутиву в целом и это тоже rolling дистрибутив.
Почему пользователи 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.
Эммм, у меня ощущение, что вы не совсем понимаете, как соотносятся эти дистрибутивы.
В начале есть Debian. И у него есть три версии:
Так вот, Ubuntu берёт один из выпусков Debian Stable и… ещё раз его «замораживает». В результате пакеты оказываются устаревшими на чёрт знает сколько лет.
Примерно так это работает.
Я пользуюсь Arch Linux (самостоятельный дистрибутив) и Kali Linux (основывается на Debian Testing), то есть как-то прокомментировать, как именно обновляются пакеты в Ubuntu я не могу. Из моего прошлого опыта я помню, что в Ubuntu/Linux Mint пытался установить программу для распознавания текста. Программа не работала, выдавала ошибку. На сайте автора уже была новая версия, выпущенная уже года 2-3 как. Но в репозиториях Ubuntu/Linux Mint была старая, нерабочая версия. «Не может работать — не может сломаться» — видимо этот принцип лежит в основе стабильности и надёжности Ubuntu… Как-то так.
Как можно создат openvn сервер для 70 клиентов на ubuntu 21 ? Зфрфне спс !!!
В этой статье я выкладывал скрипт для автоматизации создания ключей OpenVPN. Давно им не пользовался, поэтому он может в чём-то устарел — если что, пишите ошибки, поправлю.
Kali Linux — для меня как космический корабль с тысячей кнопок. У меня он на виртуалке постольку-поскольку. Как VPS его наверное не стоит ставить. Хотя конечно зависит от задач=)
Доброго дня настроил по вашей инструкции все осталось непонятным одно.
Есть три машины в одной сети 192.168.1.0
в этой же сети стоит сервер VPN 192.168.1.16 1194
могу внутри сети зайти с одной машины на сервер VPN 192.168.1.16 1194 в предварительно созданую папку.
на остальных машинах приваивается один и тот же IP и никуда немогу зайти.
из вне тоже самое.
Что делаю не так.
Нужна помощь. Два пользователя VPN при подключении выбрасывают друг друга из сессии. Это происходит из за того, что им выдается 1 и тот же ip адрес. С остальными пользователями все нормально. Скорее всего у них на сервере прописана статика. Где, в каком файле на сервере это можно посмотреть/исправить?
Доброго дня! Успешно добрался до пункта:
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
Всё делаю на одной машине. И сервер СА и клиента. Подскажите пожалуйста куда думать дальше и как победить ошибку?
Приветствую! У вас решение ошибки указано в сообщении: «perhaps you need to run build-ca?» — означает «вероятно вам нужно запустить build-ca?».
В данной инструкции эта команда уже указана.
Если вы запускали эту команду, но всё равно возникла ошибка, значит команда с build-ca тоже завершилась неудачей и нужно разбираться с этим.
P.S. здесь инструкция разделена на 2 раздела: 1. Для производных Debian; 2) Для производных Arch Linux. Пожалуйста, указывайте используемый дистрибутив хотя бы того, чтобы в случае желания попробовать воспроизвести ошибку я знал, в каком дистрибутиве это делать.
Спасибо за овет, с ошибкой разобрался, иду дальше)
пс
работаю на Арче))
Начал запуск сервера 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
Результат на скриншоте
Посоветуйте куда дальше двигаться?
ПС
работаю на Арче, всё делаю на одной железке
На скриншоте ошибка «Permission denied» (в доступе отказано) к файлам сертификатов. Не знаю почему, или вы установили права доступа так, что процесс OpenVPN не может прочитать файлы, или что-то ещё.
В инструкции прежде чем использовать systemctl рекомендуется запускать процесс в командной строке, в этом случае вы увидите все сообщения:
Если вы подключились к серверу не как root:
Доброго дня!:)
Вопрос по настройке
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
я делал всё по инструкции, ничего не менял, всё на одной тачке
Подскажите, пожалуйста, хватит ли самого дешёвого тарифа от игорхост(1cpu/512ram) для VPN 2 компьютера + 1 телефон?