Skip to content

出站 ​

outbounds 是上游目标的数组。每个条目都是扁平对象:type / tag 信封加上所选类型自身的字段,处于同一层级。没有"第一个出站即默认"的规则 — 未命中的流量走 route.final。

信封 ​

字段类型默认值允许值描述
typestring—direct | bridge | block | selector | urltest | socks | http | shadowsocks | snell | vmess | trojan | naive | tor | ssh | shadowtls | vless | anytls | hysteria | tuic | hysteria2出站类型。决定对象其余部分解码到哪个选项结构体。未注册的值会在启动时报 "unknown outbound type"。
tagstring——该出站的唯一名称。被路由规则、route.final、组出站与拨号 detour 引用。

源码: option/outbound.go:22-26 · 锚定版本 v1.14.2 (af6e64c)

各类型字段见协议页面:Direct、HTTP 与 SOCKS、Shadowsocks、VMess、Trojan、Naive、Tor、SSH、VLESS、AnyTLS、Hysteria2、TUIC。selector 与 urltest 是在其他 tag 之间选择的组出站。bridge 与 snell 见 Bridge 与 Snell。

共享拨号字段(DialerOptions) ​

每个进行拨号的出站都内嵌 DialerOptions —— 即 detour 加上 AbstractDialerOptions 的全部字段(单独成一个结构体,使 direct 路由规则动作可以复用这些拨号字段而不含 detour)。它们都与信封处于同一扁平层级。

字段类型默认值允许值描述
detourstring——通过另一个出站(按其 tag 寻址)拨号。设置后其余拨号字段均被忽略。

源码: option/outbound.go:80-83 · 锚定版本 v1.14.2 (af6e64c)

字段类型默认值允许值描述
bind_interfacestring——出站连接绑定的网络接口。
inet4_bind_address*badoption.Addr——绑定的 IPv4 源地址。
inet6_bind_address*badoption.Addr——绑定的 IPv6 源地址。
bind_address_no_portboolfalsetrue | false绑定时设置 IP_BIND_ADDRESS_NO_PORT — 将端口分配推迟到 connect。仅 Linux。
protect_pathstring——Android VpnService protect 守护进程的 Unix 套接字路径;每个套接字 fd 在拨号前都会先送到那里。
routing_markFwMark——在出站套接字上设置的 SO_MARK(fwmark)。仅 Linux。
reuse_addrboolfalsetrue | false在出站套接字上设置 SO_REUSEADDR。
netnsstring——拨号所在的网络命名空间:名称或路径,或顶层 network_namespaces 条目的 tag。仅 Linux。避免引用 unshare 类型的命名空间 —— 它唯一的出口是 sing-box 自己管理的 TUN。
connect_timeoutbadoption.Duration——TCP 连接超时。时长字符串,如 "5s"。
tcp_fast_openboolfalsetrue | false为出站连接启用 TCP Fast Open。
tcp_multi_pathboolfalsetrue | false为出站连接启用 Multipath TCP。
disable_tcp_keep_aliveboolfalsetrue | false对出站连接关闭 TCP keep-alive。
tcp_keep_alivebadoption.Duration——开始发送探测前的 keep-alive 空闲时长。时长字符串。
tcp_keep_alive_intervalbadoption.Duration——keep-alive 探测之间的间隔。时长字符串。
udp_fragment*boolfalsetrue | false允许分片超过 MTU 的 UDP 数据包,而不是丢弃。
domain_resolver*DomainResolveOptions——用哪个 DNS 服务器(按 tag)解析服务器地址:纯 tag 字符串,或带每次拨号覆盖项的对象(server、strategy、timeout、disable_cache、disable_optimistic_cache、rewrite_ttl、client_subnet)。对 direct 而言,解析的是请求中的域名。
network_strategy*NetworkStrategy——在可用网络之间选择的策略(如 default / hybrid / fallback)。仅具备网络感知的平台构建。
network_typebadoption.Listable[InterfaceType]——使用 network_strategy 时偏好的网络类型(wifi、cellular、ethernet、other)。
fallback_network_typebadoption.Listable[InterfaceType]——偏好的网络不可用时回退到的网络类型。
fallback_delaybadoption.Duration——启动回退拨号前的等待时间(Happy-Eyeballs 风格)。时长字符串,如 "300ms"。
domain_strategyDomainStrategy—prefer_ipv4 | prefer_ipv6 | ipv4_only | ipv6_only已废弃,改用 domain_resolver.strategy:设置它会中止启动,除非设置了环境变量 ENABLE_DEPRECATED_LEGACY_DOMAIN_STRATEGY_OPTIONS=true。

源码: option/outbound.go:85-112 · 锚定版本 v1.14.2 (af6e64c)

共享服务器字段(ServerOptions) ​

连接固定服务器的协议出站内嵌 ServerOptions。

字段类型默认值允许值描述
serverstring——服务器主机名或 IP。
server_portuint16——服务器端口。

源码: option/outbound.go:183-186 · 锚定版本 v1.14.2 (af6e64c)

最简示例 ​

json
{
  "outbounds": [
    {
      "type": "shadowsocks",
      "tag": "proxy",
      "server": "example.com",
      "server_port": 8388,
      "method": "2022-blake3-aes-128-gcm",
      "password": "<base64-key>"
    },
    { "type": "direct", "tag": "direct" }
  ],
  "route": { "final": "proxy" }
}

说明 ​

  • 不存在 dns 出站 —— 配置它会报错;DNS 劫持是一个 rule action。同样也不存在 wireguard 出站:改用 WireGuard 端点。
  • shadowsocksr 仅注册为报错的占位(sing-box 没有 ShadowsocksR 实现)。hysteria、tuic 与 hysteria2 需要 with_quic 构建,naive 出站需要 with_naive_outbound 构建;官方发布的二进制包含二者,仅少数非主流平台不含 with_naive_outbound。
  • detour 按 tag 链接出站;链路回到自身是启动错误。
  • 当 server 是域名时,使用 domain_resolver 解析,未设置时回退到 route.default_domain_resolver。只有在仅配置了一个 DNS 服务器时二者才可省略;否则启动失败。
  • bridge 是 direct 的 L3 对应物:把来自 TUN 或其他 L3 端点的 L3 连接(TCP、UDP、ICMP)直接从某个网络接口转发出去,并拒绝 L4 连接。它需要特权(Linux、macOS、Windows、已 root 的 Android、已越狱的 iOS),由 pre-match 中的 route 动作引流。
  • snell 为入站与出站实现了 Surge 的 Snell 协议(不含 v5 的 QUIC 代理模式)。

跨内核说明 ​

  • Xray-core 把协议字段嵌套在 settings 中,用 streamSettings.sockopt.dialerProxy 做链式代理(proxySettings 会在启动时被拒绝),并把数组第一个条目作为默认路由目标。见 Xray 出站。
  • mihomo 把它们称作 proxies,组类型(select、url-test、fallback、load-balance)是独立的代理组,而不是出站类型。

源码: option/outbound.go:22-26 · v1.14.2 (af6e64c)

由 Argsment 出品的 Core Tutorial