Что такое sing-box и почему он стал стандартом для обхода блокировок
Sing-box — это мультипротокольный прокси-инструмент с открытым исходным кодом, написанный на Go. Он появился как форк Clash.Meta, но быстро превратился в самостоятельный проект, который сегодня считается основным конкурентом Xray-core. Главная особенность sing-box — единый конфигурационный файл JSON, который описывает все режимы работы: клиент, сервер, TUN-режим и DNS-сервер. Это позволяет заменить сразу несколько программ одним лёгким бинарником.
В отличие от Xray, где для разных протоколов часто нужны отдельные настройки и дополнительные модули, sing-box поддерживает большинство современных протоколов «из коробки»: VLESS, VMess, Shadowsocks, Trojan, Hysteria2, TUIC, WireGuard и XHTTP. Благодаря этому пользователю не нужно устанавливать сторонние мосты или плагины — всё уже встроено. Кроме того, sing-box потребляет меньше памяти и работает быстрее, что особенно заметно на слабых устройствах и VPS с ограниченными ресурсами.
Популярность sing-box в русскоязычном сообществе объясняется его эффективностью против DPI-систем, таких как ТСПУ. Старые клиенты с одним протоколом перестали справляться с детектированием паттернов трафика, а sing-box предлагает гибкую маршрутизацию и поддержку передовых протоколов, включая VLESS Reality и Hysteria2. Это делает его универсальным решением как для персонального использования, так и для корпоративных задач.
VLESS Reality: как работает маскировка трафика и чем она отличается от обычного TLS
VLESS Reality — это протокол, который использует TLS для маскировки трафика под обычный HTTPS-запрос к легитимному сайту. В отличие от традиционного TLS, где требуется сертификат и домен, Reality использует технологию XTLS, которая позволяет серверу «подделывать» рукопожатие с реальным сайтом, например, с www.microsoft.com. Это делает трафик практически неотличимым от обычного веб-серфинга, что эффективно обходит глубокую инспекцию пакетов (DPI).
Ключевые параметры Reality: serverName (SNI), publicKey, privateKey, shortId и fingerprint. serverName — это домен, на который маскируется трафик; он должен быть доступен по HTTPS и поддерживать TLS 1.3. publicKey и privateKey — это пара ключей X25519, которые генерируются на сервере. privateKey остаётся на сервере, а publicKey передаётся клиенту. shortId — это короткий идентификатор в hex-формате, который помогает серверу быстрее распознать клиента. fingerprint — это отпечаток TLS-клиента, например, chrome, который имитирует поведение браузера.
Важно понимать, что VLESS и Reality — это разные вещи. VLESS — это протокол передачи данных, а Reality — это транспортная защита, которая обеспечивает шифрование и маскировку. Они работают вместе: VLESS определяет структуру трафика, а Reality — как этот трафик выглядит для внешнего наблюдателя. Поэтому в конфигурации sing-box вы указываете тип outbound как vless, а внутри блока tls включаете reality.
Выбор VPS для sing-box: минимальные требования и рекомендации
Для развертывания sing-box-сервера подойдёт практически любой VPS, но важно учитывать минимальные требования, чтобы обеспечить стабильную работу. Sing-box сам по себе потребляет немного ресурсов, но операционная система, файрвол и логи тоже занимают память и дисковое пространство.
Рекомендуемые минимальные характеристики:
- CPU: 1 vCPU с частотой от 2.0 GHz. Для интенсивного трафика или множества одновременных подключений лучше 2 vCPU.
- RAM: 512 MB – 1 GB. Для крупных конфигураций с сотнями правил маршрутизации или десятками клиентов рекомендуется 1 GB.
- Дисковое пространство: 10-20 GB NVMe/SSD. Сам sing-box занимает всего несколько мегабайт, но система и логи требуют места.
- Пропускная способность сети: от 100 Mbps до 1 Gbps. Для потокового видео или большого числа пользователей лучше от 500 Mbps.
Операционная система: рекомендуется Debian 11/12, Ubuntu Server 20.04/22.04 LTS или CentOS Stream 8/9. Эти дистрибутивы отличаются стабильностью и актуальными пакетами безопасности. После развертывания VPS обязательно обновите систему и установите базовые утилиты: curl, wget, git, nano, htop, screen, unzip.
Также важно настроить файрвол. Для Debian/Ubuntu используйте UFW, для CentOS — firewalld. Разрешите SSH-подключение, а затем откройте порты, которые будете использовать для VLESS Reality и Hysteria2. Например, для Reality обычно используется порт 443 (TCP), для Hysteria2 — 8443 (UDP).
Установка sing-box на сервер: пошаговая инструкция
Установка sing-box на VPS занимает всего несколько минут. Самый простой способ — использовать официальный скрипт установки, который загрузит последнюю стабильную версию и разместит исполняемый файл в /usr/local/bin/sing-box.
Выполните команду:
sudo bash -c "$(curl -L https://raw.githubusercontent.com/SagerNet/sing-box/main/install.sh)"После установки проверьте версию:
sing-box versionЗатем создайте директорию для конфигурационных файлов:
sudo mkdir -p /etc/sing-boxВсе конфигурации будут храниться в /etc/sing-box/config.json. Это стандартное расположение для системных конфигураций. Если вы планируете использовать несколько конфигов, можно создавать файлы с другими именами.
Для запуска sing-box как службы используйте systemd. Установочный скрипт обычно создаёт службу автоматически, но если нет, вы можете создать файл /etc/systemd/system/sing-box.service с описанием запуска. После этого выполните:
systemctl enable sing-box
systemctl start sing-box
systemctl status sing-boxУбедитесь, что служба работает без ошибок. Если что-то пошло не так, проверьте логи: journalctl -u sing-box -f.
Настройка серверной части: конфигурация VLESS Reality и Hysteria2
Серверная конфигурация sing-box описывается в JSON-файле. Основные секции: log, dns, inbounds, outbounds, route. Для сервера нам нужны inbounds — входящие соединения, которые будут принимать трафик от клиентов.
Пример конфигурации для VLESS Reality:
{
"inbounds": [
{
"type": "vless",
"tag": "vless-reality-in",
"listen": "::",
"listen_port": 443,
"users": [
{
"uuid": "ваш-uuid-здесь",
"flow": ""
}
],
"tls": {
"enabled": true,
"server_name": "www.microsoft.com",
"reality": {
"enabled": true,
"handshake": {
"server": "www.microsoft.com",
"server_port": 443
},
"private_key": "ваш-private-key",
"short_id": ["ваш-short-id"]
}
}
}
]
}Для Hysteria2 конфигурация будет выглядеть так:
{
"type": "hysteria2",
"tag": "hy2-in",
"listen": "::",
"listen_port": 8443,
"up_mbps": 200,
"down_mbps": 500,
"users": [
{
"password": "ваш-пароль"
}
],
"tls": {
"enabled": true,
"server_name": "www.microsoft.com",
"alpn": ["h3"],
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
}
}Не забудьте добавить outbound direct, чтобы сервер мог выходить в интернет. После сохранения конфигурации перезапустите sing-box и проверьте, что порты открыты в файрволе.
Генерация ключей и UUID для VLESS Reality
Для работы VLESS Reality необходимо сгенерировать пару ключей X25519, UUID пользователя и shortId. Все это можно сделать с помощью встроенных команд sing-box.
Генерация ключей Reality:
sing-box generate reality-keypairВывод будет содержать PrivateKey и PublicKey. PrivateKey нужно указать в серверной конфигурации, а PublicKey — в клиентской. Никогда не публикуйте PrivateKey — это скомпрометирует сервер.
Генерация UUID:
sing-box generate uuidГенерация shortId (8 символов в hex):
sing-box generate rand --hex 8ShortId может быть пустым, но лучше указать его, чтобы ускорить handshake. Убедитесь, что shortId соответствует формату: только hex-символы (0-9, a-f). Если вы используете несколько shortId, укажите их списком в конфигурации.
Важно: при передаче профиля клиенту не включайте privateKey и не публикуйте UUID в открытых источниках. Если ключи скомпрометированы, их нужно перегенерировать и обновить конфигурацию.
Настройка клиента sing-box: Windows, macOS, Linux, Android и iOS
Sing-box можно использовать как клиент на всех основных платформах. Для Windows и macOS удобно использовать графические оболочки, такие как Clash Verge или NekoBox, которые поддерживают ядро sing-box. Для Linux — командную строку или те же оболочки. На Android — официальный клиент SFI (Sing-box for Android) или NekoBox. На iOS — Streisand (форк Shadowrocket) или Sing-box for iOS через TestFlight.
Клиентская конфигурация описывает outbounds — исходящие соединения. Пример для VLESS Reality:
{
"outbounds": [
{
"type": "vless",
"tag": "vless-reality",
"server": "your-server-ip.com",
"server_port": 443,
"uuid": "your-uuid-here",
"flow": "",
"tls": {
"enabled": true,
"utls": {
"enabled": true,
"fingerprint": "chrome"
},
"reality": {
"enabled": true,
"public_key": "your-public-key",
"short_id": "your-short-id"
}
}
}
]
}Для Hysteria2:
{
"type": "hysteria2",
"tag": "hysteria2-out",
"server": "your-hy2-server.com",
"server_port": 443,
"password": "your-password",
"tls": {
"enabled": true,
"server_name": "www.microsoft.com",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
}
}Также добавьте outbound direct и block. В секции route настройте правила: российские сайты — напрямую, заблокированные — через прокси, реклама — блокировать.
Маршрутизация трафика: geoip, geosite и правила для России
Маршрутизация — одна из самых мощных функций sing-box. Она позволяет направлять разные типы трафика через разные каналы: например, российские сайты — напрямую, а заблокированные — через VLESS Reality. Это снижает нагрузку на прокси и ускоряет доступ к локальным ресурсам.
В секции route вы определяете правила, которые сопоставляют трафик с outbound. Правила могут основываться на geoip (IP-адреса), geosite (домены) или других параметрах, таких как протокол или порт.
Пример правил для России:
"route": {
"rules": [
{ "protocol": "dns", "outbound": "dns-out" },
{ "geosite": "category-ads", "outbound": "block" },
{ "geosite": "yandex", "outbound": "direct" },
{ "geosite": "vk", "outbound": "direct" },
{ "geosite": "mailru", "outbound": "direct" },
{ "geoip": "ru", "outbound": "direct" },
{ "geosite": "google", "outbound": "vless-reality" },
{ "geosite": "youtube", "outbound": "hysteria2-out" },
{ "geosite": "netflix", "outbound": "vless-reality" },
{ "geosite": "telegram", "outbound": "vless-reality" }
],
"final": "vless-reality",
"auto_detect_interface": true
}Здесь final — это outbound по умолчанию для всего остального трафика. auto_detect_interface позволяет автоматически определять сетевой интерфейс для TUN-режима.
Также важно настроить DNS. Используйте DNS-over-HTTPS (например, Cloudflare 1.1.1.1) или DNS-over-TLS (Google 8.8.8.8) для защиты от DNS-блокировок. Для российских сайтов можно использовать локальный DNS провайдера, чтобы ускорить доступ.
Диагностика и устранение типичных ошибок VLESS Reality
Даже при правильной настройке могут возникать проблемы с подключением. Рассмотрим самые частые ошибки и способы их решения.
- Handshake timeout — это когда клиент не может установить TLS-соединение с сервером. Причины: неправильный serverName, неверный publicKey, заблокированный порт, проблемы с сетью. Проверьте, что порт открыт, serverName доступен по HTTPS, и ключи совпадают.
- shortId ошибка — если shortId указан не в hex-формате или имеет неправильную длину, подключение не установится. Убедитесь, что shortId состоит только из символов 0-9 и a-f, и его длина кратна 2 (обычно 8 символов).
- Подключение есть, но нет интернета — проблема может быть в DNS или маршрутизации. Проверьте, что DNS-серверы настроены правильно, и что трафик не блокируется правилами. Попробуйте временно отключить TUN-режим и использовать SOCKS-прокси.
- Работает через Wi-Fi, но не через LTE — это часто связано с блокировкой портов мобильным оператором. Попробуйте сменить порт (например, с 443 на 8443) или использовать Hysteria2, который работает через UDP.
- Ошибка fingerprint — если fingerprint не совпадает с ожидаемым, сервер может отклонить соединение. Убедитесь, что в клиенте указан тот же fingerprint, что и на сервере (например, chrome).
Для диагностики используйте логи sing-box: journalctl -u sing-box -f на сервере и консоль клиента. Меняйте один параметр за раз и проверяйте результат.
Безопасность и приватность: что нельзя публиковать и как защитить сервер
VLESS Reality обеспечивает хорошую маскировку трафика, но не является панацеей. Важно соблюдать правила безопасности, чтобы не скомпрометировать сервер и не потерять доступ.
Никогда не публикуйте privateKey, UUID и пароли. Если они попадут в открытый доступ, злоумышленники смогут подключиться к вашему серверу или подделать трафик. При передаче профиля клиенту используйте защищённые каналы (например, зашифрованные мессенджеры) или подписки с авторизацией.
Также не рекомендуется использовать один и тот же UUID для нескольких пользователей. Для каждого клиента лучше генерировать отдельный UUID. Если вы администрируете сервер для нескольких человек, рассмотрите использование панели управления, такой как 3X-UI или Marzban, которые упрощают управление пользователями.
Регулярно обновляйте sing-box до последней версии, чтобы получать исправления уязвимостей. Настройте файрвол так, чтобы были открыты только необходимые порты, и ограничьте доступ к SSH по ключам, а не по паролю.
Помните, что даже с Reality ваш IP-адрес виден серверу, а метаданные (время подключения, объём трафика) могут логироваться. Для максимальной приватности используйте дополнительные инструменты, такие как анонимные платежи и VPN-цепочки.
Вопросы и ответы
Чем sing-box отличается от Xray-core?
Sing-box — это мультипротокольный прокси-инструмент на Go, который поддерживает больше протоколов «из коробки», включая Hysteria2, WireGuard и XHTTP. Он потребляет меньше памяти и работает быстрее. В отличие от Xray, sing-box имеет встроенный TUN-режим и DNS-сервер, а также единый конфигурационный файл для всех режимов. Xray-core — это преемник V2Ray, который также поддерживает VLESS Reality, но требует дополнительных модулей для некоторых протоколов.
Как выбрать serverName для VLESS Reality?
ServerName (SNI) — это домен, на который маскируется ваш трафик. Он должен быть доступен по HTTPS и поддерживать TLS 1.3. Лучше выбирать популярные сайты, такие как www.microsoft.com, www.apple.com или www.cloudflare.com. Убедитесь, что домен не заблокирован в вашей стране и что сервер может установить с ним соединение. Не используйте домены, которые вы сами контролируете, так как это может выдать вас.
Что делать, если VLESS Reality не подключается?
Проверьте по порядку: 1) порт открыт на сервере и в файрволе; 2) serverName доступен и поддерживает TLS 1.3; 3) publicKey и privateKey совпадают; 4) shortId указан в hex-формате и совпадает; 5) UUID и flow корректны; 6) fingerprint совпадает (например, chrome). Также проверьте системное время на сервере и клиенте — оно должно быть синхронизировано. Используйте логи sing-box для детальной диагностики.
Можно ли использовать sing-box одновременно как клиент и сервер?
Да, sing-box поддерживает одновременную работу в режиме клиента и сервера. В конфигурационном файле вы можете указать и inbounds (для приёма подключений), и outbounds (для исходящих соединений). Это позволяет, например, организовать прокси-цепочку или предоставить доступ к вашему серверу другим пользователям, при этом сам сервер будет использовать прокси для выхода в интернет.
Как обновить профиль VLESS Reality без ручного редактирования?
Используйте подписку (subscription URL). Многие клиенты, такие как v2rayN, NekoBox и Streisand, поддерживают автоматическое обновление профилей по ссылке. На сервере вы можете разместить файл с конфигурацией и обновлять его при изменении параметров. Клиент будет периодически загружать новый профиль. Убедитесь, что ссылка защищена и не доступна посторонним.
Почему Hysteria2 работает быстрее, чем VLESS Reality?
Hysteria2 использует протокол QUIC (UDP), который обеспечивает более высокую скорость и низкую задержку в условиях нестабильных сетей, особенно при потере пакетов. VLESS Reality работает поверх TCP, что может быть медленнее при высоком пинге или перегрузках. Однако Reality лучше маскирует трафик под HTTPS, поэтому его часто используют для обхода DPI. Оптимально комбинировать оба протокола: Reality для стабильности, Hysteria2 для скорости.