Быстрый старт Настройка Обновлено 5 windows, macos, linux, android, ios

sing-box TUN: настройка auto_route, strict_route и доступ к локальной сети

Как правильно настроить TUN в sing-box, чтобы получить доступ к локальной сети. Разбираем параметры auto_route и strict_route, примеры конфигурации и диагностику проблем.

sing-boxTUNauto_routestrict_routeлокальная сетьмаршрутизация
Содержание
КороткоЧтобы получить доступ к локальной сети при включенном TUN, настройте auto_route и strict_route правильно, добавьте исключения для локальных подсетей в route_exclude_address и настройте DNS. Используйте route_address_set для точного контроля.

sing-box — это мощный универсальный прокси-клиент, который поддерживает режим TUN (сетевой туннель). С его помощью можно захватывать весь трафик системы и направлять его через прокси. Однако при настройке TUN важно правильно сконфигурировать параметры auto_route и strict_route, а также обеспечить доступ к локальной сети, которая часто блокируется после активации TUN. В этой статье разберём, как это сделать.

Что такое TUN в sing-box?

TUN — это виртуальный сетевой интерфейс, который создаёт sing-box. Он перехватывает IP-пакеты на уровне ядра и передаёт их в пользовательское пространство для обработки. Это позволяет проксировать весь трафик без необходимости настраивать каждое приложение отдельно. В конфигурации sing-box TUN задаётся как inbound-объект с типом tun.

{
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "interface_name": "tun0",
      "address": ["10.0.0.1/24", "fdfe:dcba::1/128"],
      "mtu": 1500,
      "auto_route": true,
      "strict_route": true,
      "stack": "system"
    }
  ]
}

Здесь:

  • interface_name — имя интерфейса (можно любое);
  • address — IP-адреса, которые получает TUN-интерфейс;
  • mtu — максимальный размер пакета;
  • stack — сетевой стек (лучше использовать system на большинстве платформ);
  • auto_route и strict_route — управляют маршрутизацией.

Параметры auto_route и strict_route

auto_route — это опция, которая автоматически добавляет маршруты для всего трафика в TUN-интерфейс. Если она включена, sing-box сама настраивает таблицу маршрутизации так, чтобы все пакеты шли через TUN. Это удобно, но может привести к блокировке доступа к локальной сети, если не предусмотреть исключения.

strict_route — более агрессивный режим. Он не только добавляет маршруты, но и запрещает обход TUN, удаляя или переопределяя существующие маршруты. Например, strict_route отключает возможность использовать другие интерфейсы для прямого соединения, если это явно не разрешено. Это повышает надёжность захвата трафика, но может полностью отрезать локальную сеть, если не добавить исключения.

Важно понимать: даже с auto_route: true и strict_route: false sing-box по умолчанию исключает некоторые частные подсети (например, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) из маршрутизации, но это поведение может отличаться в зависимости от версии и платформы. Включать strict_route стоит только если вы точно знаете, что нужно перехватывать абсолютно весь трафик.

Доступ к локальной сети: проблема и решение

После включения TUN, особенно с strict_route, устройства в локальной сети (роутер, принтер, NAS, другие компьютеры) могут стать недоступными. Это происходит потому, что маршрут по умолчанию указывает на TUN, и пакеты, предназначенные для локальных IP, уходят в прокси, а не в физическую сеть.

Решение — явно исключить локальные подсети из маршрутизации через TUN. В sing-box для этого есть параметр route_exclude_address (в некоторых версиях route_exclude). Он позволяет указать список CIDR-подсетей, которые не должны попадать в TUN. Также можно использовать route_address_set для включения только нужных диапазонов.

Рекомендуется исключать стандартные приватные диапазоны:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • 169.254.0.0/16 (link-local)

Также может понадобиться исключить подсеть, используемую вашим роутером, например 192.168.1.0/24, если она не входит в стандартные.

Пример конфигурации TUN с доступом к локальной сети

Рассмотрим полный пример inbound-блока TUN с правильными настройками:

{
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "interface_name": "tun0",
      "address": ["10.0.0.1/24", "fdfe:dcba::1/128"],
      "mtu": 1500,
      "auto_route": true,
      "strict_route": true,
      "stack": "system",
      "route_exclude_address": [
        "10.0.0.0/8",
        "172.16.0.0/12",
        "192.168.0.0/16",
        "169.254.0.0/16"
      ]
    }
  ]
}

