Как проверить sing-box конфиг перед запуском: чек-лист
Узнайте, как проверить конфигурацию sing-box перед запуском: синтаксис, структура, DNS, маршрутизация, TUN и VLESS. Избегайте частых ошибок и настраивайте стабильное подключение.
Содержание
Введение: почему проверка конфигурации важна
sing-box — это мощный универсальный прокси-клиент, который поддерживает множество протоколов и функций. Однако сложность конфигурации часто приводит к ошибкам, из-за которых подключение не работает. Проверка конфигурации перед запуском занимает всего несколько минут, но экономит часы на отладке. В этом чек-листе мы разберём, как правильно проверить конфиг sing-box, чтобы избежать типичных проблем.
Шаг 1. Проверка синтаксиса командой sing-box check
Первый и самый очевидный шаг — запустить встроенную проверку синтаксиса. Выполните в терминале:
sing-box check --config /path/to/config.json
Если конфигурация валидна, вы увидите информационное сообщение. Если нет — sing-box выведет ошибку с указанием строки и символа. Исправьте ошибку и повторите проверку. Обратите внимание, что проверяются не только синтаксис JSON, но и корректность некоторых полей (например, типы данных).
Также полезно запустить `sing-box merge` для объединения нескольких файлов, если вы используете разбитый конфиг. Это помогает обнаружить конфликты между фрагментами.
Шаг 2. Проверка структуры JSON и обязательных полей
Конфигурация sing-box представляет собой JSON-объект. Основные верхнеуровневые поля: log, dns, inbounds, outbounds, route, experimental. Хотя большинство полей необязательны, при запуске вы должны иметь как минимум один inbound и один outbound. Убедитесь, что все названия полей написаны правильно, иначе sing-box может игнорировать неизвестные поля или вообще не запуститься (в зависимости от версии).
{
"log": { "level": "info" },
"inbounds": [],
"outbounds": []
}
Проверьте, что каждый элемент массивов `inbounds` и `outbounds` содержит обязательные поля: для inbound это `type`, `tag`, `listen`, `listen_port`; для outbound — `type`, `tag`, `server`, `server_port`, а также `method` или `password` для соответствующих протоколов. Особое внимание уделите типам: у `vless` обязательно нужен `uuid`, у `vmess` — `uuid` и `alter_id`, у `trojan` — `password`. Если поле не требуется, его можно опустить, но наличие лишних полей также может вызвать предупреждения.
Проверьте, что все теги (tags) уникальны. Дублирующийся `tag` в outbounds или inbounds приведёт к непредсказуемому поведению, а в некоторых случаях — к ошибке при запуске.
Шаг 3. Настройка и проверка DNS
DNS в sing-box играет ключевую роль. Некорректная настройка может привести к утечке DNS-запросов или неправильному разрешению имён. Проверьте секцию dns:
{
"dns": {
"servers": [
{ "tag": "remote", "address": "8.8.8.8" },
{ "tag": "local", "address": "1.1.1.1", "detour": "direct" }
],
"strategy": "ipv4_only",
"independent_cache": true
}
}
Убедитесь, что адреса DNS-серверов корректны и доступны. Если вы используете DNS-серверы через прокси, укажите параметр detour с тегом нужного outbound. Также проверьте параметры стратегии (`strategy`) и кэширования.
Если в вашем конфиге есть правила DNS (`dns.rules`), проверьте их точность. Например, для доменов, которые должны идти через прокси, используйте правило с `server: "remote"`, а для локальных — `server: "local"`. Убедитесь, что указаны корректные типы правил (domain, domain_suffix, etc.) и они не конфликтуют друг с другом.
Для проверки DNS можно использовать команду sing-box tools resolve или просто при запуске понаблюдать за логами. Если на этапе запуска появляются ошибки о таймауте DNS, скорее всего, не работают серверы или неправильно настроен `detour`.
Шаг 4. Проверка маршрутизации (route)
Секция route определяет, как трафик направляется на исходящие подключения. Ошибки здесь приводят к тому, что трафик уходит не туда или блокируется. Основные поля: rules, auto_detect_interface, default_mark и final.
{
"route": {
"rules": [
{ "protocol": "dns", "outbound": "dns-out" },
{ "clash_mode": "global", "outbound": "proxy" }
],
"final": "proxy",
"auto_detect_interface": true
}
}
Проверьте:
- Правильно ли указаны типы правил (domain, ip_cidr, protocol и т.д.).
- Есть ли правило для DNS-трафика, если вы используете отдельный DNS outbound.
- Указан ли `final` — если нет, sing-box вернёт ошибку.
- Приоритет правил: они обрабатываются сверху вниз, первое совпадение решает.
Если вы используете геоданные или rule_set (например, geosite и geoip), убедитесь, что эти файлы загружаются корректно. В новой версии sing-box 1.11 они могут быть встроены, но иногда требуют указания пути. Проверьте, что все ссылки на rule_set доступны, либо файлы существуют.
Для отладки маршрутизации можно использовать лог с уровнем debug, чтобы видеть, какое правило сработало для каждого соединения. Это очень полезно, когда нужный домен не проходит через прокси.
Шаг 5. Проверка TUN и прав доступа
Если вы используете режим TUN, убедитесь, что у процесса есть необходимые права (root или CAP_NET_ADMIN). В конфигурации TUN укажите корректное имя интерфейса, MTU и настройки стека. Проверьте секцию inbounds с типом tun:
{
"type": "tun",
"tag": "tun-in",
"interface_name": "tun0",
"mtu": 1500,
"auto_route": true,
"strict_route": false
}
Убедитесь, что у пользователя есть права на создание TUN-интерфейса. На Linux можно проверить, существует ли устройство `/dev/net/tun`. Также проверьте, не конфликтует ли IP-диапазон TUN с существующими маршрутами.
На Windows TUN может требовать установки драйвера. Убедитесь, что вы используете последнюю версию Wintun или WireGuard. Если sing-box не может открыть TUN, проверьте журнал событий. На Android права выдаются автоматически при использовании VPN-сервиса, но иногда нужно отключить «Обходной маршрут» для некоторых приложений.
При использовании `auto_route` sing-box автоматически настраивает маршруты на TUN-интерфейс. Если вы используете `strict_route`, убедитесь, что понимаете его последствия: он исключает маршруты к локальной сети, и это может заблокировать доступ к вашему роутеру или другим устройствам.
Шаг 6. Проверка VLESS и транспорта
Для подключения к серверу по протоколу VLESS убедитесь, что вы правильно указали сервер, порт, UUID и транспорт. Пример:
{
"type": "vless",
"tag": "vless-out",
"server": "example.com",
"server_port": 443,
"uuid": "ваш-uuid",
"tls": {
"enabled": true,
"server_name": "example.com"
},
"transport": {
"type": "ws",
"path": "/path"
}
}
Проверьте:
- Тип транспорта (`ws`, `grpc`, `httpupgrade` и т.д.) и его параметры соответствуют серверу.
- Если используется TLS, сертификат не должен быть самоподписанным, если не указан `insecure` (это опасно).
- UUID должен быть валидным и совпадать с серверным.
- Если транспорт `ws`, проверьте путь и заголовки Host.
Также важно проверить параметры сети, такие как `network`, `tcp` или `udp` — они должны быть включены, если нужны. Для протоколов, использующих UDP (например, Hysteria2), это критично. Если вы используете REALITY (для VLESS), то вместо `tls` указываются `reality_settings`, и там важно правильно настроить `public_key`, `short_id` и `server_name`. В этой секции любая ошибка приведёт к отсутствию подключения.
Рекомендуется сверить параметры соединения с данными, предоставленными вашим сервером. Часто ошибки возникают из-за неверного пути или заголовков WebSocket. Иногда сервер использует TSL на другом порту, или протокол сам по себе отличается (например, `vless` vs `vmess`).
Шаг 7. Проверка подключения и диагностика
После того как конфиг успешно прошёл синтаксическую проверку, запустите sing-box и понаблюдайте за логами. Если появляются ошибки — исправляйте. Используйте команду sing-box tools fetch для проверки URL, или просто попробуйте свернуть сайт через прокси. Также можно использовать встроенный `sing-box tools validjson` для быстрой проверки JSON.
Не забудьте проверить сетевую связность до сервера: пинг, доступность порта. Иногда проблема в фаерволе или блокировке провайдера. Выполните команду nc -zv example.com 443 (или используйте telnet) для проверки TCP-подключения. Если порт закрыт, вернитесь к настройкам сервера.
Используйте curl с указанием прокси, чтобы изолировать проблему: curl --proxy socks5h://127.0.0.1:1080 https://www.google.com. Это покажет, работает ли цепочка sing-box на транспортном уровне. Если curl успешен, но приложения не подключаются, скорее всего, проблема в правилах маршрутизации или DNS.
В логах sing-box ищите строки с ошибками (error) или предупреждениями (warning). Убедитесь, что уровень лога не ниже info, иначе вы можете не увидеть важные сообщения. Для глубокой диагностики используйте level: "debug" — это позволит увидеть каждое соединение и правило, которое его обработало.
Заключение
Проверка конфигурации sing-box перед запуском — это несложный процесс, который включает несколько этапов. Следуйте этому чек-листу, и вы избежите большинства проблем. Помните, что даже при правильной проверке могут возникать специфические ошибки — всегда смотрите на логи и проверяйте актуальную документацию. Также следите за обновлениями sing-box: новые версии могут менять поведение или вводить новые поля, поэтому конфиг, написанный для старой версии, может перестать работать.
Проверено на практике
- Дата проверки: 2025-03-20
- Среда: Linux x86_64
- Версии: sing-box 1.11.0
Мини-чеклист
- Проверьте синтаксис командой `sing-box check`.
- Убедитесь, что JSON-структура валидна и все обязательные поля присутствуют.
- Проверьте настройку DNS: серверы, стратегию, отсутствие утечек.
- Настройте и проверьте секцию `route`: правила, `final`, приоритет.
- Проверьте TUN: права, имя интерфейса, MTU, конфликты IP.
- Проверьте VLESS-подключение: сервер, порт, UUID, TLS, транспорт.
- После запуска посмотрите логи, проверьте сетевую доступность и используйте curl для теста.
Частые ошибки
- Опечатки в именах полей JSON (например, `interface-name` вместо `interface_name`).
- Незакрытые скобки или лишние запятые в JSON.
- Неверный адрес или порт сервера.
- Неправильный тип транспорта или его параметры (путь, заголовки).
- Отсутствие DNS-серверов или неправильный `final` в route.
- Конфликт портов между inbound и другими процессами.
- Недостаточно прав для TUN (например, запуск не от root).
Источники и документация
FAQ
Что делать, если при запуске sing-box выдает ошибку syntax error?
Это значит, что JSON некорректен. Проверьте все скобки и запятые, затем используйте `sing-box check` для точной локализации ошибки.
Почему не работает DNS, хотя конфиг проверяется корректно?
Проверьте, что DNS-серверы доступны, а также что в route есть правило для перенаправления DNS-трафика на нужный outbound. В TUN-режиме убедитесь, что `auto_route` включён.
Как проверить, что VLESS-подключение работает без запуска полной конфигурации?
Используйте команду `sing-box tools fetch` с указанием конфига и URL, или создайте минимальный конфиг с одним inbound и outbound, чтобы изолировать проблему.
Какие права нужны для TUN в Linux?
Процесс должен быть запущен от root или иметь capabilities: `CAP_NET_ADMIN` и `CAP_NET_RAW`. Также убедитесь, что устройство /dev/net/tun доступно.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