My Point VPN

Intro

Предоставляет интерфейс чат бота в телеграмм посредством которого позволяет разворачивать 3x-ui на своем сервере и выпускать ключи.

Базово конфигурируется 3x-ui на создание vless подключений с tls+reality маскировкой трафика. Настраивается dns, подписка и базовая безопасность сервера. Пользователь может прикрутить прокси на выход или включить cf_warp прокси. По каждому серверу дает базовую статистику у ручки управления.

Если вам нужен приватный доступ в интернет, передайте сервер боту и он настроит вам его. Выглядит это так: пользователь заводит аккаунт хостинг провайдера, арендует сервер, ему выдают ip и пароль root, он передает их боту, оный настраивает сервер, теперь пользователь может выпускать ключи vless и подключаться к интернету безопасно и приватно.

  • статистика сервера:
    • сколько трафика пропустил
    • сколько пользователей
    • можно добавить пользователя
  • статистика по пользователю:
    • онлайн?
    • сколько трафика пропустил
    • можно удалить пользователя

Серверу можно настроить:

  • прокси на выходе (cf или свои)
  • домен (можно спрятать за cf, сертификат получим у certbot)

Окружение

  • Linux Mint 22
  • Python 3.12.3
  • PyCharm 2026.2.1

Интерфейс чата

Переход в главное меню должен быть реализован кнопкой в клавиатуре. /start и кнопка "главное меню" должны выполняться одним методом.

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

---> 
/start
<---
привет. выбери действие
[ФАК][добавить сервер][помощь]

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

Меню добавления сервера
--->
добавить сервер
<---
Сервер: -
Сервер маскировки: -
Домен: -
Cloudflare: -
Прокси: -
[домен][cloudflare][прокси][маскировка]
[отмена][установить][сервер][помощь]
--->
сервер/маскировка
<---
отправь данные для подключения к серверу
`ip:root_password`
[отмена]

После получения данных выполняется процесс настройки сервера. Этот процесс занимает время, поэтому выполняется в фоне.

--->
127.0.0.1:toor
<---
Сервер: 127.0.0.1 - $(uname -a)
Домен: -
Cloudflare: -
Прокси: -
[домен][cloudflare][прокси]
[отмена][установить][сервер]
--->
cloudflare
<---
Если вы спрятали домен за клаудом, то нужно включить опцию тут.
[включить][отмена]
--->
включить
<---
Сервер: 127.0.0.1 - $(uname -a)
Домен: -
Cloudflare: Да
Прокси: -
[домен][cloudflare][прокси]
[отмена][установить][сервер]
--->
прокси
<---
Можно указать свои или включить cf_warp.
[cf_warp][отмена][удалить]
--->
http://127.0.0.1:9050
<---
Сервер: 127.0.0.1 - $(uname -a)
Домен: -
Cloudflare: Да
Прокси: 127.0.0.1:9050
[домен][cloudflare][прокси]
[отмена][установить][сервер]
--->
установить
<---
Запускаю установку сервера. Отправлю уведомление когда все будет готово.

А по окончании генерируется уведомление.

--->
<---
сервер ip - проименован как `NAME`, готов к работе.
[меню сервера]
Меню

Пользователь опять отправляет /start это нормально, так он получает главное меню с перечислением его серверов.

--->
/start
<---
server_name	0Mb/0Mb	0/0
[ФАК][добавить сервер][помощь][управление сервером]

Чтобы перейти к управлению сервером нужно вот такой квест пройти, надо все эти id в копируемый pre сунуть.

--->
управление сервером
<---
Пришлите server_name
[отмена]
Меню управления сервером
--->
меню сервера
<---
Сервер: NAME
Состояние: активен
Ключи: 0/0
Домен: -
Прокси: -
[Вернуть][Переустановить]
[Домен][Прокси][Cloudflare]
[Клиенты]

Ключи отображаются онлайн/оффлайн.

Возврат сервера связан с отключением его от платформы. Доступы к серверу изымаются, ставится новый пароль рута, а данные остаются как есть. Просто отдаем сервер назад.

--->
Вернуть
<---
Сервер будет освобожден из-под моего контроля, 
будет установлен случайный пароль рута,
мои доступы будут убраны, данные на сервере сохранены.
Будет отправлено уведомление с новым паролем. Продолжить?
[Да][Нет]

Возможно потребуется переустановка после сброса сервера. Бывает такое когда это нужно. Обычно после сброса сервера задается новый пароль.

--->
Переустановить
<---
Будет произведена повторная установка всех компонентов.
Вызывайте эту функцию, только после того, как в панеле управления 
сервером в аккаунте хостинг провайдера вызовите переустановку сервера.
Если уверены, то пришлите новый пароль сервера.
[Отмена][Использовать старый]

Меню управления доменом. После установки выпускаются ссл сертификаты, а если домена нет, то сертификат выпускаем на ip.

