Создаем свой VPN-сервер. Пошаговая инструкция

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

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

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

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

Оглавление:

Преамбула

В январе 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 и затем настроим его.

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

Для себя я выбрал 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 имя вашего ключа:

ssh -i YOUR_DOWNLOADED_KEY.pem admin@YOUR_LIGHTSAIL_IP

Нас спросят:

... 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» и новый порт:

ssh -i YOUR_DOWNLOADED_KEY.pem admin@YOUR_LIGHTSAIL_IP -p 45323

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

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

Заключение

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

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

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

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

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

Спасибо!

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

0
221 комментарий
Написать комментарий...

Комментарий удален модератором

Развернуть ветку
Nanokassa_ru

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

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
9 комментариев
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
4 комментария
Francis R. Wilkeу

плюсую. и раз уж статью для инженеров написали, то Lightsail нужно было разворачивать сразу с помощью Terraform/Boto3/CloudFormation/AWS CLI.

Ответить
Развернуть ветку
Дмитрий Солин

с docker не всё так просто. нужна оптимизированная ос. socks5 proxy over ssh оптимальная альтернатива vpn. я правда не уверен насчёт производительности.

Ответить
Развернуть ветку
Семён Бочкарёв

Docker и VPN? Месье определенно знает толк в извращениях.
Docker сам управляет сетями, причём делает это плохо. А если вы еще и перенастройку маршрутизации для VPN-сервера туда засунете, эта связка рискует не заработать.
Кроме того, iptables настраивать всё равно придется на хосте.

Ответить
Развернуть ветку
Valeriy Roshko

Полезно, странно, что здесь, а не на хабре) Или там тоже есть?)

Ответить
Развернуть ветку
Denis Kiselev

Несколько немного субъективных моментов в статье есть.

Почему aws, почему нет azure. DO тоже норм. Можно scaleway вспомнить ещё.

Почему именно Debian - мануалов по убунте чуток побольше. С другой стороны - дело вкуса.

Почему именно такой конфиг профиля? Можно объяснить.

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

Ответить
Развернуть ветку
Oleg Borisov
Автор

На хабре итак знают что делать)

Ответить
Развернуть ветку
Dmitry Porkhaev

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

Уже больше года пользуюсь.

А так же сделал себе MT-Proxy для ТГ

Ответить
Развернуть ветку
Нурболат Хамитов
Ответить
Развернуть ветку
Александр Головченко

А при такой реализации что с устойчивостью к DPI?

Ответить
Развернуть ветку
Denis Kiselev

Смотреть надо на практике! Dpi он разный бывает.

Вообще, не думаю что у нас на данном этапе будут массово использовать dpi на магистралях

Ответить
Развернуть ветку
Марк Кац

Подскажите, что делать?

Ответить
Развернуть ветку
Вася Пражкин

Купить готовый VPN-аккаунт.

Ответить
Развернуть ветку
4 комментария
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Вы в федеральном розыске

Вот! В этом и проблема таких мануалов. Мол, всё просто, но на деле возникает куча подводных камней, про которые автор не пишет. И так будетна каждом этапе. То драйвера не подойдут, то библиотеки нет, то прав нет, то версии либ не совпадают, то ссылка мёртвая, то вообще всё нафиг устарело

Ответить
Развернуть ветку
1 комментарий
Семён Бочкарёв

Любопытно! IPSec-сервера обычно не рассматриваются в таких гайдах.

Единственное «но» — Amazon не самое подходящее решение. Во-первых, трафик там тарифицируется, и влетит в копеечку. Во-вторых, его сервера банят с большим удовольствием. Лучше брать малопопулярного хостера в Гонконге.

Ответить
Развернуть ветку
Oleg Borisov
Автор

Lightsail дает 1ТБ включенного трафика в инстансе за 3,5 доллара. Мне пока ни разу не удавалось сжечь более 300Гб в месяц с трех устройств.

Ответить
Развернуть ветку
3 комментария
Vladimir Petrosov

Копи-паст статьи на Хабре, честно говоря
Видел похожу, когда поднимал VPN года 2 назад

Ответить
Развернуть ветку
Oleg Borisov
Автор

Скиньте ссылку? На русском мне не удалось найти ни одной статьи, которая бы базировалась на использовании сертификатов (не паролей), IKEv2 (не OpenVPN), Debian (не Ubuntu), и на выходе делала бы готовые универсальные VPN-профайлы для всего парка Apple-устройств.

Ответить
Развернуть ветку
3 комментария
Vadim Berezhnoy

