Files
mypointvpn/README.md
T
2026-09-24 15:33:14 +04:00

337 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-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: дописать документацию
### Модель данных