Snell — mihomo
Snell 是 Surge 的轻量级代理协议。mihomo 同时实现了 Snell 出站(用于连接 Snell 服务器)以及更近期加入的 Snell 入站监听器 (用于充当 Snell 服务器)。两端都支持带 http 或 tls 模式的 simple-obfs 混淆层。
出站
位于 proxies: 下、type: snell 的条目。内嵌 BasicOption (通用出站字段)。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (required) | <string> | 唯一的代理名称。 |
server | string | (required) | <host> | 上游服务器主机名或 IP。 |
port | int | (required) | <port> | 上游服务器端口。 |
psk | string | (required) | <string> | 预共享密钥(密码)。 |
udp | bool | false | true | false | 启用 UDP 中继(Snell v2+)。 |
version | int | (server default) | 1 | 2 | 3 | Snell 协议版本。 |
reuse | bool | false | true | false | 复用底层连接。 |
obfs-opts | map[string]any | (disabled) | { mode, host } | 混淆选项,例如 `{ mode: http|tls, host: <host> }`。 |
源码: adapter/outbound/snell.go:26-36 · 锚定版本 v1.19.27 (5184081)
入站
位于 listeners: 下、type: snell 的条目。内嵌 BaseOption (listen、port)。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
psk | string | (required) | <string> | 预共享密钥(密码)。 |
version | int | (server default) | 1 | 2 | 3 | Snell 协议版本。 |
udp | bool | false | true | false | 启用 UDP 中继(Snell v2+)。 |
obfs-opts | SnellObfsOption | (disabled) | SnellObfsOption | 混淆选项。 |
源码: listener/inbound/snell.go:12-18 · 锚定版本 v1.19.27 (5184081)
obfs-opts
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
mode | string | (unset) | http | tls | 混淆模式。 |
host | string | (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)
