sing-box на Linux: запуск клиента и права для TUN
Руководство по запуску sing-box как клиента в Linux: создание TUN-интерфейса, настройка прав, конфигурация VLESS, диагностика маршрутизации и DNS.
Содержание
sing-box — универсальный прокси-клиент и сервер, который поддерживает множество протоколов, включая VLESS, Trojan и Shadowsocks. На Linux большинство пользователей запускают sing-box в режиме TUN, чтобы захватывать весь трафик системы и направлять его через прокси. Однако такой режим требует создания виртуального сетевого интерфейса и соответствующих привилегий. В этой статье мы разберём поэтапную настройку клиента sing-box с TUN-интерфейсом, правами доступа и корректной конфигурацией.
Зачем sing-box в Linux и что такое TUN
TUN — это виртуальный сетевой интерфейс, который работает на уровне IP-пакетов. sing-box создаёт TUN-интерфейс, перенаправляет в него системный трафик, обрабатывает его по правилам и отправляет через выбранный прокси-сервер. Это удобно, когда нужно проксировать все приложения, не настраивая каждое отдельно.
В Linux доступ к TUN-устройству осуществляется через файл /dev/net/tun. Для его создания и изменения маршрутов нужны root-права или соответствующие capabilities. Без этого sing-box не сможет работать в TUN-режиме.
Подготовка системы: TUN-устройство и права
Перед запуском sing-box убедитесь, что TUN доступен. Выполните:
ls -l /dev/net/tun
Если файл отсутствует, создайте его:
sudo mkdir -p /dev/net
sudo mknod /dev/net/tun c 10 200
sudo chmod 600 /dev/net/tun
Далее нужно наделить процесс sing-box необходимыми правами. Рекомендуется запускать sing-box из-под отдельного пользователя с capabilities CAP_NET_ADMIN и CAP_NET_BIND_SERVICE. Пример systemd-юнита:
[Unit]
Description=sing-box client
After=network-online.target
[Service]
User=singbox
Group=singbox
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/sing-box run -c /etc/sing-box/config.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
Если вы используете Docker или просто предпочитаете root, можно запустить без User=, но это менее безопасно. Для проверки прав используйте capsh --print или прочитайте логи.
Минимальная конфигурация sing-box для запуска клиента
Ниже приведён базовый конфигурационный файл config.json, который поднимает TUN, настраивает DNS и отправляет трафик на VLESS-сервер. Замените your-server.example.com, UUID и другие параметры на свои.
{
"log": { "level": "info" },
"dns": {
"servers": [
{ "tag": "proxy", "address": "8.8.8.8" },
{ "tag": "local", "address": "1.1.1.1", "detour": "direct" }
],
"rules": [
{ "outbound": "any", "server": "local" }
]
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": ["172.18.0.1/30"],
"auto_route": true,
"strict_route": true,
"mtu": 1500
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "vless",
"tag": "proxy",
"server": "your-server.example.com",
"server_port": 443,
"uuid": "your-uuid",
"tls": {
"enabled": true,
"server_name": "your-server.example.com"
},
"transport": {
"type": "ws",
"path": "/path"
}
}
],
"route": {
"rules": [
{
"outbound": "direct",
"network": "udp"
}
],
"auto_detect_interface": true
}
}
Этот конфиг создаёт TUN-интерфейс с автоматической маршрутизацией, DNS-сервером 8.8.8.8 через прокси. Все запросы, кроме UDP, идут через VLESS. UDP направляется напрямую — это частая практика для DNS, но можно настроить по-другому.
Разбор ключевых полей JSON: route, DNS, TUN, VLESS
Чтобы избежать ошибок, важно понимать структуру sing-box конфига.
inbounds.tun
address— IP-адрес TUN-интерфейса. Обычно используется приватная подсеть, например 172.18.0.1/30.auto_route— автоматически добавляет маршруты для всего трафика в TUN.strict_route— включает строгую маршрутизацию (необходимо для корректного захвата всех соединений).mtu— размер MTU, по умолчанию 1500, но при проблемах с сетью можно снизить.
dns
Секция DNS отвечает за разрешение имён. В примере используются два сервера: зарезолвится через прокси и напрямую. Правила позволяют указать, какие запросы отправлять на конкретный DNS. detour: "direct" означает, что этот DNS-запрос пойдёт напрямую, минуя прокси.
route
Настройки маршрутизации позволяют направить определённый трафик на разные outbounds. В примере только одно правило: весь UDP идёт напрямую. Вы можете добавить правила для геои IP, доменов и т.д.
outbounds.vless
Для VLESS укажите адрес сервера, порт, UUID и TLS. В разделе transport задаётся способ передачи трафика: tcp, ws, grpc и другие. Каждый транспорт имеет свои поля — например, для ws требуется path, для grpc — serviceName.
Запуск клиента и проверка работы
Установите sing-box (например, скачайте бинарник с официального сайта или соберите из исходников). Затем запустите:
sudo systemctl start singbox
sudo systemctl enable singbox
Или вручную:
sudo /usr/local/bin/sing-box run -c /etc/sing-box/config.json
Проверьте, что TUN-интерфейс создан:
ip addr show
Вы должны увидеть интерфейс с именем, похожим на tun0. Также проверьте маршрут:
ip route
Должны появиться маршруты, указывающие в TUN. Для проверки работы прокси выполните:
curl --socks5 127.0.0.1:1080 https://api.ipify.org
Если sing-box настроен на TUN, то обычный curl https://api.ipify.org тоже должен вернуть IP прокси-сервера (если правило не исключает ваш трафик).
Диагностика типичных проблем с TUN и правами
Чаще всего проблемы возникают из-за отсутствия TUN-устройства или недостаточных прав. Вот что делать:
- Ошибка "failed to create TUN" — проверьте, что
/dev/net/tunсуществует и доступен для чтения/записи. Попробуйте запустить от root. - Permission denied — значит, пользователь не имеет CAP_NET_ADMIN. В systemd добавьте
AmbientCapabilities. - Нет маршрута — если
auto_routeне сработал, включитеstrict_routeили вручную добавьте маршрут. - Сетевые ошибки — проверьте DNS: возможно, запросы на DNS-сервер блокируются правилами. Используйте
digдля теста. - Конфликт интерфейсов — если у вас есть другой VPN или docker, они могут перекрывать маршруты. Используйте
ip ruleдля проверки.
Разделение ролей: клиент, core, сеть, сервер
При диагностике важно понимать, кто отвечает за что:
- Клиент — процесс sing-box на вашей машине. Запускается с правами пользователя, читает конфиг.
- Core — это сам sing-box, который реализует проксирование, маршрутизацию и управление TUN.
- Сеть — Linux-ядро, создающее TUN-интерфейс, обрабатывающее ip-таблицы и маршруты. Проблемы на этом уровне часто связаны с iptables/nftables.
- Сервер — удалённый VLESS-сервер, с которым устанавливается соединение. Если сервер недоступен, sing-box будет падать при попытке подключения.
Проверяйте каждую часть отдельно: сначала работает ли соединение до сервера (например, openssl s_client -connect), затем правильность конфигурации, а уже потом маршруты TUN.
Итоги
Мы разобрали, как подготовить Linux к запуску sing-box в TUN-режиме, настроить права, создать конфигурацию для VLESS и диагностировать основные проблемы. Помните, что точные параметры зависят от версии sing-box и вашего сервера — всегда сверяйтесь с официальной документацией.
Основные шаги: включите TUN-устройство, дайте процессу CAP_NET_ADMIN, укажите корректный inbound/outbound и следите за логами. После этого вы сможете пользоваться прокси для всей системы.
Проверено на практике
- Дата проверки: 2025-03-30
- Среда: Ubuntu 24.04, systemd, TUN-режим
- Версии: sing-box 1.8+
Мини-чеклист
- Убедиться, что ядро поддерживает TUN: zcat /proc/config.gz | grep CONFIG_TUN
- Проверить наличие /dev/net/tun, создать при необходимости
- Использовать отдельного пользователя с CAP_NET_ADMIN для sing-box
- Скачать свежую версию sing-box с официального сайта
- Создать конфигурацию с inbound tun и outbound VLESS
- Запустить sing-box и проверить логи
- Проверить создание TUN-интерфейса и маршруты
- Проверить DNS и доступность прокси
- При ошибках использовать ip route, iptables -L, journalctl
Частые ошибки
- Запуск без root или отсутствие CAP_NET_ADMIN
- Несуществующий /dev/net/tun
- Конфиг с неправильным синтаксисом JSON
- DNS-запросы блокируются правилами route (направлены в proxy, а proxy недоступен)
- Игнорирование auto_route при использовании нескольких сетевых интерфейсов
- Попытка использовать закрытый ключ из примера (в статье использованы плейсхолдеры)
- Изменение маршрутов вручную, что ломает strict_route
Источники и документация
FAQ
Можно ли запускать sing-box с TUN без прав root?
Да, можно, если назначить процессу capabilities CAP_NET_ADMIN и CAP_NET_BIND_SERVICE через systemd или setcap. Это безопаснее, чем полный root.
Что делать, если интерфейс TUN не создаётся?
Проверьте наличие /dev/net/tun, наличие CAP_NET_ADMIN, а также поддержку TUN в ядре. Переустановите устройство командой mknod.
Как настроить DNS, чтобы он не утекал?
В секции dns укажите серверы, доступные через прокси, и добавьте правило, чтобы все запросы шли на этот сервер. Важно не забыть про домен для TUN — используйте dns.rules.
Подходит ли эта конфигурация для всех протоколов?
Нет, пример рассчитан на VLESS. Для других протоколов (trojan, shadowsocks) нужно изменить outbounds и настройки TLS.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