Как написать свой vpn сервер

Данная инструкция позволит вам самостоятельно создать свой собственный VPN-сервер и настроить VPN-соединения на iPhone, iPad и Mac. Вы получите доступ к заблокированным в стране ресурсам, а также скроете ваш трафик от злоумышленников, провайдеров и спецслужб.

Последнее обновление статьи: 22 марта 2022 года.

Инструкция была обкатана и проверена сотни раз и гарантированно сработает без каких-либо ошибок, если вы будете ей следовать. Актуальна для всех версий macOS, вплоть до macOS Monterey, а также всех версий iOS, вплоть до iOS 15.3+.

Настройка займет от 15 минут времени, в зависимости от скорости вашей работы.

Оглавление:

  • Преамбула
  • Немного теории: как работает VPN
  • Плюсы использования VPN
  • Недостатки VPN
  • О коммерческих VPN-сервисах: NordVPN, ExpressVPN, Cyberghost, и почему не стоит их использовать
  • В какой стране поднять свой VPN-сервер
  • Выбираем хостера и инструментарий
  • Сама инструкция по созданию собственного VPN-сервера на базе Linux Debian

Преамбула

В январе 2019 года я путешествовал по Азии. Находясь в Гуанчжоу, мне не удалось получить доступ к Google, YouTube и ряду других популярных сервисов. Они в принципе не работают на территории Китая и заблокированы правительством.

Помимо этого, в путешествиях вообще всегда есть определенная проблема с безопасным доступом в Интернет. Не всегда удается купить местную SIM-карту, поэтому приходится подключаться к Wi-Fi-сетям отелей, аэропортов и кафе. Фактически, мы ничего не знаем об этих сетях: кем они были созданы и насколько надежны.

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

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

Использование VPN — оптимальное решение двух обозначенных проблем сразу. Мы получаем доступ к заблокированным в стране ресурсам, а по пути еще и защищаем себя от прослушки.

Реализовать VPN можно двумя способами:

  • Воспользоваться коммерческим VPN-сервисом, например, Nord VPN.
  • Создать свой VPN-сервер.

Для меня использование коммерческого VPN было в принципе неприемлемым решением, и по ходу статьи я объясню почему я категорически не рекомендую пользоваться подобными сервисами. А так как я уже имел навык настройки серверов на Linux, я решил поднять собственный VPN-сервер: размять пальцы, прокачать скилл.

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

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

Инструкция написана для широкого круга читателей, однако, предполагает хотя бы минимальные знания Linux на уровне начального пользователя, который умеет обращаться с базовыми командами консоли (это правда очень и очень просто!). Настройка займет от 15 минут времени, в зависимости от скорости вашей работы.

К сожалению, Windows и Android в данной статье не рассматриваются, поскольку Windows последний раз я пользовался лет 15 назад, а Android — вообще совокупно 2 часа за всю жизнь, поэтому не представляю, что и как как сегодня все устроено в этих ОС. Не исключаю, что подходы, описанные здесь, сработают и для них. Инструкция в первую очередь создана для пользователей iPhone, iPad и Mac.

Сначала будет немного теории для понимания происходящего, желающие же сразу могут перейти к инструкции.

Немного теории: как работает VPN

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

Для простоты понимания можно представить, что основной канал провайдера — это большая труба, а внутри этой трубы вы прокладываете свою собственную, защищенную, отсекая всем доступ в нее. И через эту трубу попадаете на свой сервер и сидите в Интернете как бы со своего сервера: там, где он физически располагается. That’s all.

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

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

Плюсы использования VPN

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

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

  • VPN позволяет скрыть трафик от интернет-провайдера и, соответственно, от спецслужб. В России уже имеются прецеденты посадки людей в тюрьмы за комментарии в соцсетях, а согласно «закону Яровой» весь ваш трафик и сетевая активность записываются сроком на 1 год. Некоторые считают, что законопослушному гражданину бояться вроде бы нечего, однако, на мой взгляд, это существенное упущение в персональной безопасности. Кто знает, как изменится ваша личная ситуация или ситуация в стране. Вполне возможно, что в один прекрасный день к вам придут и предъявят обвинения за посещение неугодного правительству сайта. В конце концов, зачем вам давать кому-то больше информации о себе, если можно дать меньше? Соответственно, с использованием VPN, будет совершенно невозможно установить характер вашей интернет-деятельности.

Однако, не стоит воспринимать VPN как панацею. Тем паче не стоит думать, что с использованием VPN вы можете начать заниматься хакингом, ломать сети и воровать кредитки, как это часто показывают в популярных кинофильмах, а ля Mr.Robot. Во-первых, такая деятельность в принципе незаконна. Во-вторых, вас очень быстро обнаружат, обратившись к хостеру, у которого размещен ваш VPN-сервер, и последний сдаст ваши реальные координаты с потрохами. В-третьих, для этого существуют совершенно другие методы и подходы.

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

Недостатки VPN

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

  • Вы увидите рекламу для страны, в которой расположен ваш VPN-сервер. Какие-то площадки уже научились понимать, что на самом деле вы русскоговорящий пользователь и находитесь совсем не в Германии, однако, YouTube, например, по-прежнему этого не умеет и шпарит видео-рекламу на немецком даже при принудительной установке страны в настройках. Иногда это даже интересно: можно посмотреть какие продукты и услуги сейчас актуальны в других странах.
  • Некоторые сервисы, например, Амедиатека или Авито блокируют доступ с нероссийских IP-адресов, поэтому VPN при их использовании придется на время отключать. Опять же, для Амедиатеки есть хак: достаточно выключить VPN, запустить видео в сервисе и сразу же включить VPN обратно. Видео будет проигрываться дальше.
  • Снизится скорость загрузки сайтов. По замерам это действительно так, однако, на практике падение скорости для обычного пользователя настолько незначительно и усредняется (ведь какие-то ресурсы наоборот начнут загружаться быстрее), что данным недостатком в целом можно пренебречь.

  • В играх, критичных к пингу, а ля CS:GO, VPN придется выключать.

О коммерческих VPN-сервисах: NordVPN, ExpressVPN, Cyberghost, и почему не стоит их использовать

В настоящее время существуют так называемые коммерческие VPN-сервисы — компании, которые предоставляют вам свои VPN-сервера за определенную месячную плату. Например, NordVPN, ExpressVPN, CyberGhost и прочие.

На мой взгляд, использование подобных сервисов, несмотря на их предназначение, еще больше снижает безопасность ваших данных. Все просто: эти компании видят весь ваш трафик. Все, что вы получаете и передаете, на какие сайты ходите, какими сервисами пользуетесь. Конечно, все они заявляют о том, что не хранят клиентские логи и данные, однако, это невозможно проверить на практике. Более того, некоторые VPN-сервисы изначально были созданы именно для того, чтобы воровать ваши данные, и, по-факту, это является их основной «бизнес-моделью».

Кроме того, вы получите большие пинги и существенные просадки в скорости. Ведь на одном VPN-сервере располагаются тысячи таких же клиентов, как и вы.

Таким образом, использование коммерческих VPN-сервисов «для всех» абсурдно само по себе. Лучше уж тогда вообще не использовать никакой VPN, чем сливать свои данные неизвестно кому.

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

В целом: не делайте этого.

В какой стране поднять свой VPN-сервер

Выбирайте страну для размещения VPN-сервера исходя из следующих критериев:

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

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

Выбираем хостера и инструменты

Выбираем хостера

Внимание!

С 8 марта Amazon Web Services (AWS) закрыл регистрацию аккаунтов из России. Услуги же прочих зарубежных хостеров невозможно оплатить из-за неработающих карт Visa/MasterCard.

