262 lines
7.9 KiB
Markdown
262 lines
7.9 KiB
Markdown
# Initializator
|
||
|
||
Набор скриптов для быстрой настройки нового VPS-сервера с нуля: файрвол, веб-сервер, SSL и VPN.
|
||
|
||
## Требования
|
||
|
||
- Ubuntu / Debian
|
||
- root-доступ
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
git clone <repo> && cd initializator
|
||
```
|
||
|
||
### 1. Базовая настройка
|
||
|
||
```bash
|
||
sudo bash common.sh # UFW-файрвол (deny incoming, allow SSH)
|
||
sudo bash nginx.sh # Nginx + правила UFW
|
||
sudo bash certbot.sh # Certbot для SSL-сертификатов
|
||
```
|
||
|
||
### 2. Сервисы
|
||
|
||
| | `vless.sh` | `vless_ip.sh` | `mtp.sh` |
|
||
|---|---|---|---|
|
||
| Назначение | VLESS VPN | VLESS VPN | MTProto Proxy (Telegram) |
|
||
| Подключение | По домену | По IP-адресу | По домену |
|
||
| Транспорт | WebSocket | TCP | TCP (fake-TLS) |
|
||
| Шифрование | TLS (Let's Encrypt) | Reality (XTLS) | Fake-TLS |
|
||
| Nginx | Нужен (проксирует WS) | Не нужен | Stream SNI routing |
|
||
| Маскировка | Обычный HTTPS-сайт | TLS-хендшейк с реальным сайтом | TLS-хендшейк с заданным доменом |
|
||
|
||
## Скрипты
|
||
|
||
### `common.sh`
|
||
|
||
Устанавливает и настраивает UFW:
|
||
|
||
- deny incoming / allow outgoing
|
||
- Открывает порт 22 (SSH)
|
||
|
||
### `nginx.sh`
|
||
|
||
- Устанавливает Nginx (если не установлен)
|
||
- Включает автозапуск
|
||
- Открывает порты 80/443 в UFW
|
||
|
||
### `certbot.sh`
|
||
|
||
- Устанавливает Certbot + плагин для Nginx
|
||
|
||
### `vless.sh` — VLESS + WebSocket + TLS (по домену)
|
||
|
||
Поднимает Xray-core за Nginx с WebSocket-транспортом и настоящим TLS-сертификатом.
|
||
|
||
**Переменные `.env`:**
|
||
|
||
```env
|
||
DOMAIN=example.com
|
||
VLESS_WS_PATH=stream
|
||
PORT=10001
|
||
```
|
||
|
||
**Что делает:**
|
||
|
||
1. Скачивает Xray-core с GitHub в `~/services/vless`
|
||
2. Генерирует UUID, создаёт `config.json`
|
||
3. Создаёт systemd-сервис `xray-vless`
|
||
4. Получает SSL-сертификат через Certbot (webroot)
|
||
5. Настраивает Nginx: HTTP -> HTTPS редирект, WebSocket-прокси
|
||
6. Выводит строку подключения
|
||
|
||
**Архитектура:**
|
||
|
||
```
|
||
Клиент -> :443 (Nginx, TLS) -> WS /$VLESS_WS_PATH -> :$PORT (Xray) -> интернет
|
||
```
|
||
|
||
**Строка подключения:**
|
||
|
||
```
|
||
vless://UUID@DOMAIN:443?encryption=none&security=tls&sni=DOMAIN&type=ws&path=%2FPATH#Fish-VLESS
|
||
```
|
||
|
||
**Запуск:**
|
||
|
||
```bash
|
||
sudo bash vless.sh
|
||
```
|
||
|
||
---
|
||
|
||
### `vless_ip.sh` — VLESS + Reality (по IP)
|
||
|
||
Поднимает Xray-core напрямую на порту 443 с протоколом Reality. Nginx не нужен — Xray сам обрабатывает TLS, маскируясь под реальный сайт.
|
||
|
||
**Переменные `.env`:**
|
||
|
||
```env
|
||
SERVER_IP=45.146.202.107
|
||
```
|
||
|
||
**Что делает:**
|
||
|
||
1. Скачивает Xray-core с GitHub в `~/services/vless_ip`
|
||
2. Генерирует UUID + x25519 keypair + short ID
|
||
3. Создаёт `config.json` с Reality
|
||
4. Создаёт systemd-сервис `xray-vless-ip`
|
||
5. Открывает порт 443 в UFW
|
||
6. Выводит строку подключения
|
||
|
||
**Архитектура:**
|
||
|
||
```
|
||
Клиент -> :443 (Xray, Reality/XTLS) -> интернет
|
||
|
|
||
└─ TLS fingerprint = www.kuper.ru (маскировка)
|
||
```
|
||
|
||
**Строка подключения:**
|
||
|
||
```
|
||
vless://UUID@IP:443?encryption=none&security=reality&sni=www.kuper.ru&fp=chrome&pbk=PUBLIC_KEY&sid=SHORT_ID&type=tcp&flow=xtls-rprx-vision#VLESS-Reality
|
||
```
|
||
|
||
**Запуск:**
|
||
|
||
```bash
|
||
sudo bash vless_ip.sh
|
||
```
|
||
|
||
---
|
||
|
||
### `mtp.sh` — MTProto Proxy для Telegram (по домену)
|
||
|
||
Поднимает официальный MTProto Proxy (TelegramMessenger/MTProxy) с fake-TLS и nginx stream SNI routing. Все сервисы (VLESS, MTProxy, сайты) работают на одном порту 443.
|
||
|
||
**Переменные `.env`:**
|
||
|
||
```env
|
||
MTP_DOMAIN=mtp.example.com
|
||
MTP_PORT=10002
|
||
```
|
||
|
||
**Что делает:**
|
||
|
||
1. Собирает MTProxy из исходников (C, GitHub)
|
||
2. Генерирует секрет, скачивает конфиг от Telegram
|
||
3. Создаёт systemd-сервис `mtproxy`
|
||
4. Устанавливает `libnginx-mod-stream`
|
||
5. Добавляет stream-блок в nginx для SNI-роутинга на порту 443
|
||
6. Патчит существующие HTTPS-сайты: `listen 443` -> `listen 8443`
|
||
7. Выводит ссылку для клиента и данные для MTProxy Admin Bot
|
||
|
||
**Архитектура (после установки):**
|
||
|
||
```
|
||
:443 (nginx stream, ssl_preread)
|
||
|
|
||
+-- SNI = mtp.example.com --> :10002 (MTProxy, fake-TLS)
|
||
+-- SNI = * (default) --> :8443 (nginx http, TLS termination)
|
||
|
|
||
+-- WS /path --> :10001 (Xray VLESS)
|
||
+-- / --> /var/www (static)
|
||
```
|
||
|
||
**Ссылка для клиента:**
|
||
|
||
```
|
||
tg://proxy?server=MTP_DOMAIN&port=443&secret=ee<SECRET><DOMAIN_HEX>
|
||
```
|
||
|
||
**Для MTProxy Admin Bot:** `MTP_DOMAIN:443`
|
||
|
||
**Запуск:**
|
||
|
||
```bash
|
||
sudo bash mtp.sh
|
||
```
|
||
|
||
> **Важно:** `mtp.sh` перестраивает nginx — все HTTPS-сайты переезжают на внутренний порт 8443, а порт 443 занимает stream-модуль для SNI-маршрутизации. Если `vless.sh` запускается после `mtp.sh`, он автоматически использует 8443.
|
||
|
||
---
|
||
|
||
## Файл `.env`
|
||
|
||
Создай `initializator/.env` перед запуском скриптов:
|
||
|
||
```env
|
||
# Для vless.sh (доменный вариант)
|
||
DOMAIN=example.com
|
||
VLESS_WS_PATH=stream
|
||
PORT=10001
|
||
|
||
# Для vless_ip.sh (IP вариант)
|
||
SERVER_IP=45.146.202.107
|
||
|
||
# Для mtp.sh (MTProto Proxy)
|
||
MTP_DOMAIN=mtp.example.com
|
||
MTP_PORT=10002
|
||
```
|
||
|
||
## Управление сервисами
|
||
|
||
```bash
|
||
# Статус
|
||
systemctl status xray-vless # VLESS (домен)
|
||
systemctl status xray-vless-ip # VLESS (IP)
|
||
systemctl status mtproxy # MTProto Proxy
|
||
|
||
# Перезапуск
|
||
systemctl restart xray-vless
|
||
systemctl restart xray-vless-ip
|
||
systemctl restart mtproxy
|
||
|
||
# Логи
|
||
journalctl -u xray-vless -f
|
||
journalctl -u xray-vless-ip -f
|
||
journalctl -u mtproxy -f
|
||
```
|
||
|
||
## Структура файлов на сервере
|
||
|
||
```
|
||
~/services/
|
||
├── vless/ # VLESS по домену
|
||
│ ├── xray
|
||
│ ├── config.json
|
||
│ └── connection.txt
|
||
├── vless_ip/ # VLESS по IP
|
||
│ ├── xray
|
||
│ ├── config.json
|
||
│ └── connection.txt
|
||
└── mtp/ # MTProto Proxy
|
||
├── mtproto-proxy # бинарник (собран из C)
|
||
├── proxy-secret # секрет от Telegram
|
||
├── proxy-multi.conf # конфиг от Telegram (обновляется при старте)
|
||
├── secret.txt # клиентский секрет
|
||
└── connection.txt # ссылки для подключения
|
||
|
||
/etc/systemd/system/
|
||
├── xray-vless.service
|
||
├── xray-vless-ip.service
|
||
└── mtproxy.service
|
||
|
||
/etc/nginx/
|
||
├── nginx.conf # содержит stream {} блок (после mtp.sh)
|
||
└── sites-available/
|
||
└── vless-$DOMAIN # listen 8443 (после mtp.sh)
|
||
```
|
||
|
||
## Клиенты
|
||
|
||
**VLESS** (v2rayNG, Nekoray, Streisand, V2Box и др.):
|
||
- Импорт по ссылке `vless://...`
|
||
|
||
**MTProto Proxy** (встроен в Telegram):
|
||
- Импорт по ссылке `tg://proxy?...` или `https://t.me/proxy?...`
|
||
- Настройки -> Данные и хранилище -> Прокси -> Добавить прокси
|