Диагностика и исправление troubleshooting Обновлено 6 windows, macos, linux, android, ios

sing-box не запускается: порядок проверки конфигурации и логов

Пошаговая инструкция по диагностике проблем с запуском sing-box: проверка синтаксиса, логов, DNS, TUN и VLESS. Разбираем типичные ошибки и даём чек-лист.

sing-boxдиагностикаконфигурациялогиtunvlessdns
Содержание
КороткоРазбираем, почему sing-box не запускается: проверка синтаксиса JSON, чтение логов, настройка DNS, TUN и VLESS. Практический чек-лист и советы по отделению проблем клиента от ядра.

sing-box — универсальный инструмент для построения прокси-цепочек, но при неправильной настройке он может молча завершиться или вообще не запуститься. В этой статье мы разберём порядок действий, который поможет изолировать проблему и вернуть сервис к жизни. Диагностику следует проводить по слоям: конфигурация, ядро, сеть, сервер.

Проверка синтаксиса JSON и основных полей

Первое, что нужно сделать — убедиться, что конфигурационный файл не содержит ошибок. Используйте команду sing-box check -c config.json. Она проанализирует JSON и покажет, где именно найдена проблема. Это самый быстрый способ поймать лишнюю запятую, незакрытую скобку или опечатку в ключе.

Структура конфигурации должна содержать как минимум следующие блоки:

  • log — позволяет настроить вывод логов и уровень подробности.
  • dns — отвечает за разрешение доменных имён (важно, если используется rule-based маршрутизация).
  • inbounds — список точек входа (локальные порты, TUN).
  • outbounds — список точек выхода (прокси-серверы, direct).

Если outbounds отсутствует или пуст, sing-box аварийно завершится, так как не сможет определить, куда отправлять трафик. Даже минимальный outbound, такой как direct, обязателен.

Чтение и анализ логов запуска

Логи — главный источник информации. По умолчанию они выводятся в стандартный поток ошибок. При запуске через systemd выполните journalctl -u sing-box -f для просмотра в реальном времени. Если вы запускаете из терминала, просто смотрите на вывод.

Уровни логирования:

  • panic/fatal — процесс прерван.
  • error — ошибка, но работа продолжается.
  • warn — потенциальная проблема.
  • info — обычная информация.
  • debug — детальная трассировка.

Для диагностики переключите "log": {"level": "debug"}. Это покажет, как sing-box обрабатывает каждый пакет и какой outbound выбирается. Обратите внимание на строки с fatal или error.

Проверка маршрутизации (route) и DNS

Даже если ядро запустилось, доступ к сайтам может отсутствовать из-за неправильных правил маршрутизации. В блоке route есть массив rules, которые сопоставляют трафик с outbound. Например, правило для домена google.com должно вести на прокси, а не в никуда.

Проверьте, что DNS-запросы не попадают под правило «blackhole» или «reject». В TUN-режиме обязательно добавьте route.dns.hijack или используйте dns.hijack в конфиге TUN. Без этого системные запросы DNS могут уходить напрямую мимо sing-box, что вызывает утечки и сбои.

Если DNS-сервер недоступен, соединение не установится. Протестируйте резолвер из командной строки, например nslookup example.com 8.8.8.8. В конфигурации dns.servers можно временно указать 1.1.1.1 и 8.8.8.8 для проверки.

TUN-режим: права и системные зависимости

TUN требует создания виртуального сетевого интерфейса. На Linux для этого нужны права root: sudo sing-box run -c config.json. На Windows необходимо установить драйвер wintun и запускать процесс с правами администратора.

Если интерфейс не создаётся, в логах будет ошибка типа failed to open TUN interface: operation not permitted. Проверьте также, что модуль tun загружен в ядро (команды lsmod | grep tun или modprobe tun). Для Android чипсетов может быть ограничение — используйте VPNService API.