Есть кто из 2023? Все сделал по инструкции, прописал ip-адрес как надо, но все равно пароль для сертификата me.p12 неверен. Куда копать?

Ответить
Развернуть ветку
Sergei Sharenkov

Удалось решить проблему с паролем ?

Ответить
Развернуть ветку
4 комментария
Farkhat Aiupov

у меня просто впн постоянно пытается подключится, выше похожую проблему описывали

Ответить
Развернуть ветку
3 комментария
Alexandr Rud

Актуальная статья, сделал еще в феврале и все работает без проблем на iPhone, iPad, Mac OS (m1,m2). Вообще не разбирался как и что делать, в итоге наверное неделю убил на настройку и пользовался chatgpt для объяснения.

Ответить
Развернуть ветку
Villaribo

Похоже, этот гайд не работает в 2021. Прошелся три раза по нему, сделано все по инструкции. Ошибок нигде нет, сертификат сгенерировал, профиль поставил.

Пробую на macbook Air M1. В Network на маке вижу, что пытается подсоединиться, но не может. Показывает, что сертификат валидный, правильный IP прописан. Не вижу, где могла бы быть ошибка.

Кто-нибудь сталкивался с такой проблемой?

Ответить
Развернуть ветку
Farkhat Aiupov

тоже самое, все упирается в подключение постоянно как в цикле пробует подключится :(

Ответить
Развернуть ветку
Артём Королёв

Подскажите, а как можно ещё использовать данный виртуальный сервер, помимо vpn, чтобы использовать его по полной.
Возможно сервер умного дома?
Торренты? (В исключительно законных целях конечно)
Развернуть свой небольшой сайтик?

Ответить
Развернуть ветку
Сергей Владимирович

А у меня на сервере поднят docker. В одном контейнере openvpn сервер, поднимается в 5 команд, клиент есть под все известные платформы. В другом контейнере - база данных, в третьем веб приложение. Живет (и шевелится) это все на хосте centos с 1гб оперативки, 1ггц проц. Невероятно удобно админить, причем хостовая машина абсолютно “чистая” (не сравнить с вариантом «стрейзен», к тому же можно рядом поднять контейнер с ikev2, если что-то не так)

Ответить
Развернуть ветку
sardelkin

shadowsocks
mtproto proxy

Ответить
Развернуть ветку
2 комментария
Yegor Yeremenko

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

Ответить
Развернуть ветку
Дмитрий Букреев

Что только люди не делают, лишь бы не использовать готовый VPNHUB

Ответить
Развернуть ветку
Mark Rapida Gromov

это же обычный впн-сервис, каких вагон. Не самое надежное решение

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
zibx zibx

Входит. Весь трафик оборачивается в асимметричное шифрование.

Ответить
Развернуть ветку
1 комментарий
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Oleg Borisov
Автор

Если притушить, то в Системных настройках > Сеть выбрать соединение и снять галку на «Connect on demand» и нажать Apply.
Если удалить, то нажать нажать удаление и нажать Apply.

На iOS: Settings > Profiles.

Ответить
Развернуть ветку
1 комментарий
Vladislav Donets
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh

Или одной строкой

Ответить
Развернуть ветку
Alexey Khaliullin

Вот на этом шаге

cd ~/.ssh/

терминал возвращает

-bash: cd: /Users/a17586379/.ssh/: Not a directory

... и дальше дело не идет.

Что делать?

Ответить
Развернуть ветку
Андрей Хрусталев

и у меня аналогичная проблема.. помогите плз!

Ответить
Развернуть ветку
Hanna Bilobrova

здравствуйте

вы нашли решение ? если да помогите и мне пожалуйста 

Ответить
Развернуть ветку
imlolka

Вот отличный сервис для поднятия VPN на любом сервере в 2 клика. https://myvpn.run/
Без консоли и заморочек.

Ответить
Развернуть ветку
Danil V Yudanov

Кому лень разбираться с консолью, попробуйте Outline. Не благодарите

Ответить
Развернуть ветку
Алексей Ландырев

Вот, да, пришёл сюда чтобы написать про Outline.

В Digital Ocean сам всё поднимет по кнопке, в других облаках достаточно будет запустить одну (!) команду на виртуалке, чтобы поднять свой VPN

Ответить
Развернуть ветку
Ogfrgfkar

Если я правильно понимаю то заблокировать IP адреса VPN сервера то же не составляет труда.

Ответить
Развернуть ветку
Denis Kiselev

Любой ip можно заблокировать. Только зачем ркн блокировать ip вашего vpn сервера в заграничном облаке? На основании чего?

Ответить
Развернуть ветку
2 комментария
Владимир Петров

Олег, спасибо за исчерпывающий мануал.
При попытке установить профиль iphone.mobileconfig на MacBook появляется ошибка " Profile installation failed" "Error = -50"
При попытке установить профиль на iPhone появляется ошибка "Сбой установки профиля. Пароль для сертификата "me.p12" неверен.
Подскажите где искать причины таких ошибок?

Ответить
Развернуть ветку
Павел Зайцев

Если понадобится выпустить сертификат для Android:
cd /etc/ipsec.d/
openssl pkcs12 -export -out me.p12 -inkey private/me.pem -in certs/me.pem -certfile cacerts/ca.pem -name "me" --legacy
И если нет типа IKEv2 при создании нового VPN-профиля, то просто установить strongSwan VPN Client, и настроить все там.

Ответить
Развернуть ветку
AlexName

а как для win 11 это все сделать?

Ответить
Развернуть ветку
2 комментария
Алексей Чубов

При создании сертификатов в командах надо вставлять IP своей инстанции вместо
"CN=YOUR_LIGHTSAIL_IP" ?

Ответить
Развернуть ветку
Oleg Borisov
Автор

Да, например, если внешний IP инстанса 3.3.3.3, то в коде должно быть так:
"CN=3.3.3.3"

Ответить
Развернуть ветку
2 комментария
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Mark Rapida Gromov

может, он весь пул адресов amazon блочит? Можно взять менее известные vps

Ответить
Развернуть ветку
Oleg Borisov
Автор

Хз, может какая-то другая причина, или этот диапазон Static IP попал в очередной странный блэклист Авито. Когда Авито у меня не работал на Лондоне, я писал им неоднократно в поддержку об абсурдности их ограничений, но они невменяемы. Там в ответ идут стандартные скрипты в духе «попробуйте зайти позднее/обратитесь к провайдеру/устраните активность/выделите себе static ip/еще какая-то муть». То, что это итак static ip они не хотят слушать.

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

На Франкфурте же все работает и работало. США тоже работает.

Ответить
Развернуть ветку
4 комментария
Nick Chernyshev

Олег, расскажи пожалуйста, как создавался файл .mobileconfig

Ответить
Развернуть ветку
Nick Chernyshev

Не sh generator конечно, а сами XML внутренности, я так понял это с помощью утилиты AppleConfigurator, но там как то не совсем очевидно все.

Ответить
Развернуть ветку
1 комментарий
Макс Чародей

Олег, спасибо, прекрасный мануал, получилось запустить свой VPN сервер с первого раза. Подскажите, как сгенерировать VPN-профайл для windows?

Ответить
Развернуть ветку
Алексей Чубов

Макс, получилось победить Windows? Если да, то пожалуйста расскажите. На андройде у меня все заработало, а вот виндовс пока не хочет ((

Ответить
Развернуть ветку
10 комментариев
Oleg Borisov
Автор

Макс, рад, что все удалось! По Windows, к сожалению, не подскажу, последний раз пользовался этой ОС много лет назад.

Ответить
Развернуть ветку
5 комментариев
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Oleg Borisov
Автор

Упустил символ ">", который должен появиться после этого места, пардонюсь.

Вводите дальше:
ipsec pki --issue --lifetime 3650 --digest sha256 \

и далее по списку.
Сами символы ">" вводить, конечно, не нужно.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Oleg Borisov
Автор

Если вы на Лондоне то да, на него часто Авито ругается на якобы DDOS, на Франкфурте все всегда ок.

Ответить
Развернуть ветку
2 комментария
Александр Константинов

Почему так все переживают за Авито?)

Ответить
Развернуть ветку
3 комментария
Ogfrgfkar

Я чисто гипотетически.

Ответить
Развернуть ветку
Mark Rapida Gromov
Вы можете выбрать любой порт по вкусу, начиная с 1024

для ssh диапазон портов 1025-65535 же, не?

Ответить
Развернуть ветку
Mark Rapida Gromov

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

Ответить
Развернуть ветку
Кирилл Бородин

Спасибо! Отличная и подробная статья. Даже неожиданно на этом ресурсе.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
QKun

Все очень круто, но кто пользуется facebook в 2019?!

Ответить
Развернуть ветку
Самуил Маршак

222 закладки! это потому, что автор сказал не покупать vpn ? реально сами настроите ? в покупных vpnах всякие double, onion, резалки рекламы, тысячи серверов (если некоторые вдруг не отвечают). Ну куда против этого с собранным на linux (коленке) vpnом ?си платить за сервер всё равно придется. И даже больше чем некоторые популярные vpn берут за месяц. Эта инструкция станет популярнее, когда заблочат vpn сервисы все, ну и то если ее перечитают еще раз 10 и упростят.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Francis R. Wilkeу

можно сделать самому дешевле, если автоматизировать развертку сервера и отключать его при простое. тогда при использовании VPN, например, в течение 100 часов в месяц выходит всего 47 центов. правда warning: 1 ТБ трафика.

Ответить
Развернуть ветку
Francis R. Wilkeу

Все же решил на Lightsail поднять VPN-сервер себе, обнаружил несколько моментов:
1) Algo неплохая штука, ей можно и сервер в Lightsail поднять. Но мне свои aws_access_keys отдавать не хотелось :)
2) Под OpenVPN на centos я терял примерно 75% пропускной способности домашнего интернета
3) Мне очень хочется использовать VPN нативно под macOS и iOS, поэтому надеялся на IPSec (и ваш туториал). Но я теряю 99% пропускной способности на скачивание и 50-60% на выгрузку. Видимо все же OpenVPN =\
Но в любом случае статья оказалась полезной, спасибо. Не хватает все же баш-скрипта, который бы все в один клик делал.
Настраивать себе сервера через эмулятор терминала на iPad - боль. Хотя с iPadOS в будущем должно быть чуть-чуть приятнее.