Рекомендую попробовать хостера VDSina.ru по моей партнерской ссылке, у них есть серверы в Нидерландах. Данная инструкция не зависит от хостера и сработает на любой площадке, просто делайте все по образу и подобию.

Для того, чтобы создать свой VPN-сервер, нам нужно арендовать виртуальный сервер (Virtual Private Server) у одного из хостинг-провайдеров. На него мы установим Linux и затем настроим его.

Наиболее популярные хостинговые компании сегодня:

  • Amazon Web Services (AWS)
  • DigitalOcean
  • Hetzner
  • Vultr
  • Bluehost
  • Arubacloud
  • и прочие, которые вы найдете в бесчисленных топиках на форумах в духе «где поднять свой VPN-сервер»

Для себя я выбрал AWS. В основном, из-за большого количества доступных географических зон для размещения сервера и высокой стабильности. Многие популярные интернет-сервисы работают на базе AWS, арендуя там сервера для своих нужд, например, Facebook. Компания была пионером в облачных технологиях и, по сути, открыла эту отрасль.

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

Lightsail — это упрощенное решение для создания виртуальных серверов, в отличие от своего старшего собрата EC2. Все завернуто в очень простой интерфейс, в котором разберется даже новичок. И для нашей столь нетребовательной к вычислительным ресурсам задаче как VPN-сервер, AWS Lightsail подходит лучше всего.

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

Сколько стоит

Использование VPN-сервера на базе AWS Lightsail будет обходиться вам в $3,5/мес.. За эти деньги вы получаете машину с 512 Мб оперативной памяти. Подобная конфигурация легко справляется с обработкой VPN-трафика с трех устройств, даже если вы нагружаете их по самые помидоры. В комплекте идет 1TB трафика в месяц, сверх нормы — за деньги. Первые три месяца у AWS будут бесплатными.

Почему Debian, а не Ubuntu

Поднимать VPN-сервер мы будем на основе операционной системы Linux Debian, а не Ubuntu, которая довольно часто фигурирует в подобных инструкциях.

Лично я не люблю Ubuntu с самого ее появления из-за какой-то умозрительной нестабильности и общей аляповатости. К тому же, Ubuntu изначально создавалась именно как пользовательская система, а не серверная. Debian же надежен и стабилен как слон. В моей компании мы используем Debian во всех интернет-проектах последние 11 лет и никогда не имели с ним никаких проблем, получая великолепные быстродействие и надежность. С Ubuntu же вечно что-то происходит.

Протоколы VPN-соединения: почему IPsec IKEv2, а не Open VPN

Сегодня существуют разные протоколы VPN-соединения, их детальный разбор выходит за рамки этой статьи. Среди них наиболее популярны IPsec IKEv2 и OpenVPN.

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

OpenVPN требует установки своего приложения, которое всегда должно быть запущено на устройствах, что, во-первых, неудобно в использовании, а во-вторых, дополнительно жрет процессор и как следствие быстрее расходует батарею iPhone, iPad и, в меньшей степени, Mac.

IKEv2 же вшит в iOS и macOS и является для этих ОС нативным, не требуя установки никакого дополнительного ПО. Так же, считается, что IKEv2 гораздо быстрее и безопасней, чем OpenVPN.

В качестве серверной части мы будем использовать strongSwan — популярный VPN-сервер для Linux.

Готовые скрипты для развертывания VPN-сервера: Algo, Streisand и почему не стоит их использовать

Сегодня существуют готовые решения для развертывания своего VPN-сервера на платформе Linux, например, скрипт Algo (для IKEv2) или Streisand (для OpenVPN), которые нужно просто скачать, распаковать и запустить на сервере. Данные скрипты сами установят и настроят все необходимые пакеты и на выходе предоставят для вас работающий VPN-сервер.

Streisand нам не подходит в принципе, поскольку заточен под OpenVPN. Что же касается Algo, то пробежавшись по диагонали, я увидел, что данный скрипт устанавливает много лишних пакетов, без которых вполне можно обойтись, а также каких-то подозрительных пакетов, неизвестно кем созданных и кем проверенных. Кроме того, Algo устанавливается только на Ubuntu, что нам, опять же, не подходит.

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

  • AWS Lightsail в качестве виртуального сервера
  • IKEv2 как протокол VPN
  • Linux Debian в качестве серверной ОС
  • strongSwan в качестве VPN-сервера
  • никаких готовых скриптов, всё настроим руками.

Итак, с теоретической частью покончено, приступаем к созданию своего VPN-сервера.

Инструкция по созданию собственного VPN-сервера на базе Linux Debian

Внимание!

С 8 марта Amazon Web Services (AWS) закрыл регистрацию аккаунтов из России. Услуги же прочих зарубежных хостеров невозможно оплатить из-за неработающих карт Visa/MasterCard.

Рекомендую попробовать хостера VDSina.ru по моей партнерской ссылке, у них есть серверы в Нидерландах. Данная инструкция не зависит от хостера и сработает на любой площадке, просто делайте все по образу и подобию.

Регистрируемся в Amazon AWS и подключаемся к серверу

Процесс регистрации в AWS очень прост и вы пройдете его самостоятельно. После регистрации перейдите в Lightsail, выберите гео-зону в которой вы хотите поднять свой VPN-сервер. Создайте новый инстанс, выберите «OS Only» и операционную систему Debian самой высокой версии:

Нам подойдет простейшая машина с 512 Мб оперативной памяти:

Чтобы закрепить за сервером статический IP-адрес и он не менялся после каждой перезагрузки, перейдем в «Networking» и выделим себе Static IP. Назначим его на созданный нами инстанс:

Осталось скачать уже созданный самим Lightsail дефолтный приватный ключ для доступа по SSH. Он находится в разделе «Account > SSH keys»:

Подключаемся

Открываем Terminal в macOS.

В первую очередь, чтобы избежать кое-какой известной проблемы терминала с локалью, зайдем в настройки Терминала, перейдем в Profiles и снимем галочку с “Set locale environment variables on startup”:

Закроем терминал с помощью Cmd+Q и запустим его снова.

Ограничим права нашему скачанному с Lightsail ключу, иначе macOS не позволит его использовать. Исхожу из того, что ключ вы скачали через Safari в папку Downloads. Если нет — подставьте свой путь до папки с ключем.

cd ~/Downloads/
chmod 600 YOUR_DOWNLOADED_KEY.pem

Совет: введите несколько первых символов имени файла ключа и нажмите Tab, терминал подставит остальное автоматически.

И подключимся к нашей Lightsail-машине, вписав вместо YOUR_LIGHTSAIL_IP ее внешний статический IP-адрес, который мы создали в разделе Static IP, а вместо YOURD_DOWNLOADED_KEY имя вашего ключа:

Нас спросят:


Are you sure you want to continue connecting (yes/no/[fingerprint])?

Напишем “Yes” и нажмем Enter.

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

Обновим Debian

Все манипуляции будем осуществлять из-под пользователя root. Поехали:

sudo su

Обновим индекс пакетов в репозиториях, возможно, есть обновления:

apt-get update

А затем установим эти обновления:

apt-get upgrade

Установим strongSwan

apt-get install strongswan

И набор стандартных плагинов:

apt-get install libstrongswan-standard-plugins

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

Создаем сертификаты доступа

Мы будем использовать самозаверенные сертификаты, поскольку VPN-сервером планируем пользоваться только мы. Для того чтобы создать сертификаты, нам потребуется пакет strongswan-pki. Установим его:

