Skip to content

Snell — mihomo

Snell 是 Surge 的轻量级代理协议。mihomo 同时实现了 Snell 出站(用于连接 Snell 服务器)以及更近期加入的 Snell 入站监听器 (用于充当 Snell 服务器)。两端都支持带 httptls 模式的 simple-obfs 混淆层。

出站

位于 proxies: 下、type: snell 的条目。内嵌 BasicOption (通用出站字段)。

字段类型默认值允许值描述
namestring(required)<string>唯一的代理名称。
serverstring(required)<host>上游服务器主机名或 IP。
portint(required)<port>上游服务器端口。
pskstring(required)<string>预共享密钥(密码)。
udpboolfalsetrue | false启用 UDP 中继(Snell v2+)。
versionint(server default)1 | 2 | 3Snell 协议版本。
reuseboolfalsetrue | false复用底层连接。
obfs-optsmap[string]any(disabled){ mode, host }混淆选项,例如 `{ mode: http|tls, host: <host> }`。

源码: adapter/outbound/snell.go:26-36 · 锚定版本 v1.19.27 (5184081)

入站

位于 listeners: 下、type: snell 的条目。内嵌 BaseOptionlistenport)。

字段类型默认值允许值描述
pskstring(required)<string>预共享密钥(密码)。
versionint(server default)1 | 2 | 3Snell 协议版本。
udpboolfalsetrue | false启用 UDP 中继(Snell v2+)。
obfs-optsSnellObfsOption(disabled)SnellObfsOption混淆选项。

源码: listener/inbound/snell.go:12-18 · 锚定版本 v1.19.27 (5184081)

obfs-opts

字段类型默认值允许值描述
modestring(unset)http | tls混淆模式。
hoststring(unset)<host>混淆 host 头。

源码: listener/inbound/snell.go:24-27 · 锚定版本 v1.19.27 (5184081)

示例

出站——纯 Snell:

yaml
proxies:
  - name: snell-srv
    type: snell
    server: example.com
    port: 44046
    psk: <pre-shared-key>
    version: 3
    udp: true

出站——带 HTTP 混淆的 Snell:

yaml
proxies:
  - name: snell-obfs
    type: snell
    server: example.com
    port: 44046
    psk: <pre-shared-key>
    version: 3
    obfs-opts:
      mode: http
      host: bing.com

位于 listeners 下的入站:

yaml
listeners:
  - name: snell-in
    type: snell
    listen: 0.0.0.0
    port: 44046
    psk: <pre-shared-key>
    version: 3
    udp: true
    obfs-opts:
      mode: tls
      host: bing.com

说明

  • psk 是共享密钥;出站和入站必须使用相同的值。
  • UDP 中继需要 Snell v2 或更新版本——在 v1 对等点上启用 udp 会被拒绝。
  • reuse(仅出站)复用底层连接。对于 Snell v2 它是隐含启用的;对于 v4 则通过 此字段主动启用。
  • obfs-opts.mode 选择 simple-obfs 传输:http 将流封装在伪造的 HTTP 请求中, tls 封装在伪造的 TLS 记录中。host 设置混淆 host 头。不设置 obfs-opts 即 不混淆。两端必须就模式和 host 达成一致。

跨内核说明

  • Snell 是 Surge 特有的。Xray-core 与 sing-box 均不支持它——两个内核中 都没有等价的出站或入站。

源码: adapter/outbound/snell.go:26-36 · v1.19.27 (5184081)

由 Argsment 出品的 Core Tutorial