Быстрый старт Настройка Обновлено 6 Linux

sing-box на Linux: запуск клиента и права для TUN

Руководство по запуску sing-box как клиента в Linux: создание TUN-интерфейса, настройка прав, конфигурация VLESS, диагностика маршрутизации и DNS.

sing-boxTUNLinuxVLESSклиентправа
Содержание
КороткоSing-box на Linux требует правильной настройки TUN-устройства и прав (CAP_NET_ADMIN). В статье — пример конфигурации для VLESS, разбор полей route, DNS, TUN, а также типичные ошибки и способы их решения.

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.

Хотите перейти сразу к рабочему доступу?

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

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

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

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