apt-get install strongswan-pki

Теперь нам нужно создать корневой сертификат, он же “CA” (Certificate Authority), который выпустит нам все остальные сертификаты. Создадим его в файле ca.pem.

В следующих двух блоках вместо YOUR_SERVER_IP подставляйте внешний IP-адрес машины в AWS Lightsail. Команды вводятся одна за другой:

cd /etc/ipsec.d
ipsec pki —gen —type rsa —size 4096 —outform pem > private/ca.pem
ipsec pki —self —ca —lifetime 3650 —in private/ca.pem
—type rsa —digest sha256
—dn «CN=YOUR_SERVER_IP»
—outform pem > cacerts/ca.pem

Далее создадим сертификат для самого VPN-сервера в файле debian.pem:

ipsec pki —gen —type rsa —size 4096 —outform pem > private/debian.pem
ipsec pki —pub —in private/debian.pem —type rsa |
ipsec pki —issue —lifetime 3650 —digest sha256
—cacert cacerts/ca.pem —cakey private/ca.pem
—dn «CN=YOUR_SERVER_IP»
—san YOUR_SERVER_IP
—flag serverAuth —outform pem > certs/debian.pem

И сертификат для самих устройств в файле me.pem. В следующем блоке ничего (в том числе в “CN=me”) менять не нужно:

ipsec pki —gen —type rsa —size 4096 —outform pem > private/me.pem
ipsec pki —pub —in private/me.pem —type rsa |
ipsec pki —issue —lifetime 3650 —digest sha256
—cacert cacerts/ca.pem —cakey private/ca.pem
—dn «CN=me» —san me
—flag clientAuth
—outform pem > certs/me.pem

Для надежности удалим файл ca.pem, он нам больше не потребуется:

rm /etc/ipsec.d/private/ca.pem

Создание сертификатов завершено.

Настроим strongSwan

Очистим дефолтный конфиг strongSwan командой:

> /etc/ipsec.conf

И создадим свой в текстовом редакторе nano:

nano /etc/ipsec.conf

Вставьте в него данный текст, заменив YOUR_SERVER_IP на внешний IP-адрес машины в AWS Lightsail. Больше в конфиге ничего менять не нужно.

config setup
uniqueids=never
charondebug=»ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2″

conn %default
keyexchange=ikev2
ike=aes128gcm16-sha2_256-prfsha256-ecp256!
esp=aes128gcm16-sha2_256-ecp256!
fragmentation=yes
rekey=no
compress=yes
dpdaction=clear
left=%any
leftauth=pubkey
leftsourceip=YOUR_SERVER_IP
leftid=YOUR_SERVER_IP
leftcert=debian.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightauth=pubkey
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4

conn ikev2-pubkey
auto=add

Внимание! strongSwan требователен к отступам в конфиге, поэтому убедитесь, что параметры каждого раздела конфига отбиты через Tab, как это показано на примере, или хотя бы через пробел, иначе strongSwan не запустится.

Сохраним файл с помощью Ctrl+X и пойдем дальше.

Добавим в файл ipsec.secrets, который является хранилищем ссылок на сертификаты и ключи аутентификации, указатель на наш сертификат сервера:

nano /etc/ipsec.secrets

Вставим в этот файл последней строкой указатель на наш сертификат сервера (да, прям вот так, начиная с двоеточия):

: RSA debian.pem

На этом настройка Strongswan завершена, можно рестартнуть службу:

ipsec restart

Если все хорошо, то сервер запустится:


Starting strongSwan 5.7.2 IPsec [starter]…

Если упадет в ошибку, то можно посмотреть, что именно произошло, почитав логи. Команда выведет 50 последних строк лога:

tail -n 50 > /var/log/syslog

Настроим сетевые параметры ядра

Теперь нам необходимо внести некоторые изменения в файл /etc/sysctl.conf:

nano /etc/sysctl.conf

Через Ctrl+W найдем в файле следующие переменные и внесем в них изменения:

#Раскомментируем (уберем решетку перед параметром) данный параметр, чтобы включить переадресацию пакетов
net.ipv4.ip_forward=1

#Раскомментируем данный параметр, чтобы предотвратить MITM-атаки
net.ipv4.conf.all.accept_redirects = 0

#Раскомментируем данный параметр, чтобы запретить отправку ICMP-редиректов
net.ipv4.conf.all.send_redirects = 0

#В любом месте файла на новой строке добавьте этот параметр, запретив поиск PMTU
net.ipv4.ip_no_pmtu_disc = 1

Сохраним файл через Ctrl+X и подгрузим новые значения:

sysctl -p

Настройка сетевых параметров завершена.

Настроим iptables

iptables — это утилита, которая управляет встроенным в Linux файрволом netfilter. Для того, чтобы сохранить правила iptables в файле и подгружать их при каждом запуске системы, установим пакет iptables-persistent:

apt-get install iptables-persistent

После установки нас спросят, сохранить ли текущие правила IPv4 и IPv6. Ответим «Нет», так как у нас новая система, и нечего сохранять.

Перейдем к формированию правил iptables. На всякий пожарный, очистим все цепочки:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -Z

Разрешим соединения по SSH на 22 порту, чтобы не потерять доступ к машине:

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp —dport 22 -j ACCEPT

Разрешим соединения на loopback-интерфейсе:

iptables -A INPUT -i lo -j ACCEPT

Теперь разрешим входящие соединения на UDP-портах 500 и 4500:

iptables -A INPUT -p udp —dport 500 -j ACCEPT
iptables -A INPUT -p udp —dport 4500 -j ACCEPT

Разрешим переадресацию ESP-трафика:

iptables -A FORWARD —match policy —pol ipsec —dir in —proto esp -s 10.10.10.0/24 -j ACCEPT
iptables -A FORWARD —match policy —pol ipsec —dir out —proto esp -d 10.10.10.0/24 -j ACCEPT

Настроим маскирование трафика, так как наш VPN-сервер, по сути, выступает как шлюз между Интернетом и VPN-клиентами:

iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy —pol ipsec —dir out -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

Настроим максимальный размер сегмента пакетов:

iptables -t mangle -A FORWARD —match policy —pol ipsec —dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp —tcp-flags SYN,RST SYN -m tcpmss —mss 1361:1536 -j TCPMSS —set-mss 1360

Запретим все прочие соединения к серверу:

iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

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

netfilter-persistent save
netfilter-persistent reload

Настройка iptables завершена.

Перезагрузим машину:

reboot

И посмотрим работают ли правила iptables:

sudo su
iptables -S


[email protected]
X.XX.XX:/home/admin# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state —state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp —dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp -m udp —dport 500 -j ACCEPT
-A INPUT -p udp -m udp —dport 4500 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -s 10.10.10.0/24 -m policy —dir in —pol ipsec —proto esp -j ACCEPT
-A FORWARD -d 10.10.10.0/24 -m policy —dir out —pol ipsec —proto esp -j ACCEPT
-A FORWARD -j DROP

Да, всё работает.

Работает ли strongSwan:

ipsec statusall


[email protected]:/home/admin# ipsec statusall
Status of IKE charon daemon (strongSwan 5.7.2, Linux 4.19.0-14-amd64, x86_64):
uptime: 71 seconds, since Mar 05 23:22:16 2022

Да, всё работает.

Разрешаем соединения в файрволе Lightsail

AWS Lightsail использует также и свой файрвол для защиты виртуальных машин. Если в нем не разрешить соединения на UDP-портах 500 и 4500, к VPN-серверу нельзя будет подключиться. Выберем наш инстанс в Lightsail, перейдем в «Networking», добавим эти порты и по пути удалим ненужный нам 80-й порт:

