С блокировкой многих ресурсов в России появилась необходимость развёртки своего сервера на собственном VPS который и так имеется. К сожалению судя по законам с 1 сентября 2023 года запрещено писать инструкции по настройке своего сервера VPN на общественных ресурсах, есть вероятность получить по попе от РНК, поэтому способ настройки самого сервера описать не могу, но мой блог и не об этом. Я занимаюсь несколькими своими проектами и, наверное, меня нельзя назвать разработчиком.

И так после настройки сервера под впн, я решил, что VPS , на котором крутится пара ботов не должен приставать и я мог бы делиться с другими людьми за символическую плату доступом к моему впн. Сразу же встал вопрос об инструменте, который в автоматическом режиме будет выдавать доступ. Я имею небольшой опыт в разработке ботов телеграмм и icq, поэтому решил сделать это именно таким способом.

Бот крайне простой, а логика работы следующая.

Нажимая команду /start люди сразу же получают доступ на чат к впн по протоколу ipsec без дополнительный приложений с рекламой или файлами openVPN. тут все завязано на самостоятельной настройке через меню настройки в телефоне или на компьютере:

тестировал только на iOS и Mac OS
тестировал только на iOS и Mac OS

Далее пользователь появляется у нас в списке в специальном чате или в личке у бота:

список пользователей
список пользователей

В данном меню можно продлить доступ, выдать, отнять и получить данные для доступа назначенные ботом, для входа. Данные я храню в sqlite, для простоты настройки бота в любом vps без поднятия сервера БД. И тут я встретился с нюансом. Судя по всему sqlite не знает что такое тип Data . По неопытности я сначала записывал сроку с датой в БД как текст, а когда извлекал ее оттуда через .split() делил на год-месяц-дату и уже работал с данным. Только сейчас я понимаю насколько затея была абсурдной. Ведь мы можем получать строку из БД и сразу присваивать ей тип Data (главное хранить строку в нужном формате):

cur.execute("SELECT t_id, datetime FROM users_subscription")
        data_cur = cur.fetchall()
        if len(data_cur) != 0:
            for data in data_cur: 
                finich_time = datetime.strptime(data[1][0:16], "%Y-%m-%d %H:%M")

И далее уже сравнивать даты как сущности дат и времени, не сравнивая каждую цифру отдельно.

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

Рефералка сделана следующим образом:

клиентская часть диалога
клиентская часть диалога

А технически это таблица в БД где хранится приглашенный и инициатор. проверка не даст еще раз провести данную манипуляцию. Проверяем одним запросом

SELECT COUT(*) FROM referal WHERE (t_id_who=" + str(message.from_user.id) + " AND t_id_whom=" + str(message.text) + ") OR (t_id_who=" + str(message.text) + " AND t_id_whom=" + str(message.from_user.id) + ");

К списку пользователей и полным контролем над их доступами, а также к реферальной программе я пришел позже, чем мог бы, прочитав подобную статью. Надеюсь кого-то статья также натолкнет на мысль. Перепродажа впн это выгодное дело для всех участников: вы как владелец окупаете vps, а при должном усердии даже можете заработать на этом, а пользователи могут пользоваться быстрым и , что не мало важно, дешевым впн. А данный способ без приложений еще и исключает удаление приложения с App Store.

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

Комментарии (1)


  1. Ninil
    15.01.2024 08:23

    Доверяться какому-то незнакомому тебе VPN - так себе идея.. Тем более читателю хабра, у которого по идее должно быть достаточно знаний, чтобы самому купить себе VPS и запустить там скрипт для настройки своего VPN.

    PS похоже авторы vc.ru массово начали писать на habr?)