Direct — sing-box
Direct — это сквозной исходящий sing-box и полезный входящий-«эхо» для тестов. Исходящую сторону в последних релизах сознательно урезали: то, что раньше было override_address / override_port на исходящей стороне, теперь забота движка маршрутизации.
Входящий
type: "direct":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
network | NetworkList | (tcp+udp) | tcp | udp | | Ограничение только TCP или только UDP. |
override_address | string | (unset) | <host> | Переписывает адрес назначения каждого принятого соединения. |
override_port | uint16 | (unset) | <port> | Переписывает порт назначения каждого принятого соединения. |
Исходный код: option/direct.go:10-15 · зафиксировано на v1.13.15 (3708fa1)
Встраивает ListenOptions (адрес прослушивания, порт, сниффинг, …). Входящий Direct чаще всего используется как перенаправитель портов: принять на одном порту, переписать назначение и провести трафик через любой исходящий.
Исходящий
type: "direct":
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
override_address | string | (rejected) | (use route actions) | Удалено в sing-box 1.13. Установка теперь приводит к ошибке запуска с отсылкой к действиям маршрутизации (route actions). |
override_port | uint16 | (rejected) | (use route actions) | То же, что override_address — удалено; используйте route actions. |
proxy_protocol | uint8 | (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 (самый частый случай — просто дать трафику выход):
{
"outbounds": [
{ "type": "direct", "tag": "direct" }
]
}Исходящий direct, привязанный к конкретному интерфейсу:
{
"outbounds": [
{
"type": "direct",
"tag": "direct-eth0",
"bind_interface": "eth0"
}
]
}Входящий перенаправитель портов (принимаем на 8080, переписываем назначение на internal:80):
{
"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)