Удалите 80-й порт так же и в разделе IPv6 firewall, ниже по странице.

Настройка файрвола Lightsail завершена.

Создаем .mobileconfig для iPhone, iPad и Mac

Мы будем использовать один и тот же VPN-профайл .mobileconfig для всех наших устройств.

Конфиг, который мы сделаем, устроен таким образом, чтобы инициировать соединение “On Demand”. Это означает, что при попытке любой службы или приложения выйти в Интернет, VPN-соединение будет всегда устанавливаться принудительно и автоматически. Таким образом, удастся избежать ситуации, когда вы забыли установить VPN-соединение, например, после перезагрузки девайса, а трафик в итоге пошел через провайдера, что нам совсем не нужно.

Скачаем скрипт, который сгенерирует для нас данный конфиг:

wget https://gist.githubusercontent.com/borisovonline/955b7c583c049464c878bbe43329a521/raw/b2d9dba73da633fcfcca6a03d877517c5b2d9485/mobileconfig.sh

Для того, чтобы скрипт отработал, нам потребуется пакет zsh, установим его:

apt-get install zsh

Отредактируем название сервера по вкусу, а также пропишем внешний IP-адрес машины Lightsail:

nano mobileconfig.sh

SERVER=»AWS Frankfurt»
FQDN=»YOUR_LIGHTSAIL_IP»

Запустим скрипт и на выходе получим готовый файл iphone.mobileconfig:

chmod u+x mobileconfig.sh
./mobileconfig.sh > iphone.mobileconfig

Заберите этот файл с сервера, подключившись по SFTP, например, с помощью Cyberduck. Для подключения используйте тот же ключ от Lightsail, внешний IP-адрес сервера и имя пользователя admin.

Отправьте скачанный файл iphone.mobileconfig на все ваши устройства через Airdrop. Подтвердите на устройствах установку конфигурации.

В macOS профайл устанавливается из System Preferences > Profiles. В iOS он появится в Settings > Profile Downloaded:

Готово! Соединения с VPN-сервером установятся автоматически.

Если захочется временно отключить VPN, чтобы получить доступ, например, к Авито, в macOS зайдите в System Preferences > Network, выберите VPN-соединение и снимите галочку “Connect on Demand”, нажмите Apply.

В iOS: Settings > General > VPN & Device Management > VPN > нажмите на иконку “i” у установленной VPN конфигурации и выключите тумблер “Connect On Demand”. Чтобы вернуться обратно к автоматическому принудительному установлению соединений, соответственно, верните эти галки/тумблеры обратно:

Кстати, в macOS так же стоит поставить галку “Show VPN status in menu bar”. Будет удобно быстро чекать активно ли сейчас VPN-соединение.

Приберемся за собой:

rm mobileconfig.sh
rm iphone.mobileconfig

Если соединения VPN успешно установились, но нет интернета

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

Выполните команду ip addr или ifconfig, чтобы отобразить ваши сетевые интерфейсы:

И если вместо eth0 вы увидите что-то типа ens3, enp0s5 и т.п, как на скриншоте выше, то просто замените через

nano /etc/iptables/rules.v4

название eth0 в строках

-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy —dir out —pol ipsec -j ACCEPT

-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

-A FORWARD -s 10.10.10.0/24 -o eth0 -p tcp -m policy —dir in —pol ipsec -m tcp —tcp-flags SYN,RST SYN -m tcpmss —mss 1361:1536 -j TCPMSS —set-mss 1360

на ваше название интерфейса. Перезагрузите сервер. Интернет заработает.

Прокачаем безопасность SSH (необязательный пункт)

Наш VPN-сервер уже работает и неплохо защищен, однако, я предлагаю еще чуток прокачать безопасность SSH, не вдаваясь в дебри.

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

Вы можете выбрать любой порт по вкусу, начиная с 1024, однако, я рекомендую поискать такой порт, который не был замечен в использовании вирусами, троянами, а также не используется какими-либо известными сервисами, программным обеспечением или производителями оборудования. Найдите себе такой «чистый» порт на SpeedGuide или adminsubnet.

В нашем примере мы будем использовать порт 45323.

Внимание! Не перезапускайте службы SSH и iptables и не перезагружайте машину, пока не пройдете данный раздел до конца, иначе вы потеряете доступ к машине!

Добавим новый 45323 TCP-порт в Lightsail:

Теперь настроим сам SSH:

nano /etc/ssh/sshd_config

#Раскомментируем и пропишем новый порт
Port 45323

#Раскомментируем и запретим попытки соединения с пустым паролем
PermitEmptyPasswords no

#Раскомментируем и настроим автоматический разрыв соединения при бездействии через 360 секунд. Это будет полезно, если вы забыли, что у вас на экране осталась активная сессия и отошли от компьютера. Сервер автоматически разорвет SSH-соединение через 6 минут.
ClientAliveInterval 360
ClientAliveCountMax 0

Теперь обновим информацию в правилах iptables и заменим старый порт SSH на новый:

nano /etc/iptables/rules.v4

Заменим «22» в строке

-A INPUT -p tcp -m tcp —dport 22 -j ACCEPT

на «45323»:

-A INPUT -p tcp -m tcp —dport 45323 -j ACCEPT

Сохраним файл через Ctrl+X и перезапустим машину:

reboot

После перезагрузки сервера проверьте соединение по SSH, добавив флаг «-p» и новый порт:

Всё должно работать.

Не забудьте удалить старый порт 22 в настройках файрвола Lightsail.

Заключение

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

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

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

Делитесь инструкцией с друзьями, распространяйте в соцсетях.

Если вы нашли какие-либо ошибки в статье, пожалуйста, сообщите об этом.

Спасибо!

Дополнительные материалы к статье, которые могут быть интересны:

  • Ассиметричное шифрование. Как это работает?

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

Хостинг

Первым делом стоял вопрос о хостинге, ведь крупный на подобие Amazon или Google с русских карт не оплатить.

Нашли русских ребят из VDSina, у них есть сервера в Москве и в Нидерландах, второй вариант нам и нужен.

А баланс можно пополнить с помощью российской банковской карты, Qiwi, ЮМoney.

Настраиваем сервер по следующим параметрам:

OC: CentOS 7

Тип сервера: Стандартные серверы

Тариф: 6,6 рублей в день (примерно 200 в месяц) при трафике в 32 ТБ

Локация сервера: Амстердам

Автоматическая резервная копия: отключить

После настройки в разделе с поддержкой придёт тикет, с информацией о сервере (IP-адрес и пароль)

Предварительно не забудьте пополнить баланс.

Outline

С официального сайта скачиваем Outline Manager а так же клиенты под ваши устройства (Android, iOS, Windows, MacOS)

Открываем Outline Manager и выбираем пункт «Настройте Outline где угодно». Затем открываем Терминал (в macOS он встроен) , для Windows качайте Putty для ssh-подключения или если у вас Windows 10 и выше, через командную строку с правами администратора.

Обновляем сервер:

2. Соглашаемся с подключением, пишем команду yes и нажимаем enter

3. Вводим пароль из тикета и нажимаем enter

4. Обновляем сервер: yum update и нажимаем enter

5. Соглашаемся: вводим y нажимаем enter

6. Снова соглашаемся с изменениями: вводим y нажимаем enter

Устанавливаем Docker:

1. Вводим команду: wget -O — https://get.docker.com | bash и нажимаем enter

1. Запускам docker, вводим команду: systemctl enable docker && systemctl start docker

Устанавливаем Outline:

