Как создать свой VPN на VPS сервере. Пошаговый гайд.
В этой статье мы будем разбираться в том, что такое VPN, зачем он нужен и где используется, а также разберем, как установить и настроить свой собственный VPN на очень дешевом VPS сервере.
Для тех, кто больше предпочитает видео формат, сразу держите пошаговый гайд (он вам потребуется в любом случае):
Что такое VPN
Virtual Private Network (сокращенно, VPN) переводится как виртуальная частная сеть. По факту это обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений поверх другой сети (например, Интернет).
Для чего нужен VPN
VPN может применяться для огромного количества абсолютно разных целей. Вот буквально несколько самых распространенных вариантов:
-
Самый известный и популярный — в целях получения доступа к вебсайтам, которые заблокированы в стране, регионе, на территории и т.д. VPN также используют для обеспечения анонимности (чтобы скрыть, какие сайты посещаете, каким браузером пользуетесь, где находитесь и т.д). VPN применяют для удаленной работы. К примеру, работая из дома, вы всегда имеете возможность получить безопасный доступ к документации вашей организации (данные, передаваемые по ВПН, крайне сложно перехватить и расшифровать). Таким же образом можно объединить офисы одной компании, даже если они находятся в разных частях света. В целях безопасности при подключении к Wi-Fi сетям (в кафе, метро и т.д.), чтобы ваши данные не могли перехватить и украсть. Особенно это касается финансовых данных таких, как данные банковской карты и т.д. В качестве инструмента для экономии, к примеру, при покупке авиабилетов (обычно авиакомпании устанавливают разные цены на один и те же билеты в зависимости от геолокации).
Виды VPN сервисов
По принадлежности все VPN сервисы можно разделить на сторонние, которые мы приобретаем платно либо пользуемся условно "бесплатно", а также личные VPN, которые были подняты собственноручно.
В чем опасность сторонних ВПН сервисов, особенно, "бесплатных"? Дело в том, что ВПН сервис априори не может предоставляться бесплатно, так как в таких масштабах это требует колоссальных затрат на хотсинг и содержание, на туннелирование и обработку логов. Помните известную поговорку про бесплатный сыр?
Поэтому зачастую "бесплатные" ВПН зарабатывают на своих пользователях, собирая и передавая/продавая третьим лицам ваши конфиденциальные данные. Это могут быть как просто логи вашего перемещения по просторам интернета, а также ваши личные данные, так и пароли от сайтов, платежная информация и т.д. Платные ВПН сервисы, честно сказать, в этом отношении не намного надежнее. Бывают ситуации, когда хакеры взламывают халатно защищенные ВПН и крадут все данные и логи пользователей.
В видео я приводил много примеров того, как ВПН сервисы зарабатывают на вас, сливая ваши данные и т.д., посмотрите, кому интересно.
Но это одна сторона медали. Другая сторона — это бан самих VPN сервисов на территории определенной страны/региона. Россия в этом отношении похоже пытается выбиться в лидеры. Каждый день все новые и новые ВПН блокируются под предлогом того, что они позволяют иметь доступ к "запрещенному контенту".
Но, что самое забавное, это то, что при всем при этом сами VPN не запрещены к использованию и никакой ответственности за их использование нет и не планируется.
Подытоживая все вышеизложенное, наилучшим, а главное, самым надежных и безопасным вариантом будет установка своего собственного личного VPN.
Какой VPN протокол выбрать
Существует достаточно большое количество различных протоколов VPN: PPTP, SSTP, IPsec, L2TP/IPsec, IKEv2/IPsec, OpenVPN, Outline, Wireguard. В видео я сравнивал три последних (повторяться не буду, кому интересно, смотрите ролик), так как именно они самые популярные, с открытым исходным кодом и при этом легко устанавливаемые.
В итоге мой выбор пал на Wireguard по ряду причин:
-
Легче других. Он настолько мал, что не перегружает даже устаревшие устройства, уменьшая задержки и любые типы сбоев. Быстрее других. Причем не только в отношении процессора, но и в отношении скорости интернета, что позволяет работать практически без потери скорости вашего провайдера. Сложнее взломать. Протокол WireGuard работает только с одной конечной точкой, которой является пользователь. После настройки ваше устройство получит анонимный ключ, который будет зарегистрирован сервером. При заходе в систему этот ключ распознается и в случае успеха данные шифруются и отправляются. Но, если авторизация не проходит, то данные будут сброшены. Безопаснее. Регистрируется лишь очень малая часть данных. Тот, кто попытается войти в вашу систему, столкнется с невыполнимой задачей – узнать, где вы находитесь. И даже если он выяснит, через какой сервер вы подключаетесь, там он не найдет практически никаких логов. Проще развернуть, настроить и использовать. Wireguard существует под разные платформы, в том числе и для iOS и Android систем.
Таким образом, среди всех протоколов криптографии WireGuard предлагает одновременно и скорость и безопасность. Он использует испытанные и подтвержденные разработки из множества других типов крипто-протоколов, экономит ресурсы и обеспечивает сверхнадежную защиту.
Пошаговая инструкция по установке своего VPN
Аренда самого дешевого VPS сервера
В принципе, абсолютно неважно, на каком сервере вы будете разворачивать WireGuard. Он настолько НЕ требовательный к ресурсам, что, по-моему, его можно установить даже на калькулятор 🙂
Поэтому весь вопрос только в цене VPS сервера. Из личных предпочтений могу порекомендовать вот этого хостинг провайдера .
Здесь есть подходящие для WireGuard сервера, различные гео локации, а, главное, ультра консервативные цены, коих я не видел нигде более (с учетом их вечно действующих скидок, можно получить хороший сервер всего за 10 евро в ГОД и бывает даже дешевле).
Настройка подключения к VPS серверу
Для настройки подключения к серверу нам потребуется 2 вещи:
-
Скачать SSH клиент, через который будем заходить на сервер и устанавливать VPN. В видео я рекомендовал использовать Termius . Он очень удобный, работает на любых ОС, а также дает возможность подключаться к серверу даже с телефона, что весьма удобно в некоторых случаях. Кроме этого, там очень просто генерировать SSH ключи и сразу закидывать их на сервер (это нам потребуется для следующего пункта 2). Обязательно запускайте Termius с правами администратора, чтобы не возникало ошибок при дальнейшей установки ВПН. Сделать наше подключение безопасным. Для этого необходимо включить возможность логина на сервер по SSH ключам и одновременно отключить возможность логина по паролю. В видео я пошагово показал, как это сделать. Ниже привозу необходимые для ввода в терминал Termius команды.
Команды для отключения логина на сервер по паролю:
1) Открываем ssh конфиг командой:
В нем листаем в самый низ до строчки PasswordAuthentication. Стираем значение "yes" и прописываем "no".
2) Далее нажимаем Escape и набираем в консоле :wq (НЕ :qa!, в видео допустил ошибку!) и нажимаем Enter, сохраняя таким образом измененные данные.
3) Перезапускаем ssh сервис командой:
Установка VPN на VPS сервер
Устанавливаем инструмент curl:
Подтягиваем скрипт установки с Гитхаба:
Делаем скрипт исполняемым:
Запускаем установку скрипта:
Отвечаем на вопросы так, как показывал в видео.
Если на этапе скачивание или установки скрипта получаете ошибку, что не хватает свободного места на диске, то выполняете следующие команды (если ошибки нет, то вводить их не нужно):
Подключение в VPN
Скачиваем клиент WireGuard на телефон или компьютер отсюда . И подключаемся к нему, как показано в ролике.
Если есть необходимость создать еще один конфигурационный файл, то есть подключить новое устройство к VPN, то в терминал вводим следующую команду:
OpenVPN на VPS от Amazon (updated Март 2018)
Задался целью поднять OpenVPN на том же сервере, где стоит A-Parser. Анонимность не полная, однако, трафик к провайдеру шифруется. Что меня и устраивает.
А еще говорят и показывают, что VPN поможет на новых безлимитных тарифах Билайн и МТС-а обходить запрет на шаринг интернета с телефона по WiFi.
Напомню: у нас стоит бесплатный VPS от Amazon AWS на Windows Server 2012.
Установка OpenVPN сервера
Мануал брал отсюда: https://geektimes.ru/post/197744/. Позволю себе скопировать и добавить некоторые важные моменты, без которых работать ничего не будет.
Скачиваем дистрибутив
На момент написания статьи доступная версия 2.3.2. Качаем отсюда Windows installer 32-х или 64-х битную версию под разрядность вашей операционной системы.
Установка
При установке обязательно отметьте все пункты птичками, на предложение установить драйвер отвечаем утвердительно. В системе появится новый виртуальный сетевой адаптер.
Создание сертификатов и ключей
Когда-то этот пункт меня останавливал, мол ну их эти ключи, пойду поищу что попроще. Но, увы, ничего лучшего не нашел. Итак, переходим в C:\Program files\OpenVPN\easy-rsa, запускаем init-config.bat, появится vars.bat, открываем его в блокноте. Нас интересуют строчки в самом низу, их нужно заполнить как угодно. Например:
Там где написано server не трогаем. Сохранили.
Теперь открываем openssl-1.0.0.cnf и ищем строчку default_days 365, ставим 3650. Это продлит жизнь наших сертификатов на 10 лет. Сохраняем. Далее открываем командную строку в пуск-стандартные-командная строка (на Windows Vista/7/8 от имени администратора), пишем последовательно:
В ответ должно написать два раза «Скопировано файлов: 1». Значит, все окей. В этом же окне набираем:
build-dh
Создаст ключ Диффи-Хельмана.
build-ca
Создаст основной сертификат.
Будут заданы вопросы, просто нажимаем Enter пока не увидите путь C:\Program files\OpenVPN\easy-rsa. Далее набираем:
build-key-server server
На вопросы также жмем Enter, только не торопитесь! В конце будут два вопроса: «Sign the certificate?» и «1 out of 1 certificate requests certified, commit?», на оба вопроса отвечаем Y. Теперь создадим сертификат клиента:
build-key client
Тут нужно быть внимательней, при вопросе Common Name (eg, your name or your server’s hostname) нужно ввести client. В конце также два раза Y. Для каждого клиента нужно создавать новый сертификат, только с другим именем, например, build-key client1 и также указывать его в common name. Если все сделали правильно, можете выдохнуть! Самое сложное позади. В папке C:\Program Files\OpenVPN\easy-rsa\keys забираем: ca.crt, dh1024.pem, server.crt, server.key и кладем их в C:\Program Files\OpenVPN\config.
Создаем конфиги
Переходим в C:\Program Files\OpenVPN\config, создаем текстовой документ, вставляем:
Создаём собственный VPN сервис на базе VPS сервера
Тема обхода блокировок до сих пор является актуальной повесткой дня. Но на написание этой статьи, сподвигла меня несколько другая тема. Сейчас на рынке доступен огромный выбор различных VPN с разной ценовой категорией, плюс часто встречающиеся акции на получение VPN.
Разрабатываются новые технологии для VPN, появляются новые механизмы обхода блокировок типа SmartDNS. Как раз такой услугой воспользовался недавно. Работает хорошо, удобно было добавить DNS в роутер, но адреса обхода очень ограничены. В моем случае поддержка пошла на встречу и вместе мы смогли добавить сервис Кинопоиск от Яндекса. Правда, почти сразу я понял, что хочется большего, хочется самому управлять трафиком. Плюс лично мне не интересны VPN, направляющие весь трафик. Они снижают скорость, не так удобны для просмотра местных сайтов. К тому же мне надо этот трафик пропустить через роутер (в первую очередь для полной работы Яндекс Станции). Сейчас нахожусь в Молдове, здесь сайты не блокируют, но некоторые российские сервисы недоступны.
Какой VPS сервер выбрать и как подключиться к серверу
Само создание OpenVPN сервера займет меньше 5 минут, но сначала мы рассмотрим аренду сервера и подключение к нему.
Аренда сервера VPS
В первую очередь нужно арендовать VPS сервер. VPS сервер – виртуальный выделенный сервер, который соответствует физическому серверу, т.е пользователь получает root-доступ к операционной системе, IP-адресам и т.д.
Тут зависит от ваших целей, стоимости сервера, и того какие именно услуги этот сервер может поддерживать (например, не все хостинг-провайдеры разрешают использование VPN-серверов, поэтому перед заказом услуги предварительно у тех. поддержки узнайте разрешают ли они использование VPN сервера). Если вы хотите получить доступ к российским сайтам, то вы, конечно, можете выбрать европейские сервера, но на мой взгляд, стоит выбрать российские сервера, для получения полного доступа к сервисам. В таком случае (повторюсь, для доступа к российским серверам) рекомендую обратить внимание на следующую статью, в которой были протестированы некоторые российские хостинг-провайдеры: Обзор дешевых VPS-серверов. Я же воспользовался услугами хостинг-провайдера VDS.SH. С учетом того, что не все провайдеры разрешают использование VPS в качестве VPN сервера, перечислю тех, кто точно разрешает:
Если у вас есть достоверная информация о том какие хостинг-провайдеры разрешают использование VPS в качестве VPN-сервера, то поделитесь информацией. Можем добавить в статью.
Для тех, кому нужен доступ к заблокированным в РФ сайтам, нужно брать сервер за пределами России. Это может быть DigitalOcean или linode – из недорогих хостингов.
Если вы собираетесь использовать сервер только в качестве VPN сервера, то вам не нужны дополнительные панели управления, типа ISPmanager. Не заказывайте их.
Подключение к серверу VPS
Выбрав сервер, на электронную почту вы получили необходимые данные для доступа к нему.
Подключаться к серверу будем с помощью ssh клиента PuTTY, а скачивать нужные файлы (клиентские ovpn файлы) с помощью ftp-клиента FileZilla.
Запускаем приложение PuTTY, в графе Host Name вводим ip адрес нашего сервера (эти данные мы получили сразу после регистрации сервера), порт 22.

