Docs/docs/04b-olimpvpn.md
Administrator 529fe52832 Update 4 files
- /docs/04-network.md
- /docs/06-services.md
- /docs/04b-olimpvpn.md
- /README.md
2026-03-25 11:45:40 +05:00

571 lines
17 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-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: /
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-cerber/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) |
---
## Бэкапы
### Автоматические бэкапы на Nextcloud
#### Настройка Nextcloud
1. Создайте папку: `/VPN_Backups/3x-ui/` на `nc.zailon.ru`
2. Создайте токен приложения:
- Настройки → Безопасность → Приложения паролей
- Имя: `3X-UI Backups`
- Скопируйте пароль
#### Скрипт бэкапа
```bash
#!/bin/bash
# /opt/3x-ui/backup.sh
# Настройки
NEXTCLOUD_URL="https://nc.zailon.ru"
NEXTCLOUD_USER=аш_username"
NEXTCLOUD_PASS=аш_токен_приложения"
BACKUP_DIR="/opt/3x-ui/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="3x-ui_backup_${DATE}.tar.gz"
# Создаем директорию для бэкапов
mkdir -p ${BACKUP_DIR}
# Создаем архив
tar -czf ${BACKUP_DIR}/${BACKUP_FILE} \
-C /opt/3x-ui db cert docker-compose.yml
# Загружаем на Nextcloud через WebDAV
curl -T ${BACKUP_DIR}/${BACKUP_FILE} \
-u ${NEXTCLOUD_USER}:${NEXTCLOUD_PASS} \
${NEXTCLOUD_URL}/remote.php/dav/files/${NEXTCLOUD_USER}/VPN_Backups/3x-ui/${BACKUP_FILE}
# Удаляем локальные бэкапы старше 30 дней
find ${BACKUP_DIR} -name "3x-ui_backup_*.tar.gz" -mtime +30 -delete
# Логирование
echo "$(date): Backup ${BACKUP_FILE} uploaded to Nextcloud" >> /var/log/3x-ui-backup.log
```
#### Настройка cron (еженедельно)
```bash
# Делаем скрипт исполняемым
chmod +x /opt/3x-ui/backup.sh
# Добавляем в crontab
crontab -e
# Каждое воскресенье в 3:00
0 3 * * 0 /opt/3x-ui/backup.sh
```
#### Ручной бэкап
```bash
# Быстрый бэкап
cd /opt/3x-ui
tar -czf backup_manual_$(date +%Y%m%d).tar.gz db/ cert/ docker-compose.yml
# Скачать через SCP на локальный компьютер
scp root@2.27.50.20:/opt/3x-ui/backup_manual_*.tar.gz ~/backups/
```
#### Восстановление из бэкапа
```bash
# Останавливаем контейнер
cd /opt/3x-ui
docker compose down
# Восстанавливаем
tar -xzf backup_20260325.tar.gz -C /opt/3x-ui/
# Исправляем права
chown -R root:root /opt/3x-ui/
# Запускаем
docker compose up -d
```
---
## Мониторинг и обслуживание
### Обновление 3X-UI
```bash
cd /opt/3x-ui
docker compose pull
docker compose up -d
docker image prune -f
```
### Обновление 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-cerber/`
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 (Финляндия)*