[CENTER]В этой статье я покажу не только как сделать свой собственный VPN-сервис на основе WireGuard, но и как его настроить, чтобы им смогли пользоваться все твои друзья и знакомые. И даже, если пожелаешь, закидывать тебе свою долю за хостинг, пользуясь простым ботом в Telegram.
Возможность шифровать трафик и проксировать его через другие страны сейчас настолько необходима, что я не стану тратить твое время и в очередной раз перечислять все случаи, когда без VPN не обойтись. При этом большинство пользователей выбирают готовые сервисы: либо бесплатные, но ненадежные и со встроенной рекламой и слежкой, либо платные, но дорогие в сравнении с хостингом.
Чтобы сделать свой VPN, требуется поморочиться с командной строкой. Гикам вроде нас с тобой такое занятие в радость: я, не имея никакого опыта, поднял такой сервис за один вечер. Друзья стали спрашивать, нельзя ли и им получить такой же быстрый, надежный и дешевый сервис. Однако копаться с настройками никто из них не хотел.
Я долгое время генерил и раздавал готовые конфиги, но потом это стало надоедать. Тогда я задумал создать собственное решение с возможностью быстрого деплоя, администрированием через Telegram и временными квотами для пользователей. В этой статье я расскажу тебе о нем подробнее и поделюсь всеми нужными для деплоя исходниками.
[/CENTER]
[HEADING=3][CENTER]WARNING[/CENTER][/HEADING]
[CENTER]Предоставляя сторонним лицам прокси‑сервис через зарегистрированный на тебя хостинг, ты берешь на себя ответственность за все их действия в сети. Не забудь заранее обговорить, что можно делать с твоего IP-адреса, а что нельзя. А если планируешь предоставлять коммерческий сервис, подумай о составлении пользовательского соглашения, которое снимет с тебя ответственность.
[/CENTER]
[HEADING=2][CENTER]ПОЧЕМУ ИМЕННО WIREGUARD?[/CENTER][/HEADING]
[CENTER]Я выбрал WireGuard из‑за его [URL='https://www.wireguard.com/performance/']скорости[/URL] в сравнении с OpenVPN и IPSec. Ты только посмотри на эти графики.
[IMG alt="perfomance-test-throughput.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31222/perfomance-test-throughput.png[/IMG]
[IMG alt="perfomance-test-pingt.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31221/perfomance-test-pingt.png[/IMG]
Похожую статистику показывают тесты Protectli и Entrostat. В Linux WireGuard работает на уровне ядра, что дает дополнительный прирост в скорости.
В WireGuard не такой большой выбор асимметричных шифров, как в OpenVPN и других протоколах. Но это одновременно и плюс: меньше поверхность атаки на протокол.
[/CENTER]
[HEADING=2][CENTER]АДМИН-ПАНЕЛЬ И БОТ В TELEGRAM[/CENTER][/HEADING]
[CENTER]Итак, как для пользователя выглядит общение с моим ботом? Начнем знакомство с главного меню.
[IMG alt="first-start.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31217/first-start.png[/IMG]
При первом входе пользователь получает приветственное сообщение от бота и тестовую подписку. В конфигах бота ты сможешь сам задать все тексты и параметры вроде времени, на которое предоставляется тестовая подписка.
В главном меню пользователь может ознакомиться со статусом своей подписки, продлить ее и получить конфиг с подробной инструкцией для подключения, а в разделе «Продлить» — приобрести подписку на определенное время.
[IMG alt="bot-pay-1.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31219/bot-pay-1.png[/IMG]
Оплата выполняется онлайн, через сам Telegram. Соответственно, мы можем выбрать любую платежную систему, с которой сотрудничает Telegram.
[/CENTER]
[HEADING=3][CENTER]INFO[/CENTER][/HEADING]
[CENTER]Я планировал использовать для оплаты Qiwi, так как там есть открытый API для создания счетов и не требуется становиться самозанятым или ИП. К сожалению, недавно в Qiwi приостановили выпуск необходимых токенов и не сообщают о сроках возобновления. Однако в исходниках ты найдешь вариант админской панели для Qiwi.
После того как пользователь выбрал и оплатил подписку, ему приходит сообщение об удачной оплате и сразу же обновляется информация о его подписке.
[IMG alt="payment-okey.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31218/payment-okey.png[/IMG]
В разделе «Как подключить» пользователь может получить свой конфиг для подключения к VPN-серверу и подробную инструкцию, как настроить WireGuard на своем телефоне и как им пользоваться.
[IMG alt="how-to-connect.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31216/how-to-connect.png[/IMG]
И наконец, самый главный раздел — «Админ‑панель», к которому имеет доступ только админ бота.
[IMG alt="admin-panel-main.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31215/admin-panel-main.png[/IMG]
Раздел «Вывести пользователей» позволяет получить список всех пользователей системы или только пользователей с оплаченной подпиской.
[IMG alt="show-users.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31214/show-users.png[/IMG]
В разделе «Редактировать пользователя по id», введя Telegram ID пользователя, мы можем добавить время или обнулить его (то есть забрать подписку).
[IMG alt="edit-user-by-id.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31213/edit-user-by-id.png[/IMG]
Раздел «Статичные пользователи» может понадобиться для предоставления доступа к VPN пользователям, которые не зарегистрированы в Telegram. В этом разделе мы можем создавать статичных пользователей, удалять их и получать конфиги для подключения.
[IMG alt="static-users.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31212/static-users.png[/IMG]
[/CENTER]
[HEADING=2][CENTER]НАСТРОЙКА БОТА[/CENTER][/HEADING]
[CENTER]С тем, как выглядит бот, я тебя познакомил, теперь покажу настройки и скрипт, который разворачивает и настраивает WireGuard в пару кликов.
Начнем с конфигов бота. Первый конфиг называется config.json, в нем содержатся основные настройки бота.
{
"admin_tg_id": 440887487,
"one_month_cost": 120,
"trial_period": 2700,
"UTC_time": 3,
"tg_token": "********:[B][B][B][B][B]****_[/B][/B][/B][/B][/B]",
"tg_shop_token": "56456767:TEST:343455"
}
[/CENTER]
[LIST]
[*][CENTER]admin_tg_id — Telegram ID админа. Узнать свой ID можно у бота [URL='https://t.me/userinfobot']userinfobot[/URL].[/CENTER]
[*][CENTER]one_month_cost — цена в рублях за месяц подписки. Минимальная сумма в рублях должна быть эквивалента одному доллару, но, как показала практика, стоит выставлять немного больше, чем актуальный курс доллара. Курс, который использует Telegram, можно узнать на [URL='https://core.telegram.org/bots/payments#supported-currencies']официальном сайте[/URL].[/CENTER]
[*][CENTER]trial_period — период пробной подписки. По умолчанию установлено 45 минут, то есть 2700 секунд.[/CENTER]
[*][CENTER]UTC_time — часовой пояс в формате UTC. Бот будет учитывать его при выводе времени. По умолчанию установлено UTC+3, то есть московское время.[/CENTER]
[*][CENTER]tg_token — токен бота, полученный от [URL='https://t.me/BotFather']@BotFather[/URL].[/CENTER]
[*][CENTER]tg_shop_token — токен магазина в Telegram. Нужен, если мы хотим принимать оплату. Если оставить это значение пустым, то бот просто не будет отправлять форму для оплаты и, соответственно, оплата онлайн будет недоступна.[/CENTER]
[/LIST]
[CENTER]Как получить tg_shop_token? Переходи в Telegram к боту [URL='https://t.me/BotFather']@BotFather[/URL] и пиши /mybots. Затем выбирай нужного бота и переходи в раздел Payments. Тут ты можешь ознакомиться со всеми доступными платежными системами и узнать, как их подключить. После подключения платежной системы возвращайся в BotFather. В разделе Payments должен появиться наш заветный ключ.
[IMG alt="example-pay-token.png"]https://static.xakep.ru/images/2f71a7fef2668075dab93a6a7c16fc42/31209/example-pay-token.png[/IMG]
И последний конфигурационный файл хранит в себе текст сообщений, которые бот присылает пользователям. Сообщения могут быть оформлены с применением HTML-стилей Telegram, а как ими пользоваться, можешь посмотреть в [URL='https://core.telegram.org/bots/api#html-style']документации[/URL].
{
"hello_message": "Почему стоит выбрать Obi VPN?...",
"trial_message": "Чтобы вы смогли оценить наш VPN...",
"how_to_connect_info": "Ваш конфиг для подключения к VPN...",
"success_pay_message": "Оплата прошла успешно...",
"ended_sub_message": "Ваша подписка закончилась...",
"alert_to_renew_sub": "До конца действия..."
}
Думаю, вполне понятно, какое сообщение за что отвечает
[/CENTER]
👍222
🔥26
😁41
😮41
👏17
🤔33
👎22
LIMB