Docs/docs/04-network.md
2026-03-25 13:07:54 +05:00

310 lines
13 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.

# 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.100192.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 '<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. Никогда не используйте основной пароль аккаунта в скриптах!
---
**Связанные разделы:**
- [Виртуальные машины и LXC](03-vms-lxcs.md)
- [OlimpVPN — полная документация](08-olimpvpn.md)
- [Сервисы и порты](06-services.md)
- [Проксирование и SSL (NPM)](07-proxy-ssl.md)
- [Безопасность](10-security.md)