Ответить
Развернуть ветку
Viktor Kuznetsov

В смысле Streisand заточен под OpenVPN?
Он поднимает сразу несколько серверов на разных реализациях.
Из тех что работают в Китае (зимой работало, по крайней мере) - wireguard, shadowsocks.

Ответить
Развернуть ветку
Alexander K.

Отличная инструкция, только не понял как подключиться роутером на прошивке Asus padavan.

Ответить
Развернуть ветку
Alexander K.

Затупка на это пункте А теперь создадим сертификат для наших устройств в файле me.pem:
вместо me какой ip надо вписывать?

Ответить
Развернуть ветку
Oleg Borisov
Автор

Александр, в me.pem ничего писать не нужно. Ровно то, что написано в блоке кода.

Ответить
Развернуть ветку
1 комментарий
Alexander K.

Олег Здравствуйте. Как подключиться из роутера в консоли? какой ipsec.conf?
Strongswan на роутере имеется.

Ответить
Развернуть ветку
balkankar balkanakar

А не проще пользоваться нормальным сервисом по типу https://www.altvpn.com/ru/ те же деньги, только безопаснее и без лагов...

Ответить
Развернуть ветку
Alexander K.

Безопаснее и без лагов сомневаюсь, это коммерческий vpn.

Ответить
Развернуть ветку
Alexander K.