1. Копируем из Outline команду и вставляем её в Терминал:

sudo bash -c «$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)»

2. Нажимаем enter

3. Копируем ключ, выделенный зелёным текстом в Outline

4. Ставим Iptables: sudo yum install iptables и жмём enter

5. Завершаем шаг и и запускаем установку сервисов командой: sudo yum -y install iptables-services и жмём enter

6. Вводим команду: iptables -L -v -n и жмём enter

7. Сбрасываем параметры командой: sudo iptables -F

Разрешаем входящие и исходящие подключения:

1. sudo iptables -A INPUT -i lo -j ACCEPT и жмём enter

2. sudo iptables -A OUTPUT -o lo -j ACCEPT и жмём enter

3. sudo iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT и жмём enter

После этого заходим в Outline Manager и подключаемся к серверу. Если вы всё сделали правильно, то у вас откроется окно, в котором вы можете создать ключи для подключения.

Как подключить Outline VPN на другие устройства

Вам необходимо скачать клиент VPN-сервиса на официальном сайте (в том числе для iPhone). После скопировать на компьютере в Outline Manager ключ (указан на скриншоте) и отправить его на другое устройство любым удобным способом. После чего зайти в программу и вставить ключ.

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

Информацию взял со статьи, с разрешения автора.

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

Что для этого потребуется: 4 этапа

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

  1. Нужен удалённый компьютер, на который будет устанавливаться специальное ПО. Проще всего арендовать его в одном из крупных и надёжных сервисов — далее в статье я расскажу о таких.
  2. Надо подключиться к серверу по SSH-протоколу с помощью программы Termius и установить на него WireGuard — софт для настройки VPN-соединения.
  3. После установки VPN надо его правильно сконфигурировать.
  4. После настройки WireGuard останется лишь инсталлировать приложение на клиентское устройство и присоединиться к настроенному серверу.

Этап №1. Аренда сервера (выбираем с оплатой криптовалютой)

Поднимать VPN будем на удалённом сервере. Существует огромное количество сервисов, предоставляющих VPS (Virtual Private Server) по адекватным ценам. Ниже представлены популярные поставщики услуг:

  • AWS: первые 12 месяцев бесплатно, затем 10 долларов в месяц, 15 ТБ трафика;
  • Hetzner: 3 евро в месяц, 20 ТБ трафика, требуется подтверждение личности по документу;
  • Vultr: 3,5 доллара в месяц (только при выборе VPS в США), 500 ГБ трафика;
  • Pulseheberg: 4 евро в месяц;
  • DigitalOcean: 5 долларов в месяц, 1 ТБ трафика.

К сожалению, сейчас их невозможно оплатить российскими картами, поэтому в этой статье я буду использовать и рекомендовать сервис СrownСloud. Его прелесть в том, что оплатить сервер можно с помощью криптовалюты (только BTC), которая доступна к использованию даже пользователям из России.

Самый дешёвый сервер можно арендовать за 2,5 доллара в месяц, правда, оплатить придётся на весь год — 30 долларов в сумме. За эту сумму вы получите 512 ГБ трафика ежемесячно. Оплата помесячно доступна для более дорогих решений — от 4 долларов в месяц за 1 ТБ трафика. Можно купить этот план для проверки, а затем сменить на более дешёвый, заплатив сразу за весь год.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Для тех, кто уже знает, как настраивать WireGuard, я советую взять KVM-сервер, ибо установка на нём будет проще и быстрее. В этом же материале я покажу на примере OpenVZ VPS.

На главной странице выбираем раздел Classic OpenVZ Plans.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Выбираем подходящий план — достаточно и самого дешёвого, но, как я сказал ранее, его придётся оплатить сразу на год. Поэтому для примера я выбрал вариант за 4 доллара в месяц. Переходим к оплате, кликнув на расположение сервера справа — США или Германия.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

На этом этапе выберите операционную систему Ubuntu 20.04 x86_64 и перейдите к оплате, нажав кнопку Continue и затем Checkout.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Далее придется заполнить регистрационную форму — можете ввести туда абсолютно любые данные. Главное, чтобы они выглядели достоверно. Только укажите свою почту, к которой имеете доступ, а также запомните пароль. В самом низу выберите способ оплаты Bit-pay (Bitcoin) и поставьте флаг около условий обслуживания. Нажмите Complete Order и перейдите к окну оплаты.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Откроется окно сервиса BitPay. Если потребуется регистрация в этом сервисе — сделайте это, она занимает несколько минут и не требует ввода личных данных. Далее выберите подходящий кошелёк, на котором хранятся ваши цифровые активы. Я рекомендую использовать Electrum Wallet. Показывать пример буду также на нём, предполагая, что вы уже создали его и храните на нём средства.

Когда появится сумма, необходимая к оплате, нажмите «Пополнить кошелёк». Откроется приложение кошелька и сразу после этого — окно транзакции с заполненными данными.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Обязательно зайдите в «Инструменты» > «Настройки» и временно отключите пункт «Использовать возможность замены комиссии» или RBF (Replace-by-fee). Затем в поле «Комиссия» введите число, которое было указано на сайте (черная плашка внизу с надписью Required Fee Rate на изображении выше). Нажмите «Отправка», чтобы отправить транзакцию сразу. Возможно, потребуется ввести пароль от вашего кошелька. 

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Как только транзакция попадёт в сеть, сервис BitPay сообщит об успешной оплате. Вернитесь на CrownCloud.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

На открывшейся странице выберите вкладку Services > My services. Откроется список приобретённых серверов. Сразу после оплаты вы увидите статус Pending — это из-за того, что транзакция попала в сеть, но еще не подтвердилась. После получения первого подтверждения VPS станет активным. Этот процесс занимает не более 20 минут.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Как только удалённая машина станет активна, кликните на неё — вы увидите её IP-адрес, по которому будете подключаться к ней в следующем пункте.

Нажмите на вкладку Hello, <ваш юзернейм>, выберите Email History. Найдите сообщение с темой CrownCloud — New VPS Information и откройте его. Там вы увидите пароль от root-пользователя сервера и данные для панели управления VPS. Запомните их.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Сразу же перейдите в панель управления. Введите пароль и логин, которые получили выше, и выберите Manage под нужным сервером. Нажмите на панель Settings и кликните на кнопку Re-enable TUN/TAP. Подождите 2-3 минуты и переходите к следующему шагу настройки.

Этап №2. Настройка сервера и подключение

Для настройки VPS надо подключиться к нему по SSH-протоколу. Рекомендую использовать для этого программу Termius. Она удобная, простая в использовании и кроссплатформенная.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Этап №2. Настройка сервера и подключение. 1

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Скачав её с официального сайта и установив, запускаем и нажимаем кнопку New host. В поле Address вводим IP-адрес выданного сервера — скопировали его ранее. В строке Username пишем root, в поле пароля вводим то, что сохранили ранее из электронного письма внутри сервиса CrownCloud. Сохраняем всё кнопкой Save. Теперь можно подключиться к серверу, дважды кликнув на созданный хост.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Этап №2. Настройка сервера и подключение. 5

Прежде чем выполнять какие-либо действия, я обновляю список доступных к установке пакетов и сами пакеты. Для этого выполняем команду, написав её и нажав Enter:

apt update && apt upgrade -y

Переходим к установке и настройке самого VPN-сервиса.

Этап №3. Установка VPN

