June 7, 2023

VPN для друзей. Раздаем наш VPN сервер с оплатой через Telegram

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

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

Чтобы создать свой собственный VPN, вам нужно повозиться с командной строкой. Таким гикам, как мы с вами, нравится это занятие: я, не имея опыта, взялся за такую ​​услугу за один вечер. Друзья начали спрашивать, можно ли им получить такую ​​же быструю, надежную и дешевую услугу. Однако никто из них не захотел копаться в настройках.

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

Предупреждение

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

Почему WireGuard?

Я выбрал WireGuard из-за этого скорость по сравнению с OpenVPN и IPSec. Просто посмотрите на эти графики.

Пропускная способность (мегабит в секунду), тест iPerf3

Тесты показывают похожую статистику Протектли и Энтростат. В Linux WireGuard работает на уровне ядра, что обеспечивает дополнительный прирост скорости.

В WireGuard не так много асимметричных шифров, как в OpenVPN и других протоколах. Но это и плюс: на протокол меньше поверхности атаки.

Панель администрирования и бот в Telegram

Так как же выглядит взаимодействие пользователя с моим ботом? Начнем с главного меню.

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

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

Оплата производится онлайн, через сам Telegram. Следовательно, мы можем выбрать любую платежную систему, с который сотрудничает с Telegram.

Информация

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

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

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

И, наконец, самая важная часть — это «Панель администратора», доступ к которой есть только у администратора бота.

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

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

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

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

Настройка бота

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

Начнем с настроек бота. Первая конфигурация называется config.jsonон содержит основные настройки бота.

{

"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 можно у бота информационный бот пользователя.

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 и написать /mybots. Затем выберите нужного бота и перейдите в раздел «Платежи». Здесь вы можете ознакомиться со всеми доступными платежными системами и научиться их подключать. После подключения к платежной системе вернитесь в BotFather. Наш Дорогой Ключ должен появиться в разделе Платежи.

И последний конфигурационный файл содержит текст сообщений, которые бот отправляет пользователям. Сообщения можно форматировать с помощью 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.

Исходник

Скачать