# 04. Сеть и доступ ## Топология Инфраструктура объединяет устройства в локальной подсети `192.168.1.0/24`. Доступ из внешней сети осуществляется через маршрутизатор TP-Link с белым IP-адресом `188.73.191.202`, на который делегирован домен `zailon.ru`. Для удалённого подключения к внутренним ресурсам используется OpenVPN и OlimpVPN (VLESS). ```mermaid graph TD Internet(Интернет) --> Router(Роутер TP-Link) Router --> LAN(Локальная сеть 192.168.1.0/24) Router -->|Внешний IP 188.73.191.202| Domain(zailon.ru) LAN --> Proxmox(Proxmox Host 192.168.1.200) Proxmox --> VM1(LXC / ВМ 201-213) Router -->|VPN| OlimpVPN[OlimpVPN 2.27.50.20] OlimpVPN -->|VLESS:2054| LAN ``` *Все виртуальные машины и контейнеры подключены к локальной сети через мост vmbr0.* --- ## Маршрутизатор (TP-Link) - **Модель**: TP-Link (предположительно Archer C6/A6 или аналогичный) - **Локальный IP**: 192.168.1.1 - **Внешний IP**: 188.73.191.202 (статический) ### Перенаправление портов (Port Forwarding) | Имя сервиса | Внешний порт | Внутренний порт | IP устройства | Протокол | Назначение | |-------------|--------------|-----------------|---------------|----------|------------| | snikket | 3478 | 3478 | 192.168.1.206 | Все | XMPP / STUN | | snikket | 50000-50100 | 50000-50100 | 192.168.1.206 | UDP | XMPP медиа | | snikket | 5222 | 5222 | 192.168.1.206 | TCP | XMPP клиенты | | snikket | 5349 | 5349 | 192.168.1.206 | TCP | XMPP TLS | | Enshrouded | 15636 | 15636 | 192.168.1.212 | Все | Игровой сервер | | Mumble | 45131 | 45131 | 192.168.1.206 | Все | Голосовой чат | | virsing | 27015-27016 | 27015-27016 | 192.168.1.207 | Все | Игровой сервер | | Virsing | 9876-9877 | 9876-9877 | 192.168.1.207 | Все | Игровой сервер | | SOTH | 9700 | 9700 | 192.168.1.207 | UDP | Игровой сервер | | SOTH | 8766 | 8766 | 192.168.1.207 | UDP | Игровой сервер | | valheim | 2456-2458 | 2456-2458 | 192.168.1.207 | Все | Valheim | | HTTPS | 443 | 443 | 192.168.1.201 | Все | Nginx Proxy Manager | | HTTP | 80 | 80 | 192.168.1.201 | Все | Nginx Proxy Manager (редирект) | > **Примечание**: некоторые порты (например, 15636, 27015-27016, 9876-9877) ведут на остановленные ВМ (212, 207) и могут быть закрыты. --- ## VPN-сервисы ### OpenVPN (домашний) На роутере включён OpenVPN-сервер с настройками: - **Тип сервиса**: UDP - **Порт**: 1194 - **VPN-подсеть**: 192.168.45.0/24 - **Клиентский доступ**: только домашняя сеть (192.168.1.0/24) Используется для удалённого подключения к домашней сети с мобильных устройств и ноутбуков. ### OlimpVPN (VLESS, внешний сервер) | Параметр | Значение | |----------|----------| | **Сервер** | 2.27.50.20 (Финляндия) | | **Домен** | charon.zailon.ru | | **Протокол** | VLESS + Reality + XHTTP | | **Порт** | 2054 | | **Панель управления** | https://charon.zailon.ru:45131/olimp-styx/ | | **URI подписки** | /charon-cerberus/ | #### Конфигурация inbound ```yaml Название: OlimpVpn Протокол: VLESS Порт: 2054 Транспорт: XHTTP Безопасность: Reality Reality параметры: Target: cloud.zailon.ru:443 SNI: cloud.zailon.ru uTLS: chrome Public Key: TOyddQCTdSpycmO20uiLOqMABuKabpwVhw57tWmvJws Short IDs: 174fc0, 568a8044d80a, b211, ... SpiderX: / XHTTP параметры: Path: /remote.php/dav/upload Mode: stream-one Padding Bytes: 100-1000 ``` #### Подключение клиентов Формат ссылки 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 ``` Автоматическая подписка: ``` https://charon.zailon.ru:45131/charon-cerber/CLIENT_ID ``` > **Примечание**: подробная инструкция по установке и управлению — в [документации OlimpVPN](08-olimpvpn.md). --- ## DNS Домен `zailon.ru` делегирован на внешний IP `188.73.191.202`. Все поддомены `*.zailon.ru` также указывают на этот IP через записи типа A. | Поддомен | Назначение | Целевой хост | |----------|------------|--------------| | `charon.zailon.ru` | Панель OlimpVPN | 2.27.50.20 (VPS) | | `nc.zailon.ru` | Nextcloud | 188.73.191.202 → 192.168.1.201 | | `cloud.zailon.ru` | Reality SNI / Nextcloud | 188.73.191.202 → 192.168.1.201 | | `*.zailon.ru` | Wildcard для сервисов | 188.73.191.202 | DNS-серверы: - Внешние: стандартные провайдера (или публичные, например 8.8.8.8) - Локально: системный resolver на каждом хосте (127.0.0.53) --- ## Локальная сеть - **Подсеть**: 192.168.1.0/24 - **Шлюз**: 192.168.1.1 (роутер) - **DHCP**: включён на роутере, диапазон раздачи 192.168.1.100–192.168.1.200 (статические адреса для серверов заданы вручную) - **Статические IP-адреса серверов**: см. раздел [Виртуальные машины и LXC](03-vms-lxcs.md) ### Ключевые хосты | Хост | IP | Назначение | |------|-----|------------| | Роутер | 192.168.1.1 | Шлюз, DHCP, OpenVPN | | NPM | 192.168.1.201 | Nginx Proxy Manager, SSL-терминация | | Proxmox | 192.168.1.200 | Хост виртуализации | | media (LXC) | 192.168.1.203 | Jellyfin, Samba, yt-dlp, xray-прокси | | talk (LXC) | 192.168.1.206 | Snikket (XMPP), Mumble | --- ## Безопасность сети - **Wi-Fi**: WPA2-PSK (рекомендуется обновление до WPA3) - **Гостевая сеть**: отсутствует - **VLAN**: не используются - **Доступ к панели 3X-UI**: - HTTPS + Let's Encrypt - Секретный URI: `/olimp-styx/` - Секретный subscription URI: `/charon-cerber/` - Рекомендуется ограничить доступ по IP при возможности ### Fail2ban (опционально для 3X-UI) ```yaml # В docker-compose.yml 3X-UI: environment: XUI_ENABLE_FAIL2BAN: "true" XUI_FAIL2BAN_PORT: "45131" XUI_FAIL2BAN_MAX_RETRY: "5" XUI_FAIL2BAN_BAN_TIME: "3600" ``` --- ## Мониторинг сети - Сбор метрик через node_exporter (порт 9100) на всех хостах - Логи роутера не собираются (ограниченные возможности TP-Link) - Логи 3X-UI: `docker logs 3xui_app --tail 100 -f` --- ## 🔄 Бэкапы и восстановление ### Автоматические бэкапы | Параметр | Значение | |----------|----------| | **Скрипт** | `/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 '\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. Никогда не используйте основной пароль аккаунта в скриптах! --- **Связанные разделы:** - [Виртуальные машины и LXC](03-vms-lxcs.md) - [OlimpVPN — полная документация](08-olimpvpn.md) - [Сервисы и порты](06-services.md) - [Проксирование и SSL (NPM)](07-proxy-ssl.md) - [Безопасность](10-security.md)