Олег здравствуйте, буду рад если напишете инструкцию, как подключаться роутером с консольной настройкой. тут по идее проще туннель поднять.
Лично я так и не смог запустить. отправляет пять пакетов и дальше peer is not responding.

Ответить
Развернуть ветку
An Du

Сообщение удалено

Ответить
Развернуть ветку
An Du

Мне тоже не удается установить профиль ни на телефон, ни на планшет - Could not install a profile due to an unknown error.
Всё делал по инструкции.

Ответить
Развернуть ветку
Роман Морозов

У сервисов типа Nord или Windscribe или тот же Hideme есть российские сервера, подключаясь к которым без проблем есть доступ к заблокированным ресурсам. Если всё же арендовать хостинг в России поднять VPN, доступ будет или нет?

Ответить
Развернуть ветку
Alexander K.

Олег привет. клиент на роутере что то не прёт
Sep 5 18:49:50 syslog: 04[NET] sending packet: from home inet ip[500] to aws ip[500]
Sep 5 18:51:06 syslog: 15[MGR] checkout IKEv2 SA with SPIs 48658e0100e22710_i 0000000000000000_r
Sep 5 18:51:06 syslog: 15[MGR] IKE_SA nat-t[1] successfully checked out
Sep 5 18:51:06 syslog: 15[IKE] giving up after 5 retransmits
Sep 5 18:51:06 syslog: 15[IKE] establishing IKE_SA failed, peer not responding
Sep 5 18:51:06 syslog: 15[MGR] checkin and destroy IKE_SA nat-t[1]
Sep 5 18:51:06 syslog: 15[IKE] IKE_SA nat-t[1] state change: CONNECTING => DESTROYING
Sep 5 18:51:06 syslog: 15[MGR] checkin and destroy of IKE_SA successful

Ответить
Развернуть ветку
Mk Kop

Сделал все по инструкции, все заработало с первого раза !! На 2 iPhone осталось только прицепить андроид и вин с этим проблема

Ответить
Развернуть ветку
Mk Kop