Далее нажимаем на Open и в появившемся окне нажмите на ДА. Откроется новое окно, в котором нужно ввести имя пользователя и пароль, которые мы получили на электронный адрес. Процесс ввода пароля не будет отображаться, но введя его все равно нажмите на Enter. Теперь мы подключились к нашему серверу.

Для вставки скопированного текста в операционную систем сервера удобно пользоваться нажатием правой кнопкой мыши.
Подключение с помощью FileZilla. Открываем FileZilla: Файл > Менеджер сайтов > Новый сайт > Протокол указываем SFTP, Хост – IP адрес сервера, а также Имя пользователя и пароль, полученные по почте.

Как создать OpenVPN сервер за 5 минут
На самом деле на установку OpenVPN сервера уйдет меньше 5 минут. Установка сервера будет рассматриваться на VPS с операционной системой Ubuntu, для Debian команды идентичны, но скорее всего без sudo (как правило он не предустановлен).
Устанавливаем утилиты, которые нам пригодятся:
Для операционных систем, версии которых не ниже Ubuntu 18.04, Debian 9, CentOS 7. Допускаются данные версии и выше. Скрипт автоматической установки OpenVPN:
Во время установки будет задано несколько вопросов с уже готовым по умолчанию ответом. Можно соглашаться, можно отредактировать и выбрать свой вариант. Протокол соединения, рекомендую, использовать udp. В качестве DNS использую Яндекс DNS (77.88.8.8). Последним вопросом будет предложено задать имя клиентского файла ovpn, который затем будет расположен в директории Root.
Повторный запуск скрипта позволяет:
- Добавить клиентский файл ovpn для подключения
- Анулировать клиентский файл ovpn, выданный ранее.
- Удалить сервер OpenVPN
- Выйти

Для операционных систем, версии которых ниже ранее перечисленных. Выполнять нужно следующий скрипт:
Этот скрипт подойдет для операционных систем не выше, но в том числе, Ubuntu 16.04, Debian 8, Centos 6.
Являясь обладателем роутера ASUS RT-AC59U, который поддерживает клиентские VPN, меня интересовало подключение через роутер. Опытным путем выяснил, что OpenVPN клиент роутера поддерживает подключение, созданное на сервере версии только Ubuntu 16.04. Добавлено: с момента написания статьи, после обновления прошивки роутера, роутер стал поддерживать клиентские конфигурационные файлы ovpn из первого скрипта установки. Проверено на подключении к серверу на базе Ubuntu 18.04.
После установки скрипта VPN уже готов и запущен. Можно с помощью FileZilla скачать файл ovpn и импортировать в нужное устройство. Как импортировать ovpn можно посмотреть на примере статьи: Настройка OpenVPN. Подключение к бесплатным серверам VPN Gate.
По умолчанию через VPN будет проходить весь трафик.
Настройка OpenVPN для фильтрации только заблокированных сайтов
По умолчанию направляется весь трафик через VPN, а мы бы хотели пустить только определенные адреса для их разблокировки, а остальной трафик чтобы оставался без изменений.
Подключившись по PuTTY к серверу, открываем ранее установленный файловый менеджер mc (запускается командой: mc). Переходим к директории: /etc/openvpn/server/

