Docs/docs/04b-olimpvpn.md
2026-03-25 13:41:37 +05:00

414 lines
14 KiB
Markdown
Raw Permalink 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.

# OlimpVPN — внешний VPN-сервер
**Сервер**: 2.27.50.20 (Финляндия, VPS)
**Домен**: charon.zailon.ru
**Протокол**: VLESS + Reality + XHTTP
**Порт VPN**: 2054
**Панель управления**: https://charon.zailon.ru:45131/olimp-styx/
---
## 📋 Содержание
1. [Назначение](#назначение)
2. [Архитектура](#архитектура)
3. [Установка и настройка](#установка-и-настройка)
4. [Конфигурация Xray](#конфигурация-xray)
5. [Управление клиентами](#управление-клиентами)
6. [Бэкапы и восстановление](#бэкапы-и-восстановление)
7. [Мониторинг](#мониторинг)
8. [Решение проблем](#решение-проблем)
---
## Назначение
OlimpVPN — внешний VPN-сервер на базе 3X-UI (Xray-core), предназначенный для:
- **Обхода географических блокировок** (YouTube, стриминговые сервисы)
- **Защиты трафика** в ненадёжных сетях (общественный Wi-Fi, мобильный интернет)
- **Доступа к домашней инфраструктуре** через LXC-контейнер с прокси (media, 192.168.1.203)
**Отличие от домашнего OpenVPN:**
| Параметр | OpenVPN (домашний) | OlimpVPN (внешний) |
|----------|-------------------|-------------------|
| **Расположение** | 192.168.1.1 (роутер) | 2.27.50.20 (Финляндия) |
| **Назначение** | Доступ к домашней сети | Обход блокировок, анонимность |
| **Протокол** | OpenVPN (UDP 1194) | VLESS + Reality + XHTTP (TCP 2054) |
| **Маскировка** | Нет | Reality (маскировка под HTTPS) |
| **Клиенты** | Доступ к 192.168.1.0/24 | Доступ в интернет через VPS |
---
## Архитектура
```mermaid
graph LR
Client[Клиент] -->|VLESS:2054| OlimpVPN[OlimpVPN 2.27.50.20]
OlimpVPN -->|Reality| Target[cloud.zailon.ru:443]
OlimpVPN -->|Прокси| Internet[Интернет]
OlimpVPN -->|Xray-прокси| LXC[LXC media 192.168.1.203]
LXC -->|yt-dlp| YouTube[YouTube]
```
### Компоненты
| Компонент | Версия | Назначение |
|-----------|--------|------------|
| **3X-UI** | latest (Docker) | Панель управления Xray |
| **Xray-core** | 26.2.6+ | Ядро обработки трафика |
| **Docker** | latest | Контейнеризация 3X-UI |
| **Nginx** | системный | SSL для панели (Let's Encrypt) |
| **Certbot** | системный | Автообновление SSL |
### Сетевая схема
```mermaid
graph TD
subgraph "Внешний мир"
Internet[Интернет]
Cloudflare[Cloudflare]
end
subgraph "VPS Финляндия (2.27.50.20)"
Xray[Xray:2054]
Panel[3X-UI:45131]
Cert[Certbot:80/443]
end
subgraph "Домашняя сеть (192.168.1.0/24)"
LXC[LXC media: xray-прокси]
NPM[Nginx Proxy Manager]
NC[Nextcloud]
end
Client[Клиент VPN] -->|HTTPS| Xray
Client -->|HTTPS| Panel
Xray -->|Reality SNI| Cloudflare
Xray -->|Прокси| Internet
LXC -->|Xray-туннель| Xray
NPM -->|SSL| Panel
```
---
## Установка и настройка
### Требования
- VPS с Debian/Ubuntu (минимум 1 ядро, 512 МБ ОЗУ, 10 ГБ диск)
- Домен с A-записью на IP сервера
- Открытые порты: 80, 443, 2054, 45131
### 1. Установка Docker и 3X-UI
```bash
# Создаем директорию
mkdir -p /opt/3x-ui
cd /opt/3x-ui
# Создаем docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
3xui:
image: ghcr.io/mhsanaei/3x-ui:latest
container_name: 3xui_app
hostname: OlimpVPN
volumes:
- $PWD/db/:/etc/x-ui/
- $PWD/cert/:/root/cert/
environment:
XRAY_VMESS_AEAD_FORCED: "false"
XUI_ENABLE_FAIL2BAN: "true"
tty: true
network_mode: host
restart: unless-stopped
EOF
# Запускаем
docker compose up -d
```
### 2. Настройка SSL сертификата
```bash
# Устанавливаем certbot
apt update && apt install certbot python3-certbot-nginx -y
# Получаем сертификат
certbot --nginx -d charon.zailon.ru \
--email zailon@bk.ru \
--agree-tos \
--non-interactive
# Копируем в папку 3X-UI
mkdir -p /opt/3x-ui/cert
cp /etc/letsencrypt/live/charon.zailon.ru/fullchain.pem /opt/3x-ui/cert/public.crt
cp /etc/letsencrypt/live/charon.zailon.ru/privkey.pem /opt/3x-ui/cert/private.key
chmod 644 /opt/3x-ui/cert/public.crt
chmod 600 /opt/3x-ui/cert/private.key
# Перезапускаем контейнер
docker restart 3xui_app
```
### 3. Настройка панели 3X-UI
1. Откройте: `https://charon.zailon.ru:45131/olimp-styx/`
2. Логин/пароль по умолчанию: `admin/admin`
3. **Смените пароль немедленно!**
#### Основные настройки панели
| Параметр | Значение |
|----------|----------|
| Домен панели | charon.zailon.ru |
| Порт панели | 45131 |
| Корневой путь URL | /olimp-styx/ |
| Продолжительность сессии | 360 минут |
| URI подписки | /charon-cerber/ |
#### Настройка сертификатов
| Параметр | Значение |
|----------|----------|
| Путь к публичному ключу | /root/cert/public.crt |
| Путь к приватному ключу | /root/cert/private.key |
---
## Конфигурация Xray
### Inbound настройки (ID: 1)
| Параметр | Значение |
|----------|----------|
| Название | OlimpVpn |
| Протокол | VLESS |
| Порт | 2054 |
| Транспорт | XHTTP |
| Безопасность | Reality |
### Reality параметры
```yaml
Target: cloud.zailon.ru:443
SNI: cloud.zailon.ru
uTLS: chrome
Public Key: TOyddQCTdSpycmO20uiLOqMABuKabpwVhw57tWmvJws
Private Key: uLdWyWif7JrihRy49jTJmBMasEWyElsIXiuQkxwQVm8
Short IDs:
- 174fc0
- 568a8044d80a
- b211
- 2fbcaed79
- 1b4d7dd
- 04c250ad0b
- 4260c819008e7
SpiderX: /
```
### XHTTP параметры
```yaml
Path: /remote.php/dav/upload
Mode: stream-one
Padding Bytes: 100-1000
Uplink HTTP Method: POST
Session Placement: Default (path)
Sequence Placement: Default (path)
```
### Открытые порты на VPS
```bash
22 - SSH
80 - HTTP (для получения SSL)
443 - HTTPS (для панели и веб-трафика)
2054 - VLESS VPN (основной порт)
45131 - Панель 3X-UI
2096 - Внутренний порт 3X-UI (localhost)
```
---
## Управление клиентами
### Добавление нового клиента
1. В панели 3X-UI: **Inbounds****OlimpVpn****Клиенты**
2. Нажмите **+ Добавить клиента**
3. Заполните:
- **Email**: имя-клиента (например: `user-tel`, `user-comp`)
- **Лимит трафика**: 0 (безлимитно) или укажите в ГБ
- **Срок действия**: никогда или выберите дату
4. Нажмите **OK**
### Генерация ссылки подключения
1. Найдите клиента в списке
2. Нажмите на иконку **QR Code** (📱)
3. Скопируйте ссылку VLESS или отсканируйте QR-код
#### Формат ссылки VLESS
```
vless://UUID@2.27.50.20:2054?type=xhttp&encryption=none&path=%2Fremote.php%2Fdav%2Fupload&security=reality&pbk=PUBLIC_KEY&fp=chrome&sni=cloud.zailon.ru&sid=SHORT_ID&sp=%2F#ClientName
```
#### Пример для Hiddify / v2rayNG
```
vless://68f44a38-396d-48da-b832-79b5dc5716ab@2.27.50.20:2054?type=xhttp&encryption=none&path=%2Fremote.php%2Fdav%2Fupload&security=reality&pbk=TOyddQCTdSpycmO20uiLOqMABuKabpwVhw57tWmvJws&fp=chrome&sni=cloud.zailon.ru&sid=174fc0&sp=%2F#OlimpVpn-client
```
### Автоматическая подписка
Клиенты могут использовать автоматическую подписку для обновления конфигурации:
```
https://charon.zailon.ru:45131/charon-cerberus/CLIENT_ID
```
Где `CLIENT_ID` — уникальный идентификатор клиента (указан в панели 3X-UI).
---
## Бэкапы и восстановление
### Автоматические бэкапы
| Параметр | Значение |
|----------|----------|
| **Скрипт** | `/opt/3x-ui/backup.sh` |
| **Расписание** | `0 3 * * 0` (воскресенье, 03:00 +05) |
| **Локальное хранилище** | `/opt/3x-ui/backups/` |
| **Nextcloud** | `nc.zailon.ru/Admin/Домашний Сервер/OlimpBackup/OlimpVPN/` |
| **Состав бэкапа** | `db/`, `cert/`, `docker-compose.yml` |
| **Хранение локально** | 30 дней |
### Ручной запуск бэкапа
```bash
/opt/3x-ui/backup.sh
```
### Восстановление из бэкапа
```bash
# 1. Скачать последний бэкап с Nextcloud
LATEST=$(curl -s -u "Zailon:TOKEN" \
"https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/" \
-X PROPFIND -H "Depth: 1" | \
grep -oP '3x-ui_backup_\d+_\d+\.tar\.gz' | tail -1)
curl -s -u "Zailon:TOKEN" \
"https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/${LATEST}" \
-o /tmp/restore.tar.gz
# 2. Остановить сервис
cd /opt/3x-ui && docker compose down
# 3. (Опционально) Создать резервную копию текущей конфигурации
tar -czf /opt/3x-ui/pre_restore_$(date +%Y%m%d).tar.gz -C /opt/3x-ui db cert docker-compose.yml
# 4. Восстановить файлы
tar -xzf /tmp/restore.tar.gz -C /opt/3x-ui/
chown -R root:root /opt/3x-ui/
chmod 600 /opt/3x-ui/cert/private.key
# 5. Запустить сервис
docker compose up -d
# 6. Проверить статус
docker ps | grep 3xui
docker logs 3xui_app --tail 20
```
---
## Мониторинг
```bash
# Логи бэкапа
tail -f /var/log/3x-ui-backup.log
# Локальные бэкапы
ls -lh /opt/3x-ui/backups/
# Проверка на Nextcloud (WebDAV)
curl -u "Zailon:TOKEN" \
"https://nc.zailon.ru/remote.php/dav/files/Zailon/Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/" \
-X PROPFIND -H "Depth: 1" | grep -oP '<d:href>\K[^<]+' | tail -5
# Проверка crontab
crontab -l
# Проверка таймзоны
timedatectl | grep "Time zone"
```
---
## Решение проблем
#### Ошибка 401 Unauthorized
```bash
# Пересоздать токен приложения в Nextcloud:
# Настройки → Безопасность → Приложения паролей → Создать новый
# Обновить NEXTCLOUD_PASS в /opt/3x-ui/backup.sh
```
#### Ошибка 404 Not Found
```bash
# Проверить путь к папке (регистр и пробелы важны!)
# Правильный формат: /Admin/Домашний%20Сервер/OlimpBackup/OlimpVPN/
```
#### Бэкап не создаётся
```bash
# Проверить права на запись
ls -la /opt/3x-ui/backups/
# Проверить место на диске
df -h /opt/3x-ui
# Проверить логи cron
journalctl -u cron -n 20
```
#### Время в логах неверное
```bash
# Установить таймзону
timedatectl set-timezone Asia/Yekaterinburg
# Перезапустить cron
systemctl restart cron
```
### Чеклист обслуживания
- [ ] **Еженедельно**: Проверять `/var/log/3x-ui-backup.log` после воскресенья
- [ ] **Ежемесячно**: Убедиться что бэкапы есть на Nextcloud
- [ ] **Ежеквартально**: Протестировать восстановление на тестовом окружении
- [ ] **При смене пароля Nextcloud**: Обновить `NEXTCLOUD_PASS` в скрипте
- [ ] **Перед обновлением 3X-UI**: Сделать ручной бэкап
---
> ⚠️ **Важно**: Токен приложения `2Fpz6-ocGSz-rRbaZ-efoa3-EDATz` имеет доступ только к WebDAV. Никогда не используйте основной пароль аккаунта в скриптах!
---
## Связанные разделы
- [Сеть и доступ](04-network.md) — общая топология сети
- [Виртуальные машины и LXC](03-vms-lxcs.md) — LXC media с xray-прокси
- [Безопасность](10-security.md) — политики безопасности
- [Резервное копирование](11-backup.md) — общая стратегия бэкапов
---
*Документ обновлен: 25 марта 2026*
*Версия 3X-UI: latest (Docker)*
*Сервер: 2.27.50.20 (Финляндия)*