странно что автор удалил для надежности ca.pem, но оставил его в /etc/ipsec.d/cacerts/ и далее он используется в генерации конфига mobileconfig для генерации контейнера p12 включающего сертификаты me и ca

Ответить
Развернуть ветку
Alexander K.

Добрый вечер, в роутере есть Strongswan Ipsec так и не получилось подключиться. какой конфиг для роутера?

Ответить
Развернуть ветку
3 комментария
Джафар Гифар

Подскажите кто нибудь, Как сделать vpn файл под win + android, пожалуйста!

Ответить
Развернуть ветку
Mk Kop

openssl pkcs12 -export -inkey /etc/ipsec.d/private/me.pem -in /etc/ipsec.d/certs/me.pem -name "me" -certfile /etc/ipsec.d/cacerts/ca.pem -out cert.p12

Ответить
Развернуть ветку
2 комментария
Анастасия Новикова

Как к андройду прикрутить эту инструкцию?дошли до конца скачали mobileconfig.sh и в конце статьи облом под эплы(

Ответить
Развернуть ветку
Mk Kop

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-16-04?ref=vc.ru вот более подробная инструкция с шагами под все платформы, с текущей инструкциеей под вин10 работать не будет, т. к методы аутентификации разные. В комментах к статье описаны дополнительные пакеты что необходимо доставить для вин 10

Ответить
Развернуть ветку
Tymothy Phil

Выполнил по статье всё, - айфончик подключается к VPN, появляется значок VPN вверху экранчика, присваивается ip-адрес 10.10.10.1 - но ни одного сайта открыть не удается! Подскажите плз - куда рыть?

Ответить
Развернуть ветку
Tymothy Phil

Выполнил по статье всё, - айфончик подключается к VPN, появляется значок VPN вверху экранчика, присваивается ip-адрес 10.10.10.1 - но ни одного сайта открыть не удается!
на VPN-сервере пинговал адрес 10.10.10.1 - шикарно пингуется, то есть сервер видит клиента.
64 bytes from 10.10.10.1: icmp_seq=361 ttl=64 time=73.4 ms

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

сличал побуквенно правила ipsec по выводу ipsec -S - совпадение полное...

что же сделать чтобы сайты на айфоне открывались?
сервер VPN размещен на домашнем компе на виртуальной машине (не на каком-либо облаке или стороннем прове, просто дома установлен ESXi и на нем с пяток виртуальных машин, в инет ходят через роутер Ростелекома)

Ответить
Развернуть ветку
Таможня Дает-Добро

1

Ответить
Развернуть ветку
Таможня Дает-Добро

У меня не было интерфейса с именем eth0. Вместо него - интерфейс ens192, что выяснилось командой ifconfig. Перенабрал строки маскарадинга с правильным наименованием интерфейса - и всё залетало!

Ответить
Развернуть ветку
Дмитрий Брагин

Кто смог завести на android? сертификат импортировал но выдает ошибку логина пароля, от куда их взять, я прописал 

в файле /etc/ipsec.secrets 

lol %any% : EAP "lolkek" 

но они не проходят

Ответить
Развернуть ветку
Sergey Solovyev

Здравствуйте Олег, я повторил все манипуляции по данной статье о создании   VPN. Скачал профайл, но при установке на айфоне и маке выдает ошибку -50

Ответить
Развернуть ветку
Лаврентий Эрик Джугашвили

Олег, классная статья! Впервые все с первого раза по инструкции из инета взлетело. Круто!
Но есть вопрос.
Можно как то с вами связаться, есть необходимость в консультации по продолжению этой тематики.

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

такое в принципе реализуемо? Можете как то помочь настроить? 

Ответить
Развернуть ветку
Oleg Borisov
Автор

Лаврентий, рад, что все удалось. К сожалению, не смогу вас проконсультировать, системное администрирование в принципе не мой профиль. Любой фрилансер решит вашу задачу кратно быстрее, поэтому рекомендую поискать такого на каком-нибудь сайте типа freelansim.ru.

Ответить
Развернуть ветку
2 комментария

Комментарий удален модератором

Развернуть ветку
Антон Константинов

Отличная статья ! Поднял свой собственный сервер, накатил на него debian и идя по данной инструкции настроил vpn. Спасибо все доходчиво !

Интересно вот что:
Если весь трафик между VPN сервером и клиентом шифруется, хорошо! Но ведь при подключении клиента к VPN серверу, клиент начинает ходить в интернет используя интернет и IP адрес сервера ( так сказать ), соответственно можно спокойно отследить сервер через который ходит клиент, после можно поставить снифер на внешний ip адрес сервера и все ресурсы на которые ходят клиент, становятся доступным для провайдеров и других желающих верно  ?

Не совсем понял, как VPN сервер защищает от злоумышленников и провайдеров.

Интересно, можно ли скрыть или изменять IP адрес VPN сервера ?

И еще вопрос, как создать файл подключения клиента к серверу с функцией, ручного подключение к сети VPN а не как сейчас в автоматическом режим ?

Ответить
Развернуть ветку
Антон Константинов

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

Ответить
Развернуть ветку
Антон Константинов

Вопрос решен — отправляя файл конфигурации через AirDrop, телефон предлагает сразу установить настройки.

Если кто-то знает, как файл конфигурации для клиента можно отправить и установить не используя AIRDrop - просьба написать.

Ответить
Развернуть ветку
1 комментарий
Eugene Martinson

Спасибо за статью - с первого раза все завелось!

Такой вопрос - в случае если какой-то сайт недоступен (как в случае с avito в комментариях) что нужно сделать:

1. Поднять новые VPN сервер - в смысле прям купить новый тариф на Lightsail или нужно как-то поменять расположение уже сервера?

2. Еще был рекомендация сменить статический IP - если я правильно понял - в этом случае всю процедуру по созданию сертификатов.

И в конфиге для strongSwan - нужно заменить настройки `conn %default` с указанием нового адреса или можно завести еще одну настройку в конфиге типа `conn %newconn`.

Затем создать новый mobileconfig с новым статичным адресом.

И таким образом перебирать статические адреса пока не найду который работает?

Как можно в случае собственно поднятого VPN автоматизировать переключение серверов?

Ответить
Развернуть ветку
Дмитрий Улыбышев

Ув. Олег спасибо за статью, немного помучился, но в итоге все сделал. Значек VPN горит постоянно, но интернета нет.(((

Вопрос вот в чем. Тот статический IP адрес должен ли он пинговаться с любого компьютера? А если не пингуется то это ли причина того что интернета нет. И тогда мне просто надо найти регион чей адрес будет давать отклик в командной строке и все перенастроить?

Ответить
Развернуть ветку
Евгений Сахнов

Друзья, подскажите, пожалуйста, чтобы на этом же сервере развернуть потом телеграм прокси, какие изменения нужно в iptables внести? 

Ответить
Развернуть ветку
Vendetta Vendetta

а где задается пароль на vpn? и как выкачать iphone.mobileconfig?

Ответить
Развернуть ветку
Denis Gukov

Тем кому лень подымать VPN-сервер самому, рекомендую сервис https://snowdenvpn.com/ru, подымает за вас такой-же VPN-сервер

Ответить
Развернуть ветку
Alex

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

Ответить
Развернуть ветку
vasya vasya

Благодарен за мануал. Но столкнулся с проблемой. Прошёл этап генерации сертификатов и по случаю психоза в непонимании перезапустил терминал. В следствии не могу теперь авторизоваться по первоначальному сертификату. Как решается проблема в моей случае?

Ответить
Развернуть ветку
Roma B

Спасибо за инструкцию! Работает!

Ответить
Развернуть ветку
mahmadullo abdulloev

БЕГЕТ упростил проблемку с VPN

Ответить
Развернуть ветку
Alexei Akhmetzianov

Если тема и тс не мертвы😅 А как сформировать подобный конфиг для установки на андроид телефоны? Или как к этой сборке их подключить другим способом?

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Ivan Ushakov

Олег, спасибо за гайд! Работает!
Подскажи, в каком направлении копать, если надо заворачивать трафик в VPN-туннель только для определенных сайтов, а весь остальной трафик пускать напрямую?

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Антон Андреев

Благодарю! Теперь я буду разбираться до бесконечности с админом одного из порталов:)

Ответить
Развернуть ветку
Myrat Baymuradow

180200

Ответить
Развернуть ветку
Artem Buldin

Июль 2023 года. Все работает, сделал по инструкции на Vdsina ru.

Только для коннекта к серверу поставил коннект по ssh ключу.

5 рублей в день сервер Голландский, все летает)
автору спасибо)

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
Marat Shigabetdinov

Верой и правдой работал 2 года сервер настроенный по этой инструкции.

А есть какое-то решение в связи с блокировкой протокола IPsec?

Ответить
Развернуть ветку
Павел Зайцев

Обновление для тех, кто в 2023 идет по этой инструкции.

Столкнулся с проблемой, при которой во время установки профиля возникает ошибка, что пароль me.p12 неверный.

Во-первых, для Debian 12 понадобилось установить больше пакетов, чем в оригинальной инструкции:
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins libtss2-tcti-tabrmd0

Во-вторых, в скрипте mobileconfig.sh есть команда

openssl pkcs12 -export -inkey /etc/ipsec.d/private/${CLIENT}.pem -in /etc/ipsec.d/certs/${CLIENT}.pem -name "${CLIENT}" -certfile /etc/ipsec.d/cacerts/${CA}.pem -password pass:${PKCS12PASSWORD} | base64

В нее стоит добавить -legacy:

openssl pkcs12 -legacy -export -inkey /etc/ipsec.d/private/${CLIENT}.pem -in /etc/ipsec.d/certs/${CLIENT}.pem -name "${CLIENT}" -certfile /etc/ipsec.d/cacerts/${CA}.pem -password pass:${PKCS12PASSWORD} | base64

Согласно статье
https://docs.strongswan.org/docs/5.9/interop/appleIkev2Profile.html

И в-третьих, если вы не в поездке, а пользуетесь VPN, чтобы, скажем, зайти в инсту, то убрать тэг <key>OnDemandEnabled</key> вместе с последующим тэгом <integer>, и тэг <key>OnDemandRules</key> вместе с последующим <array/>.

Ответить
Развернуть ветку
Astrabeenabout

К

Ответить
Развернуть ветку
Alexey Rudakovsky

Спасибо

Ответить
Развернуть ветку
Oleg Shorokhov

У Timeweb очень удобно сделано. Не нужно никакие SSH настраивать и всякой технических шутк.
Здесь описано: https://timeweb.cloud/docs/timeweb-private-vpn/vpn-wireguard-gui-setup?i=107589

Ответить
Развернуть ветку
Это Олег

Сентябрь 2023 - работает стабильно.
Однако возникли вопросы:

• Если есть потребность в изменении числа MTU ? На выходе оно становится 1280 а хочу например 1500 поставить, как это сделать?

• Так же есть ли умельцы, кто уже реализовал мост к другому серверу, а-ля дабл впн?

Благодарю за ответы:)

