Возможность шифровать трафик и проксировать его через другие страны сейчас настолько необходима, что я не стану тратить твое время и в очередной раз перечислять все случаи, когда без VPN не обойтись. При этом большинство пользователей выбирают готовые сервисы: либо бесплатные, но ненадежные и со встроенной рекламой и слежкой, либо платные, но дорогие в сравнении с хостингом.
Чтобы сделать свой VPN, требуется поморочиться с командной строкой. Гикам вроде нас с тобой такое занятие в радость: я, не имея никакого опыта, поднял такой сервис за один вечер. Друзья стали спрашивать, нельзя ли и им получить такой же быстрый, надежный и дешевый сервис. Однако копаться с настройками никто из них не хотел.
Я долгое время генерил и раздавал готовые конфиги, но потом это стало надоедать. Тогда я задумал создать собственное решение с возможностью быстрого деплоя, администрированием через Telegram и временными квотами для пользователей. В этой статье я расскажу тебе о нем подробнее и поделюсь всеми нужными для деплоя исходниками.
warning
Предоставляя сторонним лицам прокси‑сервис через зарегистрированный на тебя хостинг, ты берешь на себя ответственность за все их действия в сети. Не забудь заранее обговорить, что можно делать с твоего IP-адреса, а что нельзя. А если планируешь предоставлять коммерческий сервис, подумай о составлении пользовательского соглашения, которое снимет с тебя ответственность.
Почему именно WireGuard?
Я выбрал WireGuard из‑за его скорости в сравнении с OpenVPN и IPSec. Ты только посмотри на эти графики.


Похожую статистику показывают тесты Protectli и Entrostat. В Linux WireGuard работает на уровне ядра, что дает дополнительный прирост в скорости.
В WireGuard не такой большой выбор асимметричных шифров, как в OpenVPN и других протоколах. Но это одновременно и плюс: меньше поверхность атаки на протокол.
Админ-панель и бот в Telegram
Итак, как для пользователя выглядит общение с моим ботом? Начнем знакомство с главного меню.

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

Оплата выполняется онлайн, через сам Telegram. Соответственно, мы можем выбрать любую платежную систему, с которой сотрудничает Telegram.
info
Я планировал использовать для оплаты Qiwi, так как там есть открытый API для создания счетов и не требуется становиться самозанятым или ИП. К сожалению, недавно в Qiwi приостановили выпуск необходимых токенов и не сообщают о сроках возобновления. Однако в исходниках ты найдешь вариант админской панели для Qiwi.
После того как пользователь выбрал и оплатил подписку, ему приходит сообщение об удачной оплате и сразу же обновляется информация о его подписке.

В разделе «Как подключить» пользователь может получить свой конфиг для подключения к VPN-серверу и подробную инструкцию, как настроить WireGuard на своем телефоне и как им пользоваться.

И наконец, самый главный раздел — «Админ‑панель», к которому имеет доступ только админ бота.

Раздел «Вывести пользователей» позволяет получить список всех пользователей системы или только пользователей с оплаченной подпиской.

В разделе «Редактировать пользователя по id», введя Telegram ID пользователя, мы можем добавить время или обнулить его (то есть забрать подписку).

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

Вот и всё меню. Но в боте еще есть уведомления пользователей об окончании подписки. Все тексты уведомлений можно править в файле JSON.

Настройка бота
С тем, как выглядит бот, я тебя познакомил, теперь покажу настройки и скрипт, который разворачивает и настраивает WireGuard в пару кликов.
Начнем с конфигов бота. Первый конфиг называется config.
, в нем содержатся основные настройки бота.
{ "admin_tg_id": 440887487, "one_month_cost": 120, "trial_period": 2700, "UTC_time": 3, "tg_token": "********:**************_**********", "tg_shop_token": "56456767:TEST:343455"}
-
admin_tg_id
— Telegram ID админа. Узнать свой ID можно у бота userinfobot. -
one_month_cost
— цена в рублях за месяц подписки. Минимальная сумма в рублях должна быть эквивалента одному доллару, но, как показала практика, стоит выставлять немного больше, чем актуальный курс доллара. Курс, который использует Telegram, можно узнать на официальном сайте. -
trial_period
— период пробной подписки. По умолчанию установлено 45 минут, то есть 2700 секунд. -
UTC_time
— часовой пояс в формате UTC. Бот будет учитывать его при выводе времени. По умолчанию установлено UTC+3, то есть московское время. -
tg_token
— токен бота, полученный от @BotFather. -
tg_shop_token
— токен магазина в Telegram. Нужен, если мы хотим принимать оплату. Если оставить это значение пустым, то бот просто не будет отправлять форму для оплаты и, соответственно, оплата онлайн будет недоступна.
Как получить tg_shop_token
? Переходи в Telegram к боту @BotFather и пиши /
. Затем выбирай нужного бота и переходи в раздел Payments. Тут ты можешь ознакомиться со всеми доступными платежными системами и узнать, как их подключить. После подключения платежной системы возвращайся в BotFather. В разделе Payments должен появиться наш заветный ключ.

И последний конфигурационный файл хранит в себе текст сообщений, которые бот присылает пользователям. Сообщения могут быть оформлены с применением HTML-стилей Telegram, а как ими пользоваться, можешь посмотреть в документации.
{ "hello_message": "<b>Почему стоит выбрать Obi VPN?</b>...", "trial_message": "Чтобы вы смогли оценить наш VPN...", "how_to_connect_info": "Ваш конфиг для подключения к VPN...", "success_pay_message": "Оплата прошла успешно...", "ended_sub_message": "Ваша подписка закончилась...", "alert_to_renew_sub": "До конца действия..."}
Думаю, вполне понятно, какое сообщение за что отвечает, поэтому не будем останавливаться на этом и перейдем к деплою.
Деплой
Скажу сразу, что скрипт я разрабатывал на Ubuntu и тестировал только на Ubuntu 20.04 и 22.04, поэтому не могу дать гарантии, что он заработает на какой‑то другой разновидности Linux.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее