Skip to content

Tailscale — mihomo

mihomo может присоединяться к tailnet Tailscale как узел в пользовательском пространстве и направлять через него трафик — целиком из конфигурации прокси. Узел работает полностью в пользовательском пространстве (на базе gVisor), так что не нужны ни ядерное устройство TUN, ни системный демон Tailscale. Направьте control-url на самостоятельно размещённый Headscale, чтобы использовать альтернативный координационный сервер.

Исходящий

Запись в proxies: с type: tailscale. Встраивает BasicOption (общие поля исходящих).

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(required)<string>Уникальное имя прокси.
hostnamestring(unset)<string>Имя хоста узла для регистрации в tailnet.
auth-keystring(unset)<auth key>Ключ аутентификации Tailscale для неинтерактивного (headless) входа.
control-urlstring(Tailscale default)<URL>URL координационного сервера; укажите его, чтобы использовать самостоятельно размещённый Headscale вместо сервера Tailscale по умолчанию.
state-dirstringtailscale<directory path>Каталог, где узел хранит своё состояние и ключи.
ephemeralboolfalsetrue | falseЗарегистрироваться как эфемерный узел, автоматически удаляемый после ухода в офлайн.
udpboolfalsetrue | falseРазрешить UDP-трафик.
accept-routes*bool(unset)true | falseПринимать маршруты подсетей, анонсируемые другими узлами tailnet.
exit-nodestring(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 по ключу аутентификации:

yaml
proxies:
  - name: ts
    type: tailscale
    auth-key: tskey-auth-xxxxxxxxxxxx

Маршрутизация всего трафика через выходной узел tailnet:

yaml
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:

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

Core Tutorial от Argsment