414 lines
14 KiB
Markdown
414 lines
14 KiB
Markdown
# 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 (Финляндия)* |