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
он содержит основные настройки бота.
"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.