EasyTier — mihomo
mihomo встраивает узел EasyTier и направляет трафик в его децентрализованную mesh-оверлейную сеть. Узел работает в пространстве пользователя без TUN-устройства (mihomo всегда принудительно включает no_tun и отключает привязку к устройству), а все его транспортные соединения идут через собственный dialer 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 по умолчанию и имя, на которое ссылаются DNS-серверы et://. |
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 | Передаётся ядру EasyTier как переключатель Magic DNS. Собственный поиск оверлейных имён в 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 | Передавать проксируемый TCP между пирами поверх KCP (помогает на каналах с потерями). |
disable-kcp-input | *bool | (core default) | true | false | Отклонять проксируемые через KCP соединения от других пиров. |
enable-quic-proxy | *bool | (core default) | true | false | Передавать проксируемый TCP между пирами поверх QUIC. |
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)
Примеры
Минимальный исходящий, подключающийся к сети через двух пиров:
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:
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, чтобы открыть конкретные, илиno-listener: falseпри пустомlisteners, чтобы открыть слушатель по умолчанию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: nameserver вида
et://<proxy-name>(илиeasytier://<proxy-name>) отвечает на оверлейные запросы A и PTR от этого исходящего (TTL 60 с; неизвестные имена получают NXDOMAIN). Он предназначен для записейnameserver-policy, покрывающих зону Magic DNS, а не для роли общего резолвера — см. DNS. - Secure mode включается сам, если задать
local-private-key/local-public-keyили добавитьpeer-public-keyв URI пира. Ему нужен непустой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. Ближайшие аналоги на этом сайте — конечные точки mesh-VPN: Tailscale — sing-box и WireGuard — sing-box.
- Внутри mihomo другие исходящие для оверлейных сетей в пространстве пользователя — Tailscale и ZeroTier. Nameserver
ts://<proxy-name>у Tailscale — аналогet://.
Исходный код: adapter/outbound/easytier.go:51-84 · v1.19.31 (ab405ba)
