Skip to content

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)。

字段类型默认值允许值描述
namestring(required)<string>唯一的代理名称。同时也是默认的 instance-name、默认 state-dir 的一部分,以及 et:// DNS 服务器所引用的名称。
network-namestring(required)<string>EasyTier 网络名称。只有名称与密钥都一致的节点才会加入同一个覆盖网络。
network-secretstring(empty)<string>共享网络密钥。secure-mode 要求密钥非空。
hostnamestring(core default)<string>本节点在覆盖网络中公布的主机名;其他节点可通过 <hostname> 或 <hostname>.<tld-dns-zone> 访问它。
ipv4string(DHCP)<IPv4 CIDR>带前缀的静态覆盖网络 IPv4,例如 10.144.0.1/24。为空时自动启用 DHCP。
dhcpbooltrue when ipv4 is emptytrue | 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-namestring(proxy name)<string>内嵌 EasyTier 实例的名称。
state-dirstringeasytier/<name><directory path>持久化实例 ID 的目录,使节点在重启后保持同一实例。相对于 mihomo 工作目录解析。
udpboolfalsetrue | 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-algorithmstring(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 代理连接。
mtuint(core default)<bytes>覆盖网络 MTU。仅在大于 0 时传递。
tld-dns-zonestringet.net.<DNS zone>覆盖网络主机名使用的 Magic DNS 区域。
secure-mode*bool(auto)true | false基于 Noise 的节点间端到端加密。配置了本地密钥或 peer-public-key 时自动启用;显式设为 false 同时又配置了这些密钥会报错。
local-private-keystring(generated)<base64 X25519 private key>固定本节点的 secure-mode 身份,使其公钥在每次启动之间保持不变。
local-public-keystring(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" 失败。

跨内核说明 ​

源码: adapter/outbound/easytier.go:51-84 · v1.19.31 (ab405ba)

由 Argsment 出品的 Core Tutorial