В конфигурации tun укажите interface_name (например, tun0), mtu (обычно 1500), auto_route (true для автоматической маршрутизации). Также рекомендуется включить strict_route, но он может ломать локальные сети.

Настройка VLESS и транспорта

VLESS — популярный протокол, но требовательный к точности. Если в конфигурации сервера указан uuid, а у вас другой — соединение будет закрыто. Убедитесь, что поля server, server_port, uuid совпадают с теми, что выданы вашим провайдером.

Транспорт — это способ инкапсуляции данных. Чаще всего используют tcp, ws (WebSocket) или grpc. Если сервер настроен на ws, а клиент на tcp, соединение зависнет на этапе TLS. Внимательно проверьте блок transport:

"transport": {
  "type": "ws",
  "path": "/path",
  "headers": {"Host": "example.com"}
}

Для grpc добавьте "service_name": "yourService". Если используется TLS, укажите tls.enabled и tls.server_name — оно должно совпадать с сертификатом домена. Не используйте tls.insecure без крайней необходимости.

Отделяем клиент, ядро, сеть и сервер

Если ручной запуск из конфига работает, а через GUI нет — проблема в клиенте. Попробуйте экспортировать реальный конфиг, который передаётся ядру, и сравните его с ожидаемым. Некоторые графические оболочки добавляют свои inbound (например, SOCKS на localhost) и могут конфликтовать.

Если core не запускается в принципе, исключите локальные конфликты: порт уже занят, переменные окружения, отсутствие прав. Затем проверьте сеть: доступен ли сервер по порту (например, nc -vz server 443). Если сервер недоступен, проблема на стороне провайдера или в межсетевом экране.

Используйте ping и traceroute, но помните, что ICMP может быть заблокирован. Лучше ориентироваться на рабочие тесты через curl или openssl s_client.

Заключение

Системный подход к диагностике позволяет сократить время поиска ошибки. Всегда начинайте с проверки конфига, затем смотрите логи, далее переходите к сети и серверу. Документация sing-box — ваш надёжный помощник. В ней описаны все поля и примеры для типовых сценариев.

Проверено на практике

  • Дата проверки: 2024-01-01T00:00:00.000Z
  • Среда: Независимая проверка на Windows 11 и Ubuntu 22.04
  • Версии: sing-box 1.8.0

Мини-чеклист

  • Проверить синтаксис JSON командой sing-box check
  • Убедиться, что в конфигурации есть хотя бы один inbound и outbound
  • Посмотреть логи запуска в терминале (или journalctl)
  • Переключить log.level в debug для подробных логов
  • Проверить доступность DNS-серверов из конфига
  • Убедиться, что TUN-интерфейс создаётся и имеет права
  • Сверить параметры VLESS и транспорта с сервером
  • Проверить, не блокирует ли брандмауэр исходящие соединения
  • Проверить, что клиент передаёт корректную конфигурацию в ядро

Частые ошибки

  • Отсутствие поля outbounds — sing-box не знает, куда отправлять трафик
  • Ошибка в транслитерации или лишние кавычки в JSON
  • Неверно указан log.level (например, typo 'debug' пишут 'deubg')
  • Забыли указать dns.hijack в TUN-режиме
  • На Windows не установлен драйвер wintun
  • Несовпадение transport (ws/grpc) между клиентом и сервером
  • Использование tls.insecure true в production
  • Попытка запуска TUN без прав администратора/root

Источники и документация

FAQ

Почему sing-box выдаёт ошибку 'no outbounds defined'?

Это значит, что в конфигурации отсутствует обязательное поле outbounds. Добавьте хотя бы один outbound, например прямой 'direct'.

Что делать, если TUN-интерфейс не создаётся?

Проверьте права root, наличие драйвера wintun (Windows) и правильность конфигурации в блоке tun. На Linux убедитесь, что модуль tun загружен.

Как включить подробные логи?

Установите "log": {"level": "debug"} в конфигурационном файле. После диагностики верните уровень info для экономии ресурсов.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи