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

594 lines
19 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.

# 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-cerberus/ |
#### Настройка сертификатов
| Параметр | Значение |
|----------|----------|
| Путь к публичному ключу | /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: /
Max Time Diff: 0
Min Client Ver: 25.9.11
Max Client Ver: 25.9.11
```
### XHTTP параметры
```yaml
Path: /remote.php/dav/upload
Mode: stream-one
Padding Bytes: 100-1000
Padding Obfs Mode: выкл
Uplink HTTP Method: Default (POST)
Session Placement: Default (path)
Sequence Placement: Default (path)
No SSE Header: выкл
Sockopt: выкл
```
### Sniffing
| Параметр | Значение |
|----------|----------|
| Включено | ✅ Да |
| HTTP | ✅ |
| TLS | ✅ |
| QUIC | ✅ |
| FAKEDNS | ✅ |
| Metadata Only | ❌ |
| Route Only | ❌ |
### Открытые порты на 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).
### Текущие клиенты
| Клиент | Трафик | Статус | Назначение |
|--------|--------|--------|------------|
| Zailon-tel | 3.12 GB | Офлайн | Телефон (основной) |
| Zailon-comp | 52.15 GB | Онлайн | Компьютер (основной) |
| Tanya-tel | 471.00 MB | Офлайн | Телефон (Tanya) |
| Dima-comp | 1.77 GB | Офлайн | Компьютер (Dima) |
| Dima-tel | 7.99 GB | Офлайн | Телефон (Dima) |
| cerbera3000-comp | 0 B | Офлайн | Резервный |
| cerbera3000-tel | 728.32 MB | Офлайн | Резервный |
| Sonya-tel | 0 B | Офлайн | Телефон (Sonya) |
| lxc-vpn | 4.61 KB | Офлайн | LXC media (прокси) |
| Tanya-comp | 4.03 MB | Офлайн | Компьютер (Tanya) |
---
## 🔄 Бэкапы и восстановление
### Автоматические бэкапы
| Параметр | Значение |
|----------|----------|
| **Скрипт** | `/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 дней |
| **Таймзона** | `Asia/Yekaterinburg (+05)` |
### Ручной запуск бэкапа
```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. Никогда не используйте основной пароль аккаунта в скриптах!
```
### Обновление SSL сертификата
Certbot обновляет автоматически. Для проверки:
```bash
certbot renew --dry-run
# Если нужно обновить вручную:
certbot renew --nginx
# Копируем обновленные сертификаты
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
# Перезапускаем
docker restart 3xui_app
```
### Мониторинг
```bash
# Логи 3X-UI
docker logs 3xui_app --tail 100 -f
# Статус контейнера
docker ps -a | grep 3xui
# Использование ресурсов
docker stats 3xui_app
# Проверка портов
netstat -tlnp | grep -E '2054|45131'
# Проверка базы данных
docker exec 3xui_app sqlite3 /etc/x-ui/x-ui.db "SELECT COUNT(*) FROM clients;"
```
### Полезные команды
```bash
# Перезапуск 3X-UI
docker restart 3xui_app
# Остановка
docker compose down
# Запуск
docker compose up -d
# Войти в контейнер
docker exec -it 3xui_app bash
# Сброс пароля админа
docker exec 3xui_app /app/x-ui resetuser
# Экспорт базы данных
docker exec 3xui_app sqlite3 /etc/x-ui/x-ui.db ".dump" > x-ui-export.sql
```
---
## Решение проблем
### Клиенты не подключаются
1. Проверьте что порт 2054 открыт:
```bash
netstat -tlnp | grep 2054
```
2. Проверьте логи:
```bash
docker logs 3xui_app | grep -i error
```
3. Убедитесь что Reality ключи верные (совпадают с 3X-UI)
4. Проверьте время на сервере:
```bash
timedatectl status
```
### Панель не открывается
1. Проверьте статус:
```bash
docker ps | grep 3xui
```
2. Проверьте SSL:
```bash
ls -la /opt/3x-ui/cert/
```
3. Посмотрите логи nginx:
```bash
journalctl -u nginx -n 50
```
### Бэкап не загружается
1. Проверьте токен Nextcloud
2. Убедитесь что папка существует
3. Проверьте лог:
```bash
tail /var/log/3x-ui-backup.log
```
### Xray не запускается
```bash
# Проверка конфигурации
docker exec 3xui_app /app/x-ui v2ui
# Логи Xray
docker logs 3xui_app --tail 100 | grep -i "xray\|error"
# Пересоздание контейнера
cd /opt/3x-ui
docker compose down
docker compose up -d
```
---
## Безопасность
### Рекомендации
1. **Смените пароль администратора** сразу после установки
2. **Используйте сложные URI**: `/olimp-styx/` и `/charon-cerberus/`
3. **Регулярно обновляйте** 3X-UI и систему
4. **Делайте бэкапы** минимум раз в неделю
5. **Ограничьте доступ** к панели по IP (если возможно)
6. **Мониторьте логи** на предмет подозрительной активности
### Fail2ban (опционально)
Для включения fail2ban в docker-compose.yml:
```yaml
environment:
XUI_ENABLE_FAIL2BAN: "true"
XUI_FAIL2BAN_PORT: "45131"
XUI_FAIL2BAN_MAX_RETRY: "5"
XUI_FAIL2BAN_BAN_TIME: "3600"
```
---
## Связанные разделы
- [Сеть и доступ](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 (Финляндия)*