# Решение проблем

> Частые проблемы, решения и инструменты диагностики.

## Какой инструмент использовать

```
ДО УСТАНОВКИ           → meridian check IP
  "Будет ли этот сервер работать с Meridian?"
  Проверяет: SNI доступность, порт 443, DNS, ОС, диск.

ПОСЛЕ УСТАНОВКИ, ЗДОРОВ ЛИ? → meridian check
  "Панель, узлы, ретрансляторы, порты и сертификаты в порядке?"
  Проверяет каждый сервер в флоте по ролям, по SSH.

ПОСЛЕ УСТАНОВКИ, НЕ МОГУ ПОДКЛЮЧИТЬСЯ → meridian test IP
  "Доступен ли прокси отсюда?"
  Проверяет: настроенные слушатели, TLS/SNI, каноническую подписку и прокси-трафик.
  SSH не нужен — запускается с клиентского устройства.

ПОСЛЕ УСТАНОВКИ, ПРОВЕРИТЬ ЭКСПОЗИЦИЮ → meridian test IP --probe
  "Раскрывает ли развёртывание прокси или интерфейс управления?"
  Проверяет: публичные порты, TLS/HTTP, пути, SNI, DNS и политику топологии.
  SSH не нужен — запускается с клиентского устройства.

ПОСЛЕ УСТАНОВКИ, ЧТО-ТО СЛОМАЛОСЬ → meridian doctor IP
  "Собрать всё для отладки."
  Собирает: ОС сервера, Docker, логи узла Remnawave и nginx, порты, фаервол, SNI, DNS.
```

Добавьте `--ai` к check или doctor для готовой к AI диагностической подсказки.

## Не может подключиться вообще

### Порт 443 не доступен

**Причины:**
1. Брандмауэр облачного провайдера / группа безопасности блокирует входящий порт 443
2. ISP или сетевая блокировка IP-адреса сервера целиком
3. Сервер не работает или прокси не запущен
4. UFW на сервере не разрешает порт 443

**Решения:**
1. Проверьте консоль облачного провайдера — убедитесь, что 443/TCP разрешен входящему трафику
2. Попробуйте с другой сети (мобильные данные, другой Wi-Fi)
3. Подключитесь к серверу по SSH и проверьте: `docker ps` (запущены ли `ctlsvc-api` и `netagent`?), `systemctl status nginx`, `ss -tlnp sport = :443`
4. Проверьте UFW: `ufw status` — должно показать 443/tcp ALLOW

### TLS handshake не пройден

**Причины:**
1. Xray не работает внутри Docker контейнера
2. Порт 443 занят другим сервисом
3. Целевой SNI Reality недоступен с сервера

**Решения:**
1. Проверьте Xray: `meridian logs IP -c node -n 20`
2. Проверьте порт: `ss -tlnp sport = :443` — должен быть nginx
3. Протестируйте SNI: `meridian check IP --sni HOST`

### Домен не доступен

**Причины:**
1. DNS не указывает на IP сервера
2. nginx не работает или не получил TLS сертификат
3. nginx не маршрутизирует домен SNI правильно

**Решения:**
1. Проверьте DNS: `dig +short yourdomain.com @8.8.8.8`
2. Проверьте nginx: `systemctl status nginx`
3. Проверьте конфигурацию nginx: `/etc/nginx/stream.d/meridian.conf`

## Соединение прерывается через несколько секунд

**Причины:**
1. Проблемы с MTU на сетевом пути
2. ISP сбрасывает долгоживущие TLS сессии

**Решения:**
1. Попробуйте другую сеть
2. Используйте WSS/CDN подключение (режим домена)

## Установка не удалась

### Конфликт порта 443

Другой сервис (Apache, Nginx) использует порт 443. Остановите его или используйте чистый сервер. `meridian check IP` подскажет вам, что использует порт.

### Docker установка не удалась

Конфликтующие Docker пакеты из репозиториев дистрибутива. Meridian автоматически их удаляет, но если Docker уже работает с контейнерами, он пропускает для предотвращения сбоев.

### Переименование панели останавливается при обновлении

