Bridge — sing-box
bridge — это L3-аналог исходящего direct. Вместо открытия сокетов он пересылает L3-трафик — TCP, UDP и ICMP, — приходящий от входящего TUN или другой L3-конечной точки (WireGuard, Tailscale), прямо через сетевой интерфейс, не преобразуя его сначала в L4-соединения.
Привилегии и платформы
bridge требует повышенных привилегий и доступен только в Linux, macOS, Windows (x86 / x64, через WinDivert), на Android с root и на iOS с джейлбрейком; на других платформах исходящий завершается ошибкой при запуске. В графических клиентах нужна автономная сборка для macOS с её вспомогательной службой, root на Android или iOS-устройство с джейлбрейком.
Параметры исходящего
type: "bridge" в outbounds[]:
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
interface | string | (default interface) | <interface name> | Интерфейс выхода для пересылаемого трафика. Если не задан, используется интерфейс по умолчанию; пока выбранный интерфейс недоступен, трафик отбрасывается. |
bridge_name | string | bridge | <name prefix> | Префикс имени TUN-интерфейса bridge, который создаёт sing-box. На платформах Apple не действует. |
iproute2_table_index | int | 2200 + instance index | <int> | Только Linux и только при заданном interface: индекс таблицы маршрутизации iproute2 для закреплённых маршрутов выхода. |
iproute2_rule_index | int | 100 | <int> | Только Linux: начальный индекс правил iproute2, которые устанавливает bridge. |
Исходный код: option/bridge.go:3-8 · зафиксировано на v1.14.2 (af6e64c)
Примеры
Пересылать на уровне L3 через bridge трафик в локальную сеть, перехваченный TUN, а всё остальное отправлять через direct:
{
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"address": ["172.19.0.1/30"],
"auto_route": true
}
],
"outbounds": [
{ "type": "direct", "tag": "direct" },
{ "type": "bridge", "tag": "bridge-out" }
],
"route": {
"rules": [
{
"ip_cidr": ["192.168.0.0/16"],
"preferred_by": ["bridge-out"],
"outbound": "bridge-out"
}
],
"final": "direct"
}
}Примечания
bridgeпереносит только L3-трафик. Он достигается через действиеroute, совпавшее на этапе предварительного сопоставления на L3-входящем (TUN, WireGuard, Tailscale). Соединения от L4-входящих (SOCKS, HTTP и т. д.) или направленные правилами, которые совпадают только после предварительного сопоставления, завершаются ошибкойonly L3 traffic is supported by bridge.- Локальные для машины назначения — loopback, неопределённый адрес или любой адрес, назначенный её собственным интерфейсам, — отклоняются с предупреждением. Исключайте их в правилах.
- Рекомендуемый фильтр —
preferred_by: ["<bridge tag>"]: для bridge он совпадает с любым нелокальным назначением и только на этапе предварительного сопоставления, поэтому никогда не захватывает трафик, которыйbridgeне может обработать. bridgeможет быть и исходящим по умолчанию: если при предварительном сопоставлении ни одно правило не совпало, L3-пересылка всё равно применяется (для групп исходящих используется текущий выбранный участник). Дошедшие до него L4-соединения отклоняются.- Назначения FakeIP должны быть разрешены действием
resolveна этапе предварительного сопоставления, иначе соединение отклоняется. - Для ICMP пересылать на уровне L3 может и
direct; для TCP и UDP — толькоbridgeи конечные точки WireGuard / Tailscale.
Сравнение с другими ядрами
- У Xray-core и mihomo нет исходящего с L3-пересылкой: их входящие TUN всегда завершают TCP / UDP и заново устанавливают соединение через исходящий (
freedomв Xray,DIRECTв mihomo). См. TUN — Xray-core и TUN — mihomo.
Исходный код: option/bridge.go:3-8 · v1.14.2 (af6e64c)
