Skip to content

Trojan — mihomo

mihomo 双端支持 Trojan。出站可走 tcpwsgrpc 传输,并支持 TLS、REALITY、ECH 包装;额外提供 trojan-go 兼容的 ss-opts 层,可在 Trojan 密码握手之上再叠加一层 Shadowsocks 加密。

出站

proxies:type: trojan 条目。内嵌 BasicOption(通用出站 字段)。

字段类型默认值允许值描述
namestring(required)<string>唯一的代理名。
serverstring(required)<host>上游服务器主机名或 IP。
portint(required)<port>上游服务器端口。
passwordstring(required)<string>Trojan 密码。
alpn[]string[]h2 | http/1.1TLS 握手时宣告的 ALPN 列表。
snistring(server name)<SNI>TLS Server Name Indication。默认为 `server`。
skip-cert-verifyboolfalsetrue | false禁用 TLS 校验(仅供测试)。
fingerprintstring(unset)<SHA256 hex>把服务端 TLS 证书锚定到该指纹。
certificatestring(unset)<PEM file path>客户端证书(mTLS)。
private-keystring(unset)<key file path>与 `certificate` 配对的私钥。
udpboolfalsetrue | false允许 UDP 包经此出站转发。
networkstringtcptcp | ws | grpc底层传输。
ech-optsECHOptions(disabled)ECHOptionsEncrypted Client Hello 配置。
reality-optsRealityOptions(disabled)RealityOptionsREALITY 客户端配置。
grpc-optsGrpcOptions(unset)GrpcOptions`network: grpc` 的设置。
ws-optsWSOptions(unset)WSOptions`network: ws` 的设置。
ss-optsTrojanSSOption(disabled)TrojanSSOption可选的 Shadowsocks-over-Trojan 层(trojan-go 风格)。
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizeduTLS ClientHello 指纹。

源码: adapter/outbound/trojan.go:38-58 · 锚定版本 v1.19.27 (5184081)

ss-opts

字段类型默认值允许值描述
enabledboolfalsetrue | false在 Trojan 流外再包一层 Shadowsocks。
methodstring(unset)aes-128-gcm | aes-256-gcm | chacha20-ietf-poly1305内层使用的 Shadowsocks AEAD 加密。
passwordstring(unset)<string>内层 Shadowsocks 的密码(与外层 Trojan 密码相互独立)。

源码: adapter/outbound/trojan.go:61-65 · 锚定版本 v1.19.27 (5184081)

入站

listeners:type: trojan 条目。内嵌 BaseOptionlistenport)。

字段类型默认值允许值描述
users[]TrojanUser(required)[TrojanUser]可接受的客户端。
ws-pathstring(unset)/<path>该监听器提供的 WebSocket 路径。
grpc-service-namestring(unset)<name>该监听器接受的 gRPC 服务名。
certificatestring(unset)<PEM file path>TLS 服务端证书。
private-keystring(unset)<key file path>TLS 私钥。
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certmTLS 客户端鉴权模式。
client-auth-certstring(unset)<PEM file path>作为客户端根的 CA 集合。
ech-keystring(unset)<ECH config>Encrypted Client Hello 配置 / 密钥。
allow-insecureboolfalsetrue | false在监听器上跳过 TLS 客户端证书校验(仅供测试)。
reality-configRealityConfig(disabled)RealityConfigREALITY 服务端配置。
mux-optionMuxOption(disabled)MuxOption多路复用设置(sing 风格 mux)。
ss-optionTrojanSSOption(disabled)TrojanSSOptionShadowsocks-over-Trojan 兼容层(必须与出站的 `ss-opts` 完全一致)。

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

users[]

字段类型默认值允许值描述
usernamestring(unset)<string>显示名。
passwordstring(required)<string>Trojan 密码。

源码: listener/inbound/trojan.go:28-31 · 锚定版本 v1.19.27 (5184081)

示例

出站 —— TLS 之上的普通 Trojan:

yaml
proxies:
  - name: trojan-srv
    type: trojan
    server: example.com
    port: 443
    password: <password>
    sni: example.com
    udp: true
    alpn: [h2, http/1.1]

出站 —— WebSocket 之上启用 trojan-go ss-opts 的 Trojan:

yaml
proxies:
  - name: trojan-go
    type: trojan
    server: example.com
    port: 443
    password: <outer-password>
    udp: true
    network: ws
    sni: example.com
    ws-opts:
      path: /tj
    ss-opts:
      enabled: true
      method: aes-128-gcm
      password: <inner-password>

listeners 下的入站:

yaml
listeners:
  - name: trojan-in
    type: trojan
    listen: 0.0.0.0
    port: 443
    users:
      - username: alice
        password: <password>
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key

说明

  • ss-opts 实现了 trojan-go 把 Shadowsocks AEAD 叠加在 Trojan 流上 的模式。外层 Trojan 密码用于握手鉴权;内层 Shadowsocks 密钥负责 载荷加密。入站的 ss-option 块必须与出站的 ss-opts 完全一致enabledmethodpassword),否则入站拒绝客户端。
  • mihomo 没有 Xray 的 fallbacks[] 或 sing-box 的 fallback_for_alpn 等价物。需要 HTTP 回落时,请在 mihomo 之前用独立反向代理终止 TLS。
  • 出站的 client-fingerprint 是按代理的 uTLS 覆盖。全局默认为 global-client-fingerprint

跨内核说明

  • Xray 入站使用 clients[]、支持列表形式 fallbacks[] 链, 且拒绝任何非空 flow。参见 Trojan — Xray-core
  • sing-box 入站使用 users[]name / password),并把 fallback 列表替换为单个默认 fallback 加按 ALPN 索引的 fallback_for_alpn 映射。参见 Trojan — sing-box

源码: adapter/outbound/trojan.go:38-65 · v1.19.27 (5184081)

由 Argsment 出品的 Core Tutorial