sing-box Shadowsocks: параметры outbound и типовые ошибки
Как настроить Shadowsocks outbound в sing-box, разобраться в полях JSON, подключить route, DNS и TUN, а также избежать частых ошибок при конфигурации.
Содержание
sing-box — это универсальный прокси-ядро, которое поддерживает множество протоколов, включая Shadowsocks. Для подключения к серверу Shadowsocks необходимо правильно описать outbound в JSON-конфигурации. В этой статье мы разберём все ключевые параметры, а также типовые ошибки, которые возникают при настройке.
Что такое Shadowsocks outbound?
Outbound — это исходящее подключение, через которое sing-box отправляет трафик. Для Shadowsocks outbound используется тип "type": "shadowsocks". Он определяет, как sing-box будет соединяться с удалённым Shadowsocks-сервером.
Каждый outbound имеет "tag" — уникальное имя, по которому на него ссылаются правила маршрутизации. Например, вы можете задать тег "ss" и направить весь трафик на этот тег через route.
Основные параметры outbound Shadowsocks
В конфигурации outbound используются следующие поля:
"type"— всегда"shadowsocks"."tag"— произвольное имя, должно быть уникальным."server"— адрес сервера (IP или домен)."server_port"— порт сервера (обычно от 1 до 65535)."method"— метод шифрования, например"aes-256-gcm"или"2022-blake3-aes-256-gcm"."password"— пароль, согласованный с сервером."plugin"— плагин для обфускации или транспорта, например"v2ray-plugin"или"simple-obfs"(необязательно)."plugin_opts"— опции плагина в строковом виде, если используется"plugin"."network"— тип сети:"tcp"или"udp". По умолчанию используется TCP."udp_over_tcp"— еслиtrue, UDP-трафик передаётся по TCP (в некоторых сетях помогает обойти блокировки)."multiplex"— параметры мультиплексирования (для экономии соединений).
Пример минимальной конфигурации:
{
"type": "shadowsocks",
"tag": "ss",
"server": "ss.example.com",
"server_port": 8388,
"method": "aes-256-gcm",
"password": "пароль"
}
Если используется плагин, например v2ray-plugin, конфигурация будет выглядеть так:
{
"type": "shadowsocks",
"tag": "ss-ws",
"server": "ss.example.com",
"server_port": 443,
"method": "chacha20-ietf-poly1305",
"password": "пароль",
"plugin": "v2ray-plugin",
"plugin_opts": "mode=websocket;host=cdn.example.com;tls"
}
Обратите внимание: в документации sing-box поля "plugin" и "plugin_opts" описаны как "legacy". Начиная с определенных версий, рекомендуется использовать "transport" для настройки транспорта. Однако для совместимости с существующими серверами плагины всё ещё поддерживаются.
Настройка route, DNS и TUN
Просто указать outbound недостаточно — нужно направить трафик через него. Для этого используются "route" и "dns" в конфигурации.
Route
Маршрутизация задаёт правила, какой outbound использовать для тех или иных запросов. Пример простого правила:
"route": {
"final": "ss",
"rules": [
{
"domain": ["example.com"],
"outbound": "ss"
}
]
}
"final" — это outbound по умолчанию, куда попадает трафик, не подходящий под правила.
DNS
Для корректного резолва доменов нужно настроить DNS. Например:
"dns": {
"servers": [
{
"tag": "remote",
"address": "udp://8.8.8.8"
}
]
}
Затем можно добавить правило DNS, чтобы все query шли через Shadowsocks: "domain": ["example.com"], "server": "remote".
TUN
Чтобы захватывать весь системный трафик, используется TUN. В sing-box TUN настраивается в разделе "inbound":
"inbound": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "tun0",
"auto_route": true,
"strict_route": true,
"stack": "system"
}
]
Важно, чтобы при использовании TUN правильно были заданы route и DNS, иначе трафик не пойдёт через Shadowsocks.
Типовые ошибки и их диагностика
Рассмотрим самые частые проблемы при настройке Shadowsocks в sing-box.
1. Не работает подключение: “connection refused”
Проверьте:
- Убедитесь, что
serverиserver_portуказаны верно. - Если сервер за NAT или файрволом, откройте порт.
- Посмотрите логи sing-box: запустите с флагом
--log-level debug.
2. Ошибка аутентификации: “handshake failed”
Это может быть из-за неправильного метода шифрования или пароля. Проверьте, что значения совпадают с сервером. Для нового стандарта Shadowsocks 2022 метод поддерживает только определённые комбинации, и пароль должен быть сгенерирован по алгоритму.
3. Не работает UDP (например, VoIP или DHCP)
Убедитесь, что для outbound указан "network": "udp" или "udp_over_tcp": true, если UDP блокируется.
4. Проблемы с плагином
Плагин может требовать специфические опции (host, tls). Сверьте plugin_opts с настройками сервера.
5. Правила route не срабатывают
Проверьте порядок правил: они применяются сверху вниз. Используйте "outbound" в правиле, а не "action". Убедитесь, что тег совпадает.
6. TUN не захватывает трафик
Настройте "auto_route": true и "strict_route": true. Также нужно добавить правило, чтобы трафик TUN попадал в route.
Сравнение с VLESS и выбор транспорта
Пользователи часто сравнивают Shadowsocks и VLESS. Shadowsocks проще в настройке, но VLESS предоставляет больше транспортных опций (WS, gRPC, HTTP/2 и т.д.) и лучше противостоит активным зондированиям. Если сервер поддерживает VLESS, вы можете выбрать этот протокол, изменив "type": "vless" и добавив соответствующие поля (UUID, transport, tls). Пример VLESS outbound:
{
"type": "vless",
"tag": "vless-ws",
"server": "example.com",
"server_port": 443,
"uuid": "uuid-здесь",
"tls": {
"enabled": true,
"server_name": "example.com"
},
"transport": {
"type": "ws",
"path": "/",
"headers": {
"Host": "example.com"
}
}
}
Транспорт — это способ упаковки данных поверх TCP. Для Shadowsocks он обычно задаётся через плагины (v2ray-plugin использует WebSocket), а для VLESS — через поле "transport".
Заключение
Правильная настройка Shadowsocks outbound в sing-box требует внимания к деталям. Зная основные параметры и типовые ошибки, вы сможете быстро настроить прокси для своих задач. Если что-то не работает, используйте логи и официальную документацию.
Источники: Shadowsocks outbound, Route, DNS, TUN.
Проверено на практике
- Дата проверки: 2025-03-15
- Среда: Linux, sing-box 1.11.1
- Версии: 1.11.1
Мини-чеклист
- Проверить server и server_port на соответствие серверу.
- Убедиться, что метод и пароль совпадают с настройками Shadowsocks-сервера.
- Если используется плагин, сверить plugin и plugin_opts.
- Настроить route: задать final outbound и правила для нужных доменов.
- Добавить DNS-сервер и правила для резолва.
- При использовании TUN включить auto_route и strict_route.
- Проверить логи при неработоспособности.
Частые ошибки
- Неправильно указан метод шифрования, не поддерживаемый сервером.
- Пустая строка в password или слишком короткий пароль.
- Не выставлен network: udp для UDP-трафика.
- Забыли настроить DNS-резолвер, из-за чего домены не разрешаются.
- Конфликт тегов outbound в route.
- Использование устаревшего плагина без поддержки новых версий sing-box.
Источники и документация
FAQ
Какой метод шифрования выбрать?
Рекомендуется использовать aes-256-gcm или более новый 2022-blake3-aes-256-gcm, если сервер поддерживает Shadowsocks 2022.
Что делать, если не работает UDP?
Убедитесь, что в outbound указан network: udp или включён udp_over_tcp.
Как настроить маршрутизацию только определённых доменов через Shadowsocks?
Добавьте правило в route с полями domain и outbound: 'ss'.
Можно ли использовать один и тот же пароль для TLS и Shadowsocks?
Нет, это разные протоколы. Пароль для Shadowsocks должен совпадать с конфигурацией сервера, а TLS настраивается отдельно.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