Нас интересует файл server.conf , нажимаем на него и жмём F4 для редактирования, затем номер 1 для выбора редактора nano. Редактирование файла можно сразу запустить командой:
Находим строчку push «redirect-gateway def1 bypass-dhcp» и закомментируем её, добавив перед ней значок #. Данную строчку можно и вовсе удалить. Именно она отвечает за то, чтобы весь трафик шел через VPN.
Добавим строчку duplicate-cn . Она позволит использовать один сертификат на нескольких устройствах.
Затем нам нужно добавить ip адреса, которые будут идти через VPN. Узнать IP адрес сайта можно с помощью Командной строки, командой:
В том случае если адреса заблокированы провайдером и не пингуются, то можно воспользоваться онлайн сервисами, например этим.
Адреса без букв, будут являться адресами IPv4, которые нам нужны. Добавлять адреса в конце файла server.conf нужно следующим образом:
где 5.45.192.0 добавленный нами ip адрес.
Добавив адреса, нажимаем ctrl+O, затем ctrl+ X, для сохранения внесенных изменений и закрытия редактора.
Для пользователей, кому нужны адреса для доступа к российским сервисам, я взял открытую базу сервиса zaborona и немного добавил ip адресов. Предлагаю совместно наполнять эту базу.

Скриншот моего файла server.conf.
Итак, закомментировали или удалили строчку #push «redirect-gateway def1 bypass-dhcp» , добавили IP адреса для обхода блокировки, теперь осталось только перезапустить OpenVPN сервер.
После внесения изменений в server.conf нужно перезапустить VPN сервер. Для Ubuntu 18.04, Debian 9, Centos 7 и выше:
Для Ubuntu 16.04, Debian 8, Centos 6 и ниже:
Существует еще один скрипт для автоматической установки OpenVPN сервера:
Данный скрипт является форком предыдущего скрипта, но с улучшениями безопасности. Кроме того, этот скрипт позволяет добавить пароль для подключения клиентов.
Абсолютно бесплатный VPN с бесплатного VPS
Думаю про VPN слышали все, и многим приходилось им пользоваться. При этом использование готового VPN, которым руководит какой — то неизвестный человек, не является хорошей идей. Тем более в России на данный момент пытаются блокировать, как сами VPN провайдеры (Windscribe, Proton и другие известные сервисы), так и сами протоколы.
VPN через SSH
На данный момент DPI (Deep packet inspection) умеет блокировать не только конкретные ресурсы, но и протоколы обмена информацией. При этом есть протокол, который вряд ли заблокируют — SSH. Блокировка данного протокола невозможна без катастрофических последствий для всей инфраструктуры.
SSH (secure shell) — протокол для удалённого управления операционной системы на основе TCP. Похож на telnet, но все пакеты шифруются, что делает его безопасным.
SSH «из коробки» работает с шифрованием, поэтому мы можем не беспокоиться за безопасность своего трафика.
Существуют разные инструменты для реализации VPN через SSH, я остановлюсь на sshuttle. Преимущества sshuttle:
не требует ничего от сервера (просто запущенный ssh сервер)
Работает везде, в том числе OpenWRT и Windows (должно работать)
Поддерживает тунелирование DNS запросов
Для того, чтобы поднять VPN для себя хватит любого самого дешёвого сервера с белым IP. Но мы хотим всё сделать бесплатно, поэтому отбрасываем этот вариант.
Есть Корейский goorm.io, который позволяет внутри докера запускать свой код на различных языках программирования. По сути repl.it, но goorm.io позволяет официально запускать ssh сервер из их контейнера, а следовательно предоставляет белый IP адрес.
Goorm.io
Проходим простую регистрацию.
Кстати goorm.io пропускает для регистрации временные почты.