`meridian apply` переносит панель, развёрнутую бета-версией 4.0, из `/opt/remnawave` в `/opt/ctlsvc`. Прежде чем что-либо остановить, он отказывается продолжать, если существуют оба каталога или `/opt/remnawave` является точкой монтирования. Оставьте как `/opt/ctlsvc` тот каталог, в котором лежат `data/` и `.env` панели (или смонтируйте том туда), уберите другой в сторону и снова запустите `meridian apply`. Переименование, прерванное на середине, продолжится при следующем apply.

### Ошибки подключения SSH

Протестируйте SSH вручную: `ssh root@SERVER_IP`. Убедитесь, что у вас есть доступ на основе ключей. Используйте флаг `--user` если не root. Если сервер принимает только пароль, запустите `meridian deploy` в терминале без `--yes` и позвольте ему установить ключ (см. [Серверы только с паролем](/ru/deploy.md#серверы-только-с-паролем)) или один раз выполните `ssh-copy-id root@SERVER_IP`.

### Xray не запускается в контейнере узла

Проверьте контейнер: `meridian logs IP -c node -n 50`. Частые причины: порт на хосте уже занят (узел работает с `network_mode: host`, поэтому порты из `cluster.yml` должны быть свободны), панель недоступна (при запуске узлу нужен выданный панелью `node_secret_key`) или отсутствует разрешение Linux `NET_ADMIN`.

**Решение:** запустите `meridian check IP` и выполните предложенные исправления перед переразворачиванием. Чтобы проверить состояние панели Remnawave, откройте интерфейс администратора по адресу `https://<IP>/<secret_path>/` и перейдите в **Nodes**: узел должен иметь статус `connected`. Команда `meridian fleet status` показывает те же сведения в CLI.

### Недостаточно места на диске

Менее 2ГБ свободного места. Освободите место: `docker system prune -af`, `journalctl --vacuum-time=1d`, проверьте `/var/log/`.

### DNS не разрешается (режим домена)

Сертификат для вашего домена может быть выдан только когда A-запись домена указывает на сервер (серое облако во время развёртывания). Обновите запись, дождитесь распространения (обычно 5–15 минут), затем запустите команду развёртывания снова. `meridian check IP --domain DOMAIN` проверяет это перед развёртыванием.

## Было работающим, теперь остановилось

**Самая частая причина:** IP-адрес сервера был заблокирован. Запустите `meridian test IP`: результаты разделяют сетевую доступность, TLS, подписку и выполнение прокси. Ошибка TCP также может означать облачный фаервол или выключенный сервер.

Подробные инструкции по восстановлению см. в [Руководстве по восстановлению заблокированного IP](/ru/recovery.md).

Другие причины:
- Сервер перезагрузился и сервисы не запустились автоматически → `meridian plan` показывает, что выключено, а `meridian apply` это чинит. Вручную: `docker compose up -d` в `/opt/ctlsvc` и `/opt/netagent`, затем `systemctl restart nginx`
- Диск переполнен → `df -h /`, `docker system prune -af`

## Низкая скорость

1. Выберите сервер географически ближе (Финляндия, Нидерланды, Швеция для Европы/Ближнего Востока)
2. Проверьте нагрузку на сервер: `htop` или `uptime`
3. Попробуйте WSS/CDN ссылку — может иметь лучшую маршрутизацию через Cloudflare
4. Проверьте, включен ли BBR: `sysctl net.ipv4.tcp_congestion_control`

**НЕ** запускайте другие протоколы (OpenVPN, WireGuard) на том же сервере — это помечает IP.

## AI-усиленная помощь

```
meridian doctor --ai
```

Копирует диагностическую подсказку в буфер обмена для использования с любым AI ассистентом.

Или соберите диагностику для [GitHub issue](https://github.com/getmeridian/meridian/issues):

```
meridian doctor
```

## Релейный узел не работает

Проблемы, связанные с релейными узлами, см. в разделе [Руководство релейных узлов — Решение проблем](/ru/relay.md#устранение-неполадок).

Для V4-цепочки `relay check` намеренно недоступен: проверяйте клиентский маршрут через `meridian test`. В `fleet status` доступный relay означает только успешное TCP-соединение с публичным listener; внутренние hop'ы остаются `unknown` и могут дать общий код `3`.

## Интерпретация вывода предварительной проверки

| Проверка | Что проверяет | Если не прошла |
|----------|--------------|----------------|
| Доступность SNI-цели | Может ли сервер достичь сайт маскировки? | Исходящий трафик сервера ограничен. Попробуйте другой SNI с `--sni` |
| Доступность порта 443 | Свободен ли порт 443 или используется Meridian? | Другой сервис на 443. Остановите его или используйте чистый сервер |
| Внешняя доступность порта 443 | Может ли внешний мир достичь порта 443? | Облачный фаервол блокирует. Откройте порт 443/TCP входящий |
| DNS домена | Разрешается ли домен в IP сервера? | Обновите A-запись DNS |
| ОС сервера | Ubuntu/Debian? | Без apt (CentOS, Fedora, Alpine) — ошибка; переустановите Ubuntu или Debian |
| Дисковое пространство | Минимум 2ГБ свободно? | Освободите место |
| Синхронизация часов | Расхождение клиента и сервера меньше минуты? | Одна из сторон не синхронизирует время. Включите NTP и автоматическую установку времени на обоих устройствах |

## Интерпретация вывода doctor

| Раздел | На что обратить внимание |
|--------|------------------------|
| Локальная машина | Совместимость ОС |
| Сервер | Версия ОС, uptime (недавняя перезагрузка?), использование диска/памяти |
| Docker | Запущены ли контейнеры `ctlsvc-api` и `netagent`? Статус должен быть "Up" |
| Логи узла Remnawave | Ошибки запуска узла, записи "failed to start", проблемы с сертификатами |
| Прослушиваемые порты | Порт 443 должен показывать nginx. Если отсутствует, прокси не работает |
| Фаервол (UFW) | Порт 443/tcp должен быть ALLOW. Если не указан, он заблокирован |
| SNI-цель | Должно показывать CONNECTED с цепочкой сертификатов |
| DNS домена | Должен разрешаться в IP сервера |

## Интерпретация вывода test

| Проверка | Пройдена | Не пройдена |
|----------|----------|-------------|
| Доступность TCP | Каждый настроенный публичный TCP-слушатель доступен | Фаервол, блокировка ISP, выключенный сервер или неверная топология |
| Маскировка TLS/SNI | Цель показывает ожидаемую маскировочную идентичность | Ошибка TLS-маршрутизации, сертификата, DNS или SNI |
| Корень домена | Доступен защищённый ответ `403`/`404` | Ошибка DNS/nginx или непредусмотренный публичный контент |
| Каноническая подписка | Remnawave выдал корректный Xray JSON активного клиента | Нет активного клиента, ошибка панели или шаблона |
| Автоматический fallback | Выданная политика провела реальный трафик | Ошибка балансировщика, маршрута, учётных данных или endpoint |
| Проверки протоколов | Каждый outbound цели провёл реальный трафик | Ошибка слушателя, фаервола или выданной конфигурации протокола |

Итоговый код выхода различает результат: `0` — всё прошло, `4` — проверка завершена с отрицательными результатами, `3` — результат неопределён из-за отсутствующих обязательных данных. `--timeout` принимает 1–30 секунд и ограничивает каждую сетевую операцию или запуск протокола, а не длительность всей команды. При первом полном тесте Meridian может до 120 секунд загружать закреплённый Xray и проверять опубликованный checksum с GitHub; затем используется локальный cache.

Проверка реального трафика чередует несколько внешних IP-observer'ов. Если запросы через proxy не проходят, но observer работает напрямую, это отрицательный результат; если observer'ы недоступны и через proxy, и напрямую, Meridian не обвиняет proxy и возвращает неопределённость (`3`). `--basic` не подтверждает UDP-трафик Hysteria.

## Интерпретация вывода probe

`probe` использует те же коды `0`/`4`/`3` и тот же диапазон `--timeout` 1–30 секунд на операцию. Для управляемых маршрутов нарушение TLS trust, hostname или детерминированного SNI является находкой. Неполные повторные наблюдения и разные, но доверенные сертификаты независимых CDN edge считаются неопределёнными, а не ложным провалом. Пропущенная проверка никогда не учитывается как успех.

`meridian scan` требует IPv4: для IPv6-only сервера RealiTLScanner не запускается, и команда возвращает `3`. В V4 выбранный SNI только показывается; изменяйте проверенный intent через `meridian setup`.

Если все проверки пройдены, но VPN-клиент всё ещё не может подключиться: пересканируйте QR-код, проверьте, что устройство устанавливает дату и время автоматически, или попробуйте другое приложение (v2rayNG, Hiddify).