Если вы используете strict_route, но не хотите полностью отрезать локальную сеть, можно дополнительно добавить исключения для конкретных подсетей. Например, если ваш роутер находится на 192.168.1.1, а подсеть 192.168.1.0/24 уже исключена, то доступ будет работать. Но если у вас несколько маршрутизаторов или VLAN, добавьте их вручную.

Обратите внимание: в некоторых версиях sing-box параметр называется route_exclude_address, в более старых — exclude. Проверьте актуальную документацию для вашей версии.

Диагностика и частые ошибки

Если локальная сеть недоступна, выполните следующие шаги:

  1. Проверьте, какие маршруты добавлены. На Windows: route print, на Linux: ip route.
  2. Убедитесь, что локальные подсети перечислены в route_exclude_address.
  3. Проверьте DNS — возможно, локальные имена не резолвятся. Настройте DNS-серверы для локальных зон.
  4. Временно отключите strict_route и проверьте доступность.
  5. Попробуйте использовать stack: gvisor или system — на некоторых платформах поведение отличается.

Частая ошибка — исключение только подсети роутера, но не всей приватной сети. Например, если ваш IP 192.168.0.5, а роутер 192.168.1.1, то подсети разные. Лучше исключить 192.168.0.0/16 целиком.

Ещё одна ошибка — использование strict_route: true без необходимости. strict_route в основном нужен для борьбы с утечками DNS или для обхода ограничений, но для обычного использования достаточно auto_route. Убедитесь, что вы понимаете последствия.

Советы по маршрутизации и DNS

Чтобы локальная сеть работала стабильно, настройте DNS в sing-box. Если вы используете auto_route, DNS-запросы могут также направляться через TUN. Чтобы локальные имена резолвились, можно добавить в конфигурацию DNS-раздел:

"dns": {
  "servers": [
    {"tag": "local", "address": "192.168.1.1", "detour": "direct"},
    {"tag": "proxy", "address": "8.8.8.8"}
  ],
  "rules": [
    {"clash_mode": "default", "server": "proxy"},
    {"domain_suffix": [".local"], "server": "local"}
  ]
}

Здесь .local домены будут резолвиться через локальный DNS-сервер, а остальные — через прокси. Не забудьте сделать enable для DNS и указать dns в конфигурации.

Также можно использовать route_address_set, чтобы направлять через TUN только определённые IP-диапазоны, а остальное — напрямую. Это полезно, если вы хотите проксировать только зарубежный трафик, а локальный оставить как есть.

В заключение, TUN в sing-box — гибкий инструмент, но требует аккуратной настройки. Всегда проверяйте документацию актуальной версии и тестируйте конфигурацию на реальных сценариях.

Проверено на практике

  • Дата проверки: 2024-11-15
  • Среда: Windows 11, sing-box 1.9.0
  • Версии: sing-box 1.9.0

Мини-чеклист

  • Определите локальные подсети, которые нужно исключить из TUN (обычно 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16).
  • Включите auto_route: true, чтобы автоматически захватывать трафик.
  • Используйте strict_route: true только если нужен полный перехват, и добавьте исключения для локальных сетей через route_exclude_address.
  • Настройте DNS для локальных доменов, например через отдельный сервер или правило для .local.
  • Проверьте маршруты и доступность локальных устройств после запуска sing-box.

Частые ошибки

  • Забывают добавить исключения для локальных подсетей при включении strict_route.
  • Исключают только подсеть роутера, а не всю приватную сеть, что приводит к сбоям доступа к другим устройствам.
  • Используют strict_route без необходимости, что блокирует LAN и другие интерфейсы.
  • Не настраивают DNS, из-за чего локальные имена не резолвятся.
  • Применяют устаревшие параметры конфигурации без проверки документации.

Источники и документация

FAQ

Почему после включения TUN я не могу открыть админку роутера?

Скорее всего, маршрут к локальной сети не исключён. Добавьте свою подсеть (например, 192.168.1.0/24) в route_exclude_address и перезапустите sing-box.

Нужно ли исключать локальные адреса при auto_route: true, если strict_route выключен?

Обычно sing-box автоматически исключает приватные IPv4-адреса, но для надёжности лучше добавить их в route_exclude_address явно, особенно если у вас нестандартные подсети.

Что делать, если local-домены (например, my-nas.local) не открываются через TUN?

Настройте DNS-сервер для локальных зон или добавьте правило в DNS-разделе sing-box, чтобы .local и другие локальные домены резолвились через локальный DNS, например 192.168.1.1.

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

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

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

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

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