Ответить
Развернуть ветку
Mozo Cruo

Сегодня 01.10.23 примерно за 40 минут пошагово выполнил данную инструкцию и всё заработало с первого раза. Автору большое спасибо.

Ответить
Развернуть ветку
Степан Шеремет

вроде все делаю по шагам, обе проверки показали, что все работает. Но ни айфон, ни мак не могут установить соединение:(

Что странно, и cyberduck не захотел соединяться во второй раз

Ответить
Развернуть ветку
Mozo Cruo

Подскажи пожалуйста, а где смотреть сколько общего трафика уже израсходовано по тарифу? В консоле Lighsail нашел только две метрики- Incoming network traffic и Outgoing network traffic, но они общий трафик не показывают. Заранее благодарен!

Ответить
Развернуть ветку
Anton

Конфигурация перестала работать на маке, после обновления mac os до 14.0. При включении сразу отваливается. Ранее работало периодами, возможно из-за блокировок. На айфоне работает отлично. Куда смотреть?

Ответить
Развернуть ветку
dfghgfd

такая же ерунда. я подозреваю что это что-то с связками ключей в ОСи, так как если удалить профиль и добавить снова, то все работает до тех пор пока не отключишь..... на Айфонах по прежнему все работает с тем же конфигом. подскажите как поправить.

Ответить
Развернуть ветку
4 комментария
Anton Tikhonenko

Попробовал собрать по инструкции. Не работает. Как писали некоторые айфон пытается подключиться, но безуспешно.
Полез в логи:
Oct 25 09:53:00 antonio charon: 10[MGR] checkout IKEv2 SA with SPIs 2a7f6efac59eadae_i 14a0f4c6f2519320_r
Oct 25 09:53:00 antonio charon: 10[MGR] IKE_SA ikev2-pubkey[288] successfully checked out
Oct 25 09:53:00 antonio charon: 10[IKE] giving up after 5 retransmits
Oct 25 09:53:00 antonio charon: 10[MGR] checkin and destroy IKE_SA ikev2-pubkey[288]
Oct 25 09:53:00 antonio charon: 10[IKE] IKE_SA ikev2-pubkey[288] state change: ESTABLISHED => DESTROYING
Oct 25 09:53:00 antonio charon: 10[CFG] lease 10.10.10.61 by 'me' went offline
Oct 25 09:53:00 antonio charon: 10[MGR] checkin and destroy of IKE_SA successful
Oct 25 09:53:01 antonio charon: 09[MGR] checkout IKEv2 SA with SPIs 807f84b556c6e401_i 92a4462bfda405a5_r
Oct 25 09:53:01 antonio charon: 09[MGR] IKE_SA ikev2-pubkey[289] successfully checked out
Oct 25 09:53:01 antonio charon: 09[IKE] giving up after 5 retransmits
Oct 25 09:53:01 antonio charon: 09[MGR] checkin and destroy IKE_SA ikev2-pubkey[289]
Oct 25 09:53:01 antonio charon: 09[IKE] IKE_SA ikev2-pubkey[289] state change: ESTABLISHED => DESTROYING
Oct 25 09:53:01 antonio charon: 09[CFG] lease 10.10.10.62 by 'me' went offline
Oct 25 09:53:01 antonio charon: 09[MGR] checkin and destroy of IKE_SA successful
Oct 25 09:53:13 antonio charon: 15[MGR] checkout IKEv2 SA with SPIs fe3adc10438a77ec_i a9a0145aa7bf2692_r
Oct 25 09:53:13 antonio charon: 15[MGR] IKE_SA checkout not successful
Oct 25 09:53:13 antonio charon: 12[MGR] checkout IKEv2 SA with SPIs ecfb269464519eb5_i d80b766fa83f28a4_r
Oct 25 09:53:13 antonio charon: 12[MGR] IKE_SA checkout not successful
В чем может быть причина?
собирал на другом сервере, может в этом причина..

Ответить
Развернуть ветку
Oleg Shorokhov

Я сделал все проще. В кабинете Аезы, выбрал VPN, оплатил. В кабинете сразу сказал ключ для Outline VPN, загрузил и все заработало. Там есть конфиг и для WireGuard.
Вот здесь https://aeza.net/?ref=404306

Ответить
Развернуть ветку
Эдуард Гадиров

1

Ответить
Развернуть ветку
Артем

Спасибо большое за подробную инструкцию. Но под Android она, к сожалению, не работает, так как в корневом сертификате зачем то указан subject DN, совпадающий с subject DN сертификата сервера. Правильнее сделать, вот так:

ipsec pki --self --ca --lifetime 3650 --in private/ca.pem \
--type rsa --digest sha256 \
--dn "CN=strongSwan Root CA" \
--outform pem > cacerts/ca.pem

После чего перегенерировать все сертификаты, согласно инструкции, и упаковать в PKCS конейнер:

openssl pkcs12 -export -inkey private/me.pem \
-in certs/me.pem -name "me" \
-certfile cacerts/ca.pem -caname "strongSwan Root CA" \
-out me.p12

Полученный файл me.p12 вместе с ca.pem передать на устройство (например, через WinSCP, потом на почту) и импортировать в клиенте StrongSwan под Android.

Ответить
Развернуть ветку
dfghgfd

Помогите!) Мак перестал подключаться (сразу же отключается). я подозреваю что это что-то с связками ключей в ОСи(но не пойму что нужно сделать), так как если удалить профиль и добавить снова, то все работает до тех пор пока не отключишь..... на Айфонах по прежнему все работает с тем же конфигом. подскажите как поправить.

