Skip to content

Direct — sing-box

Direct — это сквозной исходящий sing-box и полезный входящий-«эхо» для тестов. Исходящую сторону в последних релизах сознательно урезали: то, что раньше было override_address / override_port на исходящей стороне, теперь забота движка маршрутизации.

Входящий

type: "direct":

ПолеТипПо умолчаниюДопустимые значенияОписание
networkNetworkList(tcp+udp)tcp | udp | Ограничение только TCP или только UDP.
override_addressstring(unset)<host>Переписывает адрес назначения каждого принятого соединения.
override_portuint16(unset)<port>Переписывает порт назначения каждого принятого соединения.

Исходный код: option/direct.go:10-15 · зафиксировано на v1.13.15 (3708fa1)

Встраивает ListenOptions (адрес прослушивания, порт, сниффинг, …). Входящий Direct чаще всего используется как перенаправитель портов: принять на одном порту, переписать назначение и провести трафик через любой исходящий.

Исходящий

type: "direct":

ПолеТипПо умолчаниюДопустимые значенияОписание
override_addressstring(rejected)(use route actions)Удалено в sing-box 1.13. Установка теперь приводит к ошибке запуска с отсылкой к действиям маршрутизации (route actions).
override_portuint16(rejected)(use route actions)То же, что override_address — удалено; используйте route actions.
proxy_protocoluint8(removed)0Полностью удалено. При любом ненулевом значении парсер сообщает об ошибке удалённого устаревшего поля.

Исходный код: option/direct.go:17-25 · зафиксировано на v1.13.15 (3708fa1)

Исходящий теперь состоит только из встроенных DialerOptions (bind_interface, routing_mark, detour, …). Все три устаревших поля выше отклоняются при загрузке конфигурации:

destination override fields in direct outbound are deprecated in
sing-box 1.11.0 and removed in sing-box 1.13.0, use route options
instead

Примеры

Голый исходящий direct (самый частый случай — просто дать трафику выход):

json
{
  "outbounds": [
    { "type": "direct", "tag": "direct" }
  ]
}

Исходящий direct, привязанный к конкретному интерфейсу:

json
{
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-eth0",
      "bind_interface": "eth0"
    }
  ]
}

Входящий перенаправитель портов (принимаем на 8080, переписываем назначение на internal:80):

json
{
  "inbounds": [
    {
      "type": "direct",
      "tag": "forward-8080",
      "listen": "0.0.0.0",
      "listen_port": 8080,
      "override_address": "10.0.0.5",
      "override_port": 80
    }
  ]
}

Примечания

  • Замена override_address / override_port через действие маршрута выглядит так:

    json
    {
      "route": {
        "rules": [
          {
            "inbound": ["forward-8080"],
            "action": "route",
            "outbound": "direct",
            "override_address": "10.0.0.5",
            "override_port": 80
          }
        ]
      }
    }

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

Сравнение с другими ядрами

  • Xray-core называет это Freedom. Его исходящий предоставляет куда более богатый набор возможностей — фрагментацию TCP/TLS, внесение шума, поле redirect — см. Freedom — Xray-core.
  • mihomo имеет ту же минимальную форму Direct и автоматически добавляет встроенный именованный прокси DIRECT. См. Direct — mihomo.

Исходный код: option/direct.go:10-25 · v1.13.15 (3708fa1)

Core Tutorial от Argsment