Tailscale — mihomo
mihomo может присоединяться к tailnet Tailscale как узел в пользовательском пространстве и направлять через него трафик — целиком из конфигурации прокси. Узел работает полностью в пользовательском пространстве (на базе gVisor), так что не нужны ни ядерное устройство TUN, ни системный демон Tailscale. Направьте control-url на самостоятельно размещённый Headscale, чтобы использовать альтернативный координационный сервер.
Исходящий
Запись в proxies: с type: tailscale. Встраивает BasicOption (общие поля исходящих).
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (required) | <string> | Уникальное имя прокси. |
hostname | string | (unset) | <string> | Имя хоста узла для регистрации в tailnet. |
auth-key | string | (unset) | <auth key> | Ключ аутентификации Tailscale для неинтерактивного (headless) входа. |
control-url | string | (Tailscale default) | <URL> | URL координационного сервера; укажите его, чтобы использовать самостоятельно размещённый Headscale вместо сервера Tailscale по умолчанию. |
state-dir | string | tailscale | <directory path> | Каталог, где узел хранит своё состояние и ключи. |
ephemeral | bool | false | true | false | Зарегистрироваться как эфемерный узел, автоматически удаляемый после ухода в офлайн. |
udp | bool | false | true | false | Разрешить UDP-трафик. |
accept-routes | *bool | (unset) | true | false | Принимать маршруты подсетей, анонсируемые другими узлами tailnet. |
exit-node | string | (unset) | <node name or IP> | Использовать этот узел tailnet (имя или IP) как выходной узел. |
exit-node-allow-lan-access | *bool | (unset) | true | false | Разрешить прямой доступ к LAN при маршрутизации через выходной узел. |
Исходный код: adapter/outbound/tailscale.go:52-65 · зафиксировано на v1.19.29 (e26714a)
Примеры
Минимальное исходящее, присоединяющееся к tailnet по ключу аутентификации:
proxies:
- name: ts
type: tailscale
auth-key: tskey-auth-xxxxxxxxxxxxМаршрутизация всего трафика через выходной узел tailnet:
proxies:
- name: ts-exit
type: tailscale
auth-key: tskey-auth-xxxxxxxxxxxx
hostname: mihomo-node
exit-node: us-exit-1
exit-node-allow-lan-access: true
accept-routes: true
udp: trueС самостоятельно размещённым координационным сервером Headscale:
proxies:
- name: ts-headscale
type: tailscale
auth-key: <headscale pre-auth key>
control-url: https://headscale.example.com
state-dir: tailscale-stateПримечания
auth-keyвключает неинтерактивный (headless) вход — обязателен для необслуживаемого узла. Без него узел не сможет аутентифицироваться самостоятельно.state-dirпо умолчанию —tailscaleи разрешается относительно рабочего каталога mihomo. Узел хранит там свои ключи и машинную идентичность, поэтому переиспользование того же каталога сохраняет одну и ту же идентичность в tailnet между перезапусками.ephemeral: trueрегистрирует узел, который координационный сервер автоматически удаляет после ухода в офлайн — удобно для короткоживущих или контейнеризованных экземпляров, которым не место в списке устройств tailnet.exit-nodeпринимает имя узла или IP. Когда он называет реального пира (а не выражение автоподбора), mihomo дожидается, пока бэкенд tailnet перейдёт в состояние running, прежде чем применить настройку выходного узла.accept-routesвключается явно: маршруты подсетей, анонсируемые другими узлами, игнорируются, пока вы его не включите.
Сравнение с другими ядрами
- sing-box предоставляет Tailscale как тип конечной точки, а не исходящего — он живёт в
endpoints[]рядом с WireGuard, с именами полей в snake_case. - Xray-core не поддерживает Tailscale.
Исходный код: adapter/outbound/tailscale.go:52-65 · v1.19.29 (e26714a)