Ответить
Развернуть ветку
Denis Ignatenko

Не получилось пока поправить? У меня тоже перестал работать

Ответить
Развернуть ветку
AlexName

Та же беда. Установил все на новый мак и поведение такое же как вы описали, а на старом и телефоне все по прежнему работает. Переустановка сертификатов в ключах не помогло.

Ответить
Развернуть ветку
Pierre Auger

Молодец, настроил. К телефону то его как теперь подключить? 🙈

Ответить
Развернуть ветку
Павел Поляков

По данной инструкции настроил сервер все работало корректно, сейчас с мака не подключается, сервер стоит в статусе running, с телефона подключается нормально, в чем может быть проблема?

Ответить
Развернуть ветку
Konstantin Marants

Последнюю неделю то работало то нет, а сейчас вообще перестало. Блокируют?

Ответить
Развернуть ветку
Eric Tenerman

Большое спасибо за туториал все получилось. Все работает исправно на wi-fi правда есть одна проблема мой оператор (мтс) блокирует подключение и не дает подключится к арендуемому серверу (использую amazon web services). Я знаю что есть возможность использовать сторонние DNS и таким образом обойти блокировку. Не можете ли подсказать как это сделать в данном туториале?

Ответить
Развернуть ветку
Михаил Инетовский

Почему это выглядит так заезжено и избито?

Ответить
Развернуть ветку
Akim Kasabulatov

Олег, а вы читали политику и правила данных сервисов? Не на всех разрешается VPN разворачивать.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
218 комментариев
Раскрывать всегда