Регистрация
Далее переходим в IDE, и создаём новый контейнер.

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

Пресет контейнера выбираем «blank«. Можно ещё выбрать версию убунты в контейнере, правда выбор слишком скромный. Либо 18.04, либо 16.04.
Почему только LTS убунты
Arch is the best!

Жалко, что в пресете c PyTorch не выдаётся GPU.
Остальные настройки оставляем дефолтными. Создаём контейнер и через несколько секунд оказываемся в ide.

IDE
В верхнем меню выбираем Container -> SSH Configuration

Откроется модал в котором будет команда для подключения по SSH.

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

Состояние контейнера сохраняется после его выключения. Поэтому для себя я создал ещё одного пользователя с удобным для меня паролем и подключаюсь через него.
SSHUTTLE
В GitHub репозитории есть команды для установки утилиты практически на любую операционную систему. Здесь приведу только пример для лучшего дистрибутива.
После установки выполним следующую команду:
Вместо IP и PORT подставляете данные от своего контейнера. Сначала вам потребуется ввести пароль от вашего, локального root юзера, а затем пароль от пользователя запущенного контейнера.
Открываем любой определитель IP адреса и видим, то, что IPv4 изменился, а IPv6 — нет

Разработчики sshuttle утверждают, что IPv6 поддерживается, но конкретно у меня — IPv6 не поменялся. К сожалению большинство сайтов определяют регион по IPv6, в том числе и DPI проверяет трафик, идущий через IPv6.
Но это можно исправить.
Возможно есть более удобный способ исправить данную проблему. Моё решение — отключить IPv6 на стороне браузера, т.е. запретить ему использовать IPv6 в принципе.
Покажу, как это сделать на примере Firefox.
Открываем страницу about:config и в поиске вводим: network.dns.disableIPv6
и переключаем его на «true».