На сегодняшний день существует несколько разных протоколов VPN:

  • PPTP — старый протокол, быстрый, но небезопасный, поэтому подойдёт только для просмотра контента, недоступного в некоторых регионах;
  • L2TP/IPSec — безопасен, прост в настройке, но скорость не самая высокая и может блокироваться файрволом;
  • SSTP — проприетарный протокол от Microsoft, который не поддерживается в GNU/Linux нативно;
  • IKEv2 — весьма быстр, стабилен и безопасен, но поддерживается не на всех устройствах;
  • SoftEther — свежий протокол, не поддерживается нативно в системах, но обеспечивает качественное шифрование с высокой скоростью;
  • OpenVPN — быстрый и очень безопасный, но непростой в конфигурации и требует установки специальных приложений;
  • WireGuard — активно развивающийся протокол, внедрена поддержка в ядро Linux, высокопроизводительный и надёжный, прост в развёртывании, хотя и требует установки дополнительных клиентских программ.

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

Для KVM-серверов достаточно установить его командой sudo apt install wireguard -y. Но так как я рассматриваю OpenVZ-решение, то инструкция по установке будет другая. Настройка подключения (четвёртый пункт) будет одинакова для всех вариантов.

Установим некоторые инструменты WireGuard:

apt install wireguard-tools —no-install-recommends

Так как мы используем OpenVZ-сервер, придётся использовать версию WireGuard, написанную на языке Go и не интегрированную в ядро ОС. Это не отразится на опыте использования, но придётся проделать чуть больше действий и скомпилировать утилиту самостоятельно.

Для начала установим среду для выполнения языка Go. По очереди выполните следующие команды:

cd /tmp

wget golang.google.cn/dl/go1.18.linux-amd64.tar.gz

tar zvxf go1.18.linux-amd64.tar.gz

sudo mv go /opt/go1.18

sudo ln -s /opt/go1.18/bin/go /usr/local/bin/go

Загрузим и скомпилируем wireguard-go. Последняя версия, которая без проблем запустилась у меня — 0.0.20201118. Последовательно введите команды:

cd /usr/local/src

wget git.zx2c4.com/wireguard-go/snapshot/wireguard-go-0.0.20201118.tar.xz

tar xvf wireguard-go-0.0.20201118.tar.xz

cd wireguard-go-0.0.20201118 

Скомпилируем и «установим»:

make

sudo cp wireguard-go /usr/local/bin

Проверьте, установилось ли всё успешно, командой wireguard-go —version. Если появится сообщение с версией, можно переходить к следующему этапу.

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

vi /lib/systemd/system/wg-quick@.service

Нажмите клавишу i — внизу должна появиться надпись INSERT. Найдите строчку:

Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity

Под этой строчкой вставьте другую сочетанием клавиш Ctrl+Shift+V:

Environment=WG_I_PREFER_BUGGY_USERSPACE_TO_POLISHED_KMOD=1 

Нажмите клавишу Esc, введите :wq и нажмите Enter.

Если вы незнакомы с vi или просто предпочитаете более простой редактор текста, установите nano — он пригодится далее:

apt install nano

Этап №4. Конфигурация VPN

Сгенерируем пару ключей для сервера. server_privatekey — это название файла с приватным ключом сервера, server_publickey — файл с публичным ключом сервера:

wg genkey | tee server_privatekey | wg pubkey > server_publickey

Для каждого клиентского устройства также создадим пару ключей. Это можно сделать и позже, но тогда придётся возвращаться к файлу конфигурации и редактировать его. 1 устройство — 1 выполнение команды ниже и, соответственно, 1 пара ключей. Не забывайте для каждого девайса менять названия файлов в команде. Во всех командах я выделил жирным то, что можно заменить. Например, для второго клиента могут быть client2_privatekey и client2_publickey. Опять же, название можно дать любое, главное, чтобы оно не повторялось и позволяло различить тип ключа и девайс. Я сгенерирую только для одного смартфона:

wg genkey | tee client_privatekey | wg pubkey > client_publickey

Выполним следующую команду для того, чтобы вывести сразу все сгенерированные ключи для сервера и клиента. Если у вас несколько клиентских устройств, то добавьте в конец команды названия всех созданных для них файлов и только потом выполните её. Например, если у вас 3 клиента, напишите cat server_privatekey server_publickey client1_privatekey client1_publickey client2_privatekey client2_publickey client3_privatekey client3_publickey.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Этап №3. Конфигурация VPN. 1

Сохраним полученное содержимое в отдельный текстовый файл allKeys.txt на основном компьютере. Каждые две строки — это пара ключей. Первый — приватный, второй — публичный. Соответственно, первая пара — это ключи сервера, другие пары ключей принадлежат клиентам:

cat server_privatekey server_publickey client_privatekey client_publickey

Создадим конфигурационный файл:

nano /etc/wireguard/wg0.conf

Вставим в него следующее содержимое, заменив <PRIV_SERV> строкой из сохранённого текстового файла allKeys.txt со всеми ключами (самая первая строчка), а <PUB_CLIENT> — строкой оттуда же, но для клиентского устройства (второй ключ в паре).

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Этап №3. Конфигурация VPN. 2

Для каждого клиентского устройства надо добавить раздел Peer по подобному принципу, указав IP-адрес, отличающийся четвёртым числом от ранее введённых (например, для второго клиента я введу AllowedIPs = 10.0.0.3/32, для третьего — AllowedIPs = 10.0.0.4/32 и так далее), и добавив его публичный ключ:

[Interface]

Address = 10.0.0.1/24

ListenPort = 51820

PrivateKey = <PRIV_SERV>

PreUp = iptables —table nat —append POSTROUTING —jump MASQUERADE —out-interface venet0

PreDown = iptables —table nat —delete POSTROUTING —jump MASQUERADE —out-interface venet0

[Peer]

PublicKey = <PUB_CLIENT>

AllowedIPs = 10.0.0.2/32

[Peer]

PublicKey = <PUB_CLIENT2>

AllowedIPs = 10.0.0.3/32

Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Запустим сервис и сразу добавим его в автозапуск, чтобы VPN автоматически стартовал после перезагрузки сервера:

systemctl enable wg-quick@wg0

systemctl start wg-quick@wg0

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

Подключение к VPN

Подключение настроенного VPN требует установки специального приложения WireGuard на клиентское устройство. Оно доступно на все популярные десктопные и мобильные девайсы.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 1

Android/iOS

Если нужно подключить смартфон, то наиболее удобным вариантом будет создание файла конфигурации прямо на VPS с последующей генерацией и сканированием QR-кода. Для этого введём через всё тот же Termius команду:

sudo apt install qrencode -y

Создадим файл конфигурации. Каждому новому устройству — новый файл конфигурации с уникальным именем (к примеру, client2.conf):

sudo nano client.conf

Вставим в файл содержимое, заменив <PRIV_CLIENT> на приватный ключ клиента (client_privatekey), сгенерированный ранее и сохранённый в отдельный файл allKeys.txt на основной машине. Вместо <PUB_SERV> подставим публичный ключ сервера (server_publickey) из того же файла. В Endpoint заменим <IP> на IP-адрес сервера (использовали его для подключения через Termius, нашли на шаге 11). В строке DNS можно указать желаемые DNS-сервера. Я выбрал DNS от Google.

[Interface]

Address = 10.0.0.2/32

PrivateKey = <PRIV_CLIENT>

DNS = 8.8.8.8, 8.8.4.4

[Peer]

PublicKey = <PUB_SERV>

AllowedIPs = 0.0.0.0/0, ::/0

Endpoint = <IP>:51820

Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Сгенерируем QR-код: 

qrencode -t ansiutf8 < client.conf

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 2

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 3

