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

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

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

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

warning

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

 

Почему именно WireGuard?

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

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

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

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

 

Админ-панель и бот в Telegram

Итак, как для поль­зовате­ля выг­лядит обще­ние с моим ботом? Нач­нем зна­комс­тво с глав­ного меню.

Главное меню
Глав­ное меню

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

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

Выбор варианта подписки
Вы­бор вари­анта под­писки

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

info

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

Подписаться
Уведомить о
25 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии