EasyTier — mihomo
mihomo 内嵌一个 EasyTier 节点,并把流量路由进其去中心化的网状覆盖网络。该节点在用户态运行,不使用 TUN 设备(mihomo 始终强制 no_tun 并关闭设备绑定),其所有底层连接都经由 mihomo 自身的拨号器发出,因此 dialer-proxy、interface-name 与 routing-mark 对它们生效。覆盖网络仅支持 IPv4。
出站
位于 proxies: 下、type: easytier 的条目。内嵌 BasicOption(通用出站字段,如 dialer-proxy、interface-name、routing-mark 与 ip-version)。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (required) | <string> | 唯一的代理名称。同时也是默认的 instance-name、默认 state-dir 的一部分,以及 et:// DNS 服务器所引用的名称。 |
network-name | string | (required) | <string> | EasyTier 网络名称。只有名称与密钥都一致的节点才会加入同一个覆盖网络。 |
network-secret | string | (empty) | <string> | 共享网络密钥。secure-mode 要求密钥非空。 |
hostname | string | (core default) | <string> | 本节点在覆盖网络中公布的主机名;其他节点可通过 <hostname> 或 <hostname>.<tld-dns-zone> 访问它。 |
ipv4 | string | (DHCP) | <IPv4 CIDR> | 带前缀的静态覆盖网络 IPv4,例如 10.144.0.1/24。为空时自动启用 DHCP。 |
dhcp | bool | true when ipv4 is empty | true | false | 自动获取覆盖网络 IPv4 地址。 |
peers | []string | [] | <peer URI> | … | 要连接的对端或中继,例如 tcp://192.0.2.10:11010 或 udp://…。追加 ?peer-public-key=<base64 X25519 key> 可锁定对端公钥。节点没有监听器时必填;不会隐式使用 public.easytier.top。 |
listeners | []string | [] | <listener URI> | … | 本地监听器 URI,例如 tcp://0.0.0.0:11010,供其他节点连接本节点。不能与 no-listener: true 同时使用。 |
no-listener | *bool | (no listeners) | true | false | 为 true(或未设置且 listeners 为空)时不开启任何监听器。显式设为 false 且 listeners 为空时,开启默认的 tcp://0.0.0.0:11010。 |
mapped-listeners | []string | [] | <listener URI> | … | 向其他节点公布的外部可达监听地址,例如在 NAT 网关上做了端口转发时。 |
exit-nodes | []string | [] | <overlay IPv4> | … | 作为出口节点的节点的覆盖网络 IPv4 地址,用于覆盖网络之外的目标。 |
proxy-networks | []string | [] | <CIDR> | … | 本节点通过 EasyTier 子网代理向覆盖网络其他成员公开的子网。 |
instance-name | string | (proxy name) | <string> | 内嵌 EasyTier 实例的名称。 |
state-dir | string | easytier/<name> | <directory path> | 持久化实例 ID 的目录,使节点在重启后保持同一实例。相对于 mihomo 工作目录解析。 |
udp | bool | false | true | false | 允许 UDP 流量经过该出站。 |
accept-dns | *bool | (core default) | true | false | 作为 Magic DNS 开关传给 EasyTier 核心。mihomo 自身的覆盖网络名称查找(见“说明”)不受其影响。 |
enable-exit-node | *bool | (core default) | true | false | 允许其他节点把本节点用作出口节点。 |
enable-encryption | *bool | (core default) | true | false | 加密对端之间的覆盖网络流量。 |
encryption-algorithm | string | (core default) | aes-gcm | <EasyTier algorithm name> | 启用加密时使用的算法。上游示例配置使用 aes-gcm。 |
private-mode | *bool | (core default) | true | false | 只允许同一网络的节点与本节点握手或经由本节点中继。 |
latency-first | *bool | (core default) | true | false | 优先选择延迟最低的路径,而非跳数最少的路径。 |
disable-p2p | *bool | (core default) | true | false | 不建立直接的点对点连接;流量只经由中继对端转发。 |
enable-kcp-proxy | *bool | (core default) | true | false | 在对端之间用 KCP 承载被代理的 TCP(有助于丢包链路)。 |
disable-kcp-input | *bool | (core default) | true | false | 拒绝其他对端发来的 KCP 代理连接。 |
enable-quic-proxy | *bool | (core default) | true | false | 在对端之间用 QUIC 承载被代理的 TCP。 |
disable-quic-input | *bool | (core default) | true | false | 拒绝其他对端发来的 QUIC 代理连接。 |
mtu | int | (core default) | <bytes> | 覆盖网络 MTU。仅在大于 0 时传递。 |
tld-dns-zone | string | et.net. | <DNS zone> | 覆盖网络主机名使用的 Magic DNS 区域。 |
secure-mode | *bool | (auto) | true | false | 基于 Noise 的节点间端到端加密。配置了本地密钥或 peer-public-key 时自动启用;显式设为 false 同时又配置了这些密钥会报错。 |
local-private-key | string | (generated) | <base64 X25519 private key> | 固定本节点的 secure-mode 身份,使其公钥在每次启动之间保持不变。 |
local-public-key | string | (derived) | <base64 X25519 public key> | 对应的公钥。通常由 local-private-key 派生;单独设置它会报错。 |
源码: adapter/outbound/easytier.go:51-84 · 锚定版本 v1.19.31 (ab405ba)
示例
经由两个对端加入网络的最简出站:
yaml
proxies:
- name: et
type: easytier
network-name: example
network-secret: secret
peers:
- tcp://192.0.2.10:11010
- udp://192.0.2.11:11010
udp: true静态地址、锁定中继公钥(会开启 secure mode),并由 mihomo 解析覆盖网络名称:
yaml
proxies:
- name: et-office
type: easytier
network-name: office
network-secret: secret
hostname: mihomo
ipv4: 10.144.0.5/24
peers:
- "tcp://relay.example.com:11010?peer-public-key=<base64-x25519-public-key>"
local-private-key: "<base64-x25519-private-key>"
exit-nodes: ["10.144.0.1"]
dns:
nameserver-policy:
"+.et.net": et://et-office说明
network-name为必填项。没有peers的节点必须开启监听器,否则配置会被拒绝——mihomo 从不回退到公共节点public.easytier.top。- 监听器逻辑:默认不开启监听器。设置
listeners以开启指定监听器,或在listeners为空时设no-listener: false以开启默认的tcp://0.0.0.0:11010。no-listener: true与listeners同时设置会报错。 - 拨号始终留在覆盖网络内,从不回退到主机网络。目标必须是覆盖网络 IPv4 地址、其他节点通过
proxy-networks公开的子网,或者(配置exit-nodes时)可经由出口节点到达的地址。IPv6 目标会被拒绝;ip-version只影响底层对端连接。 - 主机名查找:与覆盖网络节点匹配的名称(
<hostname>或<hostname>.<tld-dns-zone>)从覆盖网络路由表解析。该区域下的其他名称会以 "not found" 失败;其余名称使用 mihomo 解析代理服务器名称时所用的解析器。 - DNS:写作
et://<proxy-name>(或easytier://<proxy-name>)的 nameserver 会由该出站应答覆盖网络的 A 与 PTR 查询(TTL 60 秒;未知名称返回 NXDOMAIN)。它适合用在覆盖 Magic DNS 区域的nameserver-policy条目中,而不是作为通用解析器——参见 DNS。 - 设置
local-private-key/local-public-key,或在对端 URI 中加入peer-public-key时,secure mode 会自动开启。它要求network-secret非空。固定local-private-key可使节点公钥在重启之间保持不变。 state-dir(默认easytier/<name>)只保存实例 ID;覆盖网络地址来自ipv4或 DHCP。- 未设置的可选标志保持内嵌 EasyTier 核心的默认值。
- EasyTier 支持默认编译在内。使用
no_easytier构建标签的版本仍接受该配置结构,但会在启动时以 "EasyTier support is disabled" 失败。
跨内核说明
- Xray-core 与 sing-box 都不支持 EasyTier。本站中最接近的是网状 VPN 端点:Tailscale — sing-box 与 WireGuard — sing-box。
- 在 mihomo 内部,Tailscale 与 ZeroTier 是另外两种用户态覆盖网络出站。Tailscale 的
ts://<proxy-name>nameserver 与et://相对应。
源码: adapter/outbound/easytier.go:51-84 · v1.19.31 (ab405ba)