После перезапуска браузера видим, что всё работает
Если всё ещё не работает
Если всё ещё не работает, то проверьте, не включен ли у вас QUIC (HTTP/3). QUIC использует UDP, а sshuttle не умеет работать с таким трафиком.
И все сайты заблокированные со стороны РФ, так же работают.
Бенчмарк
Контейнер может работать 24/7, если у вас открыта вкладка в браузере с его ide. А в платной подписке его можно заставить работать всегда при любых условиях.
Но я не думаю, что кому — то нужен VPN, который работает постоянно, даже когда вы не у компьютера.
Для бесплатного VPN скорость достаточная. Важно, что она стабильная.

В самом контейнере около 650 мб/c
Выводы
К сожалению в текущих реалиях, даже платная подписка на хороший VPN не гарантирует, что он будет работать стабильно, так как его могут в любой момент заблокировать.
Меня полностью устраивает способ, который я изложил в этой статье (сейчас я только им и пользуюсь).
Касательно запуска OpenVPN и подобных. У goorm есть возможность пробрасывать порты.

Для теста пробросил 2 http порта
Времени протестировать OpenVPN не было. Он должен запустится и работать, но я не знаю, как к этому отнесётся администрация goorm. В правилах про VPN через из контейнеры я ничего не нашёл.

Написано про прокси, но, как причина для блокировки «высокая нагрузка». Если будет время, то проверю OpenVPN.