--->
Домен
<---
Сейчас установлен: -
Доменное имя лучше подходит для маскировки вашей точки доступа.
[установить][отключить]

Прокси полезно ставить. Есть 2 варианта, когда пользователь покупает прокси и задает их тут, или когда активирует cf_warp.

--->
Прокси
<---
Сейчас установлено: -
Позволяют маскировать ip адрес вашей точки доступа от сайтов, 
которые посещаются.

X -> Cloudflare <> MyPoint <> PROXY <- Web

X через домен видит ip от cloudflare, а web сайты видят ip прокси, 
это позволяет вашей точке доступа оставаться инкогнито. 

[установить][отключить]
--->
установить
<---
пришли прокси в формате `protocol://username:password@host:port` или нажми кнопку.
[cloudflare warp][отмена]

Еще одна полезная возможность это скрытие ip за cloudflare. И для этого тоже будет меню.

--->
Cloudflare
<---
Сейчас активировано: Нет
Позволяет защитить ip адрес вашей точки доступа от клиентов, 
которые к ней подключаются.

X -> Cloudflare <> MyPoint <> PROXY <- Web

[установить][отключить]
Меню управления клиентами
--->
Клиенты
<---
id	0/0Mb	On
[добавить][удалить][получить ключ]
--->
удалить
<---
Чтобы удалить клиента пришлите его id
[отмена]
--->
добавить
<---
если хотите, можете сами установить id
[сгенерируй]

Далее пользователь либо отправляет текст, который будет использован как id для нового клиента, либо сгенерирует новый уникальный id и вернет ключ.

Настройка сервера

Чтобы сервера были в безопасности их следует правильно настроить. От пользователя ожидается на вход девственный сервер с только что установленной операционной системой.

  1. Конфигурирование ssh
  2. Смена пароля рута
  3. Конфигурирование nftables
  4. Обновление операционной системы
  5. Установка 3x-ui
  6. Выпуск сертификата
  7. Настройка vless+tls+reality
  8. Настройка прокси

Функционал бота

Добавление сервера

Сервер добавляется после установки ОС. Для бота требуется, чтобы ОС была debian-12 или debian-13. Свежий сервер:

  • открыт публично 22 порт ssh
  • имеет ip
  • рут может войти по ssh используя пароль

Алгоритм действий для нового сервера, чтобы включить его в работу.

  1. Заходим на сервер по паролю
  2. прописываем ему свой ключ
  3. меняем пароль, но сохраняем оба
  4. Выполняем обновление системы apt update -y && apt dist-upgrade -y
  5. Настраиваем ssh
    1. отключаем вход по паролю
    2. жестко фиксируем авторизацию только по ключам
    3. меняем порт
    4. сохраняем конфиг sshd, перезапускаем сервис, проверяем коннект
  6. Настраиваем nftables

Система общается с сервером только через авторизацию по ssh ключам. Когда пользовать захочет вернуть сервер себе, следует:

  1. Откатываем настройки ssh
  2. Сбросить nftables
  3. Удалить файл /root/.ssh/authorized_keys
  4. Отдать ip:password

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

Пакет также занимается и настройкой серверов базово. И позволяет сделать из сервера прокси или панель 3x-ui. Для наших целей требуется оба и в интерфейсе добавления сервера есть пункт "Сервер маскировки" - это сервер из которого нужно сделать прозрачный прокси. В App заводим модель в которой объединяем эти 2 сервера в единую систему. Так как кнопка "Вернуть" вернет оба сервера и они связаны настройками маршрутизации.

# TODO: дописать документацию

Модель данных

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

  • telegram user id - запоминаем id пользователя телеграм

Точка - наша выдуманная абстракция, чтобы объединить в группу (кластер) 2 сервера. Домен. Прокси (или аккаунт cf_warp).

  • сервер 3x-ui - обязательно должен быть, ради него все и затевается
  • сервер маскировки - если пользователь хочет особый режим, то он может добавить еще один сервер купленный в своей стране
  • домен - если сервер маскировки указан, то домен обязательно нужно указать
  • ssl сертификаты - если домен не указан, то сертификаты выпускаются на IP сервера 3x-ui, а сервера маскировки нет; а если домен есть то он привязывается к серверу маскировки и на него выпускаются ssl ключи, который хранятся на сервере 3x-ui, потому что сервер маскировки лишь прозрачно проксирует
  • ssh ключи - доступ к серверам, находящимся под нашей ведомостью, всегда осуществляется асимметричным способом (ключ-файл)
  • прокси - можно задать свои и с авторизацией, а можно воспользоваться cf_warp прокси, которые можно регистрировать автоматически через x-ui

Сервер - реальные сервера с ip и доступом к root. Настраиваем безопасное окружение по всем канонам.

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

S
Description
ТГ бот который умеет настраивать 3x-ui под маскировку трафика.
Readme
289 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 94.8%
Makefile 2.8%
Shell 1.1%
Dockerfile 0.9%
Jinja 0.4%