QR-код отсканируем в мобильном приложении, дадим имя туннелю и подключим VPN. Если всё прошло успешно, на любом сайте для проверки IP (например, ipleak.net) будет отображаться адрес удалённого сервера.

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 4

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 5

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков

Windows/macOS

Что касается компьютеров на Windows и macOS, файл конфигурации с расширением .conf лучше создать в любом текстовом редакторе на самом клиенте. Его содержимое будет аналогично тому, что предлагается выше для мобильных устройств. Только пункт с созданием QR-кода можно пропустить. Созданный файл импортируем в приложении WireGuard кнопкой Add Tunnel и активируем.

GNU/Linux

На компьютере с операционной системой GNU/Linux установим WireGuard таким же образом, каким установили его на сервер:

sudo apt install wireguard -y

Не забываем настроить пересылку трафика:

sudo sed -i ‘s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g’ /etc/sysctl.conf

И сразу же обновим конфигурацию:

sudo sysctl -p

На машине с Ubuntu 20.04 LTS мне пришлось установить дополнительный пакет, так как без него возникала ошибка:

sudo apt install openresolv

Создадим всё тот же файл конфигурации:

sudo nano /etc/wireguard/wg0.conf

Только в этот раз вставим в него содержимое, которое я указал чуть выше для мобильных устройств. Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter. Активируем VPN:

sudo wg-quick up wg0

Отключить VPN так же просто:

sudo wg-quick down wg0

Делаем собственный VPN за 30 минут: пошаговая инструкция для новичков — Подключение к VPN. 7

Для экономии времени я советую создать псевдонимы (aliases). Они позволят вместо таких комплексных команд вводить простые: wgon для подключения к VPN и wgoff для отключения. Откроем файл, который определяет конфигурацию терминала при запуске:

nano ~/.bashrc

Добавим в самый конец несколько строк:

# Aliases for WireGuard

alias wgon=’sudo wg-quick up wg0′

alias wgoff=’sudo wg-quick down wg0′

Сохраним файл комбинацией клавиш Ctrl+X, нажмем Y и подтвердим клавишей Enter.

Крупные VPN-сервисы первыми попадают под блокировку. Поэтому, у нас два варианта:

  • Пользоваться услугами компаний-середнячков.
  • Научиться ставить VPN и прокси самостоятельно.

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

На сайтах-агрегаторах VPN:

  • vpnpro.com
  • vpnreports.com
  • vpnmentor.com
  • vpntesting.com с таблицей ТОП-50 VPN.

Таблица доступных в РФ VPN-сервисов:

Хочу сделать все своими руками. С чего начать?

Для начала, нужно купить зарубежный сервер VPS/VDS. В среднем сервер стоит 1.5-3$ в месяц.

Где искать зарубежные серверы?

На сайтах-агрегаторах VPS/VDS:

  • serverhunter.com
  • exoticvm.com
  • vpschecker.com
  • vpsbenchmarks.com/screener
  • en.metadedi.net

Когда сервер куплен, можно приступать к установке VPN/прокси.

1. OpenVPN и Pritunl

Pritunl – свободное ПО, предоставляющее веб-интерфейс для управления OpenVPN и Wireguard.

Простая видеоинструкция по установке OpenVPN (Pritunl) на Ubuntu:

1.1. Установка Pritunl

Обновим список пакетов и систему (в статье используется Ubuntu 20):

        sudo apt update && sudo apt upgrade
    

Добавим Pritunl в репозиторий:

        sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A

sudo tee /etc/apt/sources.list.d/pritunl.list << EOF
deb https://repo.pritunl.com/stable/apt focal main
EOF
    

Установим Pritunl:

        sudo apt update
sudo apt install pritunl
    

Запустим и активируем Pritunl:

        sudo systemctl start pritunl
sudo systemctl enable pritunl
    

Проверим, запущен ли Prtinul:

        sudo systemctl status pritunl
    

Если все работает, то увидим следующую запись:

        ● pritunl.service - Pritunl Daemon
     Loaded: loaded (/etc/systemd/system/pritunl.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-10-26 15:35:10 EEST; 15s ago
   Main PID: 3716 (pritunl)
      Tasks: 19 (limit: 2282)
     Memory: 283.7M
     CGroup: /system.slice/pritunl.service
             ├─3716 /usr/lib/pritunl/bin/python /usr/lib/pritunl/bin/pritunl start
             └─3792 pritunl-web
    

Добавим MongoDB в репозиторий:

        sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list << EOF
deb https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse
EOF

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
    

Установим MongoDB:

        sudo apt update
sudo apt-get install mongodb-org
    

Запустим MongoDB:

        sudo systemctl start mongod
sudo systemctl enable mongod
    

Проверим, запущен ли MongoDB:

        sudo systemctl status mongod
    

Если сервис запущен, то мы получим следующий вывод:

        ● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-10-26 15:59:20 EEST; 54s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 68587 (mongod)
     Memory: 64.1M
     CGroup: /system.slice/mongod.service
             └─68587 /usr/bin/mongod --config /etc/mongod.conf
    

Зайдем на сервер по IP-адресу https://IP-address.

🛠 Как за 3 простых шага создать свой VPN и прокси-сервер

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

        sudo pritunl setup-key
    

Установка Pritunl

Установка Pritunl

Сгенерируем пару логин/пароль:

        sudo pritunl default-password
    

Зайдем еще раз на сервер по IP:

Вход в веб-интерфейс Pritunl

Вход в веб-интерфейс Pritunl

1.2. Настройка Pritunl

Чтобы начать пользоваться Pritunl нужно:

  1. Создать сервер Pritunl.
  2. Создать организацию и прикрепить ее к серверу.
  3. Создать пользователя и прикрепить его к организации.

Создание сервера

Чтобы создать сервер, перейдем во вкладку ServersAdd Server и активируем вкладку Advanced:

Создание сервера в Pritunl

Создание сервера в Pritunl

Добавим сервер.

Создание организации

Перейдем во вкладку UsersAdd Organization и добавим новую организацию:

Создание организации в Pritunl

Создание организации в Pritunl

Прикрепим организацию к серверу. Для этого перейдем во вкладку ServersAttach Organization:

Прикрепление организации к серверу в Pritunl

Прикрепление организации к серверу в Pritunl

Нажмем на кнопку Start для запуска сервера.

Создание пользователя

Чтобы создать пользователя, перейдем во вкладку UsersAdd User:

Создание пользователя в Pritunl

Создание пользователя в Pritunl

1.3. Раздаем ключи

Чтобы подключиться к VPN, скачаем и установим клиент для своей ОС pritunl.com/platforms. Вернемся к серверу и перейдем во вкладку UsersAdd User, и кликнем по значку цепочки:

Раздача ключей в Pritunl

Раздача ключей в Pritunl

Скопируем URI-ссылку:

Раздача ключей в Pritunl

Раздача ключей в Pritunl

Вставим URI-ссылку в клиент и подключимся к VPN:

Соединение с сервером Pritunl

Соединение с сервером Pritunl

Мы подключились к серверу.

2. Shadowsocks и Outline

Outline создан стартапом Jigsaw, примкнувшим к компании Google. Под капотом у Outline находится протокол Shadowsocks, который маскирует данные под HTTPS-трафик.

Для установки Outline потребуется Docker.

2.1. Установка Docker

Обновим список пакетов и систему:

        sudo apt update && sudo apt upgrade
    

Установим пакеты, которые позволят apt устанавливать пакеты через HTTPS:

        sudo apt install apt-transport-https ca-certificates curl software-properties-common
    

Добавим ключ GPG для репозитория Docker в систему:

        curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    

Добавим репозиторий Docker в систему:

        sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
    

Обновим список пакетов:

        sudo apt update
    

Установим Docker:

        sudo apt install docker-ce
    

2.2. Установка менеджера Outline

C помощью менеджера Outline можно добавлять и удалять сервера и раздавать ключи. Скачаем менеджер по ссылке getoutline.org/ru/get-started:

Установка менеджера Outline

Установка менеджера Outline

Выберем Настройте Outline где угодно:

Установка Outline на сервер

Установка Outline на сервер

Чтобы установить Outline, введем на сервере команду из пункта 1:

Команда для установки Outline на сервер

Команда для установки Outline на сервер

После установки Outline мы получим строчку с инфой о нашем Outline-сервере в формате JSON:

🛠 Как за 3 простых шага создать свой VPN и прокси-сервер

Скопируем JSON-строку, вставим ее во второе поле Менеджера Outline и нажмем Готово.

🛠 Как за 3 простых шага создать свой VPN и прокси-сервер

Теперь мы можем поделиться ключом доступа с кем угодно:

Менеджер Outline

Менеджер Outline

2.3. Раздаем ключи

Скачаем и установим клиент Outline:

Установка клиента Outline

Установка клиента Outline

Откроем менеджер Outline и скопируем ключ в клиент Outlline:

Подключение к серверу Outline

Подключение к серверу Outline
Подключение к серверу Outline
Подключение к серверу Outline

Связь установлена:

🛠 Как за 3 простых шага создать свой VPN и прокси-сервер

Если в Windows 10 клиент Outline не подключается к серверу, то нужно отключить Hyper V. Для этого откроем PowerShell от имени администратора и введем:

        Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor
    

***

В этой статье мы научились:

  • создавать VPN-соединение с помощью Pritunl;
  • создавать прокси-сервер, используя Outline;
  • раздавать VPN и прокси другим пользователям.

Материалы по теме

  • Как поставить Joomla 4 на выделенный сервер VDS/VPS?
  • Как работает прокси-сервер: максимально простое объяснение
  • Что такое кибербезопасность и почему за этой профессией будущее?
  • Зашифрованный трафик тоже можно вскрыть: рассказываем, как сделать это безопасно
  • GPG и все-все-все: настраиваем шифрование переписки за 10 минут по методу Кристофера Робина

Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie

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

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

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

К счастью, всегда есть выход!

За 20 минут вы можете настроить свой личный VPN-сервер с трафиком 32 Тбайт в месяц и неограниченной скоростью всего за 200 рублей. И, да, ему будут нестрашны любые блокировки.

Что такое Outline

Outline — это не привычный VPN-сервис, к которым многие привыкли. По сути, это self-hosted продукт, который вы настраиваете на своём или арендованном облачном сервере. Конфигурация Outline позволяет удобно подключаться к вашему VPN-серверу и предоставлять доступ другим людям на ваше усмотрение.

Outline был разработан компанией Jigsaw — внутренней командой Google, но не переживайте, никаких скрытых опций для сбора персональных данных в приложении нет.

Как минимум потому, что исходный код можно найти в свободном доступе на GitHub и изучить его на наличие подводных камней. Но их вы не найдёте, потому что сервис проходил в 2018 году проверку безопасности специалистами двух независимых организаций: Radically Open Security и Cure53. Они подтвердили, что Outline отвечает новейшим стандартам безопасности.

Более того, все передаваемые через сервер данные, Outline шифрует по стандарту AEAD 256-bit Chacha2020 IETF Poly 1305. То есть, никто из вне, даже среди тех людей, кто имеет доступ к подключению, не сможет перехватить информацию других пользователей. В том числе и вы, даже будучи владельцем сервера.

Вкратце о плюсах:

1. Сам по себе протокол Outline VPN бесплатен, платите вы только за аренду сервера (в районе 200 рублей в месяц)
2. Никто извне не сможет получить доступ к вашим данным
3. Outline устойчив к блокировкам VPN-сервисов на основе DNS или IP-адресов. То есть, ваш VPN-сервер будет работать, даже если другие публичные VPN будут заблокированы
4. Блокировки VPN со стороны провайдеров и государственных ведомств нацелены на публичные VPN-сервисы. Заблокировать ваш, частный сервер с VPN-конфигурацией они не смогут

 Теперь, переходим к делу.

Арендуем сервер

Такие популярные хостинги, как Amazon Web Services, Google Cloud и Digitalocean не принимают российские банковские карты, поэтому остаётся использовать российские варианты. Лично я рекомендую использовать VDSina (реф). Они принимают российские и иностранные карты (Mastercard, Visa, «МИР»). Пополнить счёт также можно с QIWI-кошелька, ЮMoney, WebMoney и даже при помощи криптовалюты.

После регистрации заранее пополните баланс на 200 рублей (месячная стоимость аренды сервера), зайдите в панель управления и нажмите на пункт «Добавить сервер».

Параметры настройки сервера:

  • Тип: стандартный
  • Операционная система: CentOS 7
  • Тариф: младший за 6 рублей в день (около 200 рублей в месяц) с трафиком 32 Тбайт в месяц
  • Местоположение: Амстердам
  • Автоматический бэкап можно отключить

После того как вы создадите сервер, в раздел поддержки придёт оповещение, в котором будет содержаться IP-адрес сервера и пароль, они понадобятся для удаленного подключения и дальнейшей настройки.

Подключаем VPN к серверу

Для этого воспользуемся бесплатным VPN-протоколом Outline. Скачиваем Outline Manager для установки конфигурации на сервер.

После запуска Outline Manager выберите «Настройте Outline где угодно». Теперь переходим к основной работе: открываем терминал (для Windows можете скачать ssh-клиент Putty). Но встроенной командной строки тоже должно хватить.

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

Для начала обновим сервер:

1. ssh root@(IP-адрес вашего сервера, без скобок)
2. Соглашаемся с подключением, пишем yes и нажимаем enter
3. Вводим пароль из тикета и нажимаем enter
4. Обновляем сервер: yum update и нажимаем enter
5. Соглашаемся: вводим «y» (без кавычек), нажимаем enter
6. Снова соглашаемся с изменениями: вводим «y» (без кавычек), нажимаем enter

Устанавливаем Docker:

1. Вводим команду: wget -O — https://get.docker.com | bash и нажимаем enter
2. Запускам docker, вводим команду: systemctl enable docker && systemctl start docker

Устанавливаем Outline:

1. Копируем из Outline Manager команду и вставляем её в Терминал: sudo bash -c «$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)»
2. Нажимаем enter
3. Копируем ключ, выделенный зелёным текстом в Outline
3. Iptables: sudo yum install iptables и нажимаем enter
4. Завершаем шаг и и запускаем установку сервисов командой: sudo yum -y install iptables-services и нажимаем enter
5. Вводим команду: iptables -L -v -n и нажимаем enter
6. Сбрасываем параметры командой: sudo iptables -F

Разрешаем входящие и исходящие подключения:

1. sudo iptables -A INPUT -i lo -j ACCEPT и нажимаем enter
2. sudo iptables -A OUTPUT -o lo -j ACCEPT и нажимаем enter
3. sudo iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT и нажимаем enter

На этом этапе переходим в Ouline Manager и подключаемся к серверу. Если вы всё сделали правильно, то в программе появится возможность создания ключей для последующих подключений.

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

Понравилась статья? Поделить с друзьями:
  • Как написать свой vpn на python
  • Как написать свой scanner java
  • Как написать свой map js
  • Как написать свой lua скрипт для самп
  • Как написать свой exe файл