Связанные руководства
Как устроен Tailscale: как устройства соединяются напрямую
Обновлено
Что делает Tailscale, можно сказать одной фразой: каждое ваше устройство получает постоянный внутренний адрес, а между устройствами напрямую поднимаются зашифрованные туннели WireGuard — без центрального сервера, через который шёл бы весь трафик. Система разделена на две половины. Плоскость управления только проверяет, кто вы, раздаёт ключи и сообщает каждому устройству, «где сейчас остальные». Плоскость данных — это прямые зашифрованные соединения между устройствами, и ваш трафик через сервер управления не идёт. Сложность в том, что домашние и рабочие устройства прячутся за роутерами и не имеют публичных адресов; Tailscale соединяет их напрямую через обход NAT, а если это совсем не получается — через ретранслятор. Ниже — по порядку.
Обычный VPN и Tailscale: звезда против сетки
Обычный VPN устроен звездой: все устройства подключаются к одному VPN-серверу, и если двум устройствам нужно пообщаться, трафик идёт сначала на сервер, а потом обратно. Сервер — и узкое место, и единая точка отказа: тормозит он — тормозят все, упал — отключились все.
Tailscale устроен сеткой (mesh): между каждой парой устройств своя прямая туннельная связь. Телефон обращается к домашнему NAS — трафик идёт с телефона прямо на NAS, по кратчайшему пути между ними. Ни одна машина не несёт на себе весь трафик.
Цена сетки — сложность управления: десять устройств, соединённых попарно, — это сорок пять туннелей, и для каждого нужно обменяться ключами и знать текущий адрес второй стороны. Вручную это не поддержать, и вся работа Tailscale в том, чтобы это автоматизировать.
Плоскость управления: только ключи и адресная книга, трафика не касается
После установки Tailscale каждое устройство само создаёт пару ключей: закрытый ключ навсегда остаётся на устройстве, открытый передаётся серверу управления (у Tailscale он называется coordination server). Вы входите в аккаунт — и сервер управления знает, «чьё это устройство».
У сервера управления есть таблица: открытый ключ каждого устройства, выданный ему внутренний адрес, сетевой адрес, по которому его сейчас можно найти, и правила доступа — кому с кем можно соединяться. Вашему устройству он отправляет только те строки, к которым у вас есть доступ; когда какое-то устройство выходит в сеть, уходит из неё или меняет сеть, таблица обновляется и рассылается тем, кого это касается.
Сервер управления не пропускает через себя ваш трафик и не имеет закрытых ключей, поэтому расшифровать общение устройств он не может. Он похож на ресепшен, который выдаёт телефонный справочник и пропуска: говорит, где собеседник и можно ли вам войти, а о чём вы говорите внутри — его там нет.
Вход идёт через уже имеющуюся у вас систему аккаунтов (единый вход), а не через отдельный VPN-пароль; ключи устройств периодически истекают, и вход нужно подтвердить заново, а потерянное устройство достаточно удалить в панели управления — и доступа у него больше нет.
Плоскость данных: туннели WireGuard между устройствами
Данные на самом деле передаёт WireGuard. Получив открытый ключ другого устройства, устройство может поднять с ним зашифрованный туннель: каждая сторона проверяет ключ другой, и никто посередине не может ни прочитать, ни изменить содержимое.
Шифрование WireGuard Tailscale не трогает — он берёт на себя то, чем WireGuard сам не занимается: как раздавать ключи, как назначать адреса и как устройствам снова найти друг друга после смены сети. Как работает WireGuard, читайте в статье WireGuard изнутри.
У каждого устройства в этой сети есть постоянный внутренний адрес (из диапазона, начинающегося на 100), и он не меняется, к чему бы устройство ни было подключено — к домашнему интернету, офисной сети или мобильному. Поэтому к домашнему NAS всегда можно обращаться по одному и тому же адресу. А с MagicDNS — просто по имени устройства.
Обход NAT: оба устройства за роутерами — как соединиться напрямую
У домашнего компьютера нет публичного адреса: в интернет он выходит через роутер, который делает трансляцию адресов (NAT). Роутер пропускает только соединения, которые «начались изнутри», а всё, что стучится снаружи, отбрасывает. Если оба устройства за своими роутерами, ни одно не может первым достучаться до другого — в этом и трудность прямого соединения.
Tailscale решает это в три шага. Сначала каждое устройство спрашивает сервер в интернете: «с какого адреса и порта ты меня видишь?» — так оно узнаёт, как выглядит снаружи роутера (такие сервисы называются STUN). Затем два устройства обмениваются этими внешними адресами через сервер управления. И наконец обе стороны одновременно отправляют пакеты на внешний адрес друг друга: каждый роутер видит, что «начали изнутри», и открывает проход для ответа, а пакеты другой стороны как раз в этот проход и попадают — соединение установлено. Это и называют «пробиванием NAT» (hole punching).
Пробивание работает по UDP. Большинство домашних роутеров это пропускают; но в некоторых сетях трансляция адресов особенно строгая (на каждый новый адрес назначения — новый внешний порт) или UDP вовсе заблокирован, и тогда пробиться не удаётся.
Ретрансляторы DERP: кто подхватит, если напрямую не вышло
Успех пробивания не гарантирован, поэтому у Tailscale есть набор ретрансляционных серверов — DERP. Если два устройства не могут сразу соединиться, оба подключаются к одному DERP, и он передаёт зашифрованные пакеты от одного к другому. DERP работает по HTTPS (TCP 443), который пропускают почти любые сети.
Ретранслятор пересылает пакеты, уже зашифрованные WireGuard; ключей у DERP нет, и он видит только «кто кому и сколько», но не содержимое.
Соединение всегда начинается через ретранслятор: как только два устройства появляются в сети, они сразу связываются через DERP, чтобы связь была немедленно; параллельно в фоне идут попытки пробить NAT, и при успехе соединение незаметно переключается на прямое без обрыва. Поэтому в первые секунды задержка повыше, а потом падает — это нормально.
Если соединение так и осталось на ретрансляторе, скорость и задержка зависят от того, как далеко он и насколько загружен; обычно это медленнее прямого соединения. В клиенте Tailscale видно, идёт ли текущее соединение напрямую (direct) или через ретранслятор (relay).
Exit node и subnet router: не только связь между устройствами
- Exit node (выходной узел): назначив какое-то устройство выходным, вы отправляете весь интернет-трафик остальных устройств сначала зашифрованным к нему, а дальше он выходит в интернет из его сети. Эффект как у обычного VPN — снаружи виден адрес выходного узла. Выходным узлом может быть ваш домашний компьютер или сервер, предоставленный сервисом.
- Subnet router (маршрутизатор подсети): устройство с Tailscale становится посредником для всей своей локальной сети. Принтеры, камеры, старые NAS, на которые Tailscale не поставить, становятся доступны через него.
- Контроль доступа (ACL): по умолчанию все ваши устройства видят друг друга; в команде можно прописать правила — кто и с каких устройств может обращаться к каким портам. Правила рассылает сервер управления, а выполняет каждое устройство само.
- MagicDNS: каждое устройство получает имя, и не нужно запоминать адреса, начинающиеся на 100.
Как он соотносится с WireGuard и обычным VPN
- С WireGuard: WireGuard — протокол одного туннеля, он отвечает только за шифрованную связь двух концов; ключи и адрес другой стороны для каждого конца вы настраиваете вручную. Tailscale — целая система поверх него, которая берёт на себя вход, раздачу ключей, назначение адресов, обход NAT и ретрансляцию.
- С обычным VPN-сервисом: обычный VPN — это «весь трафик на один сервер», главное в нём — сменить точку выхода; главное в Tailscale — «связь между устройствами», а смена точки выхода (exit node) лишь побочная функция.
- С инструментами проброса портов (frp, Oray и подобные): они выставляют порт из локальной сети в интернет, и любой, кто знает адрес, может до него достучаться, а безопасность зависит от самого сервиса; Tailscale не открывает наружу ни одного порта, войти могут только ваши устройства, прошедшие вход.
- С ZeroTier: идея похожая — автоматическое построение сети; но ZeroTier использует собственный протокол и эмулирует сеть второго уровня, а Tailscale использует WireGuard и работает на третьем уровне.
Headscale и собственный сервер управления
Клиент Tailscale открытый, а сервер управления — сервис, который держит сама компания. Headscale — открытый сервер управления, написанный сообществом: он реализует тот же протокол, и официальный клиент можно переключить на него. Тогда список устройств, каталог ключей и правила доступа — у вас в руках.
Для этого в клиенте и есть пункт «Use custom server / Use an alternate server» (свой сервер управления): укажите адрес — и клиент будет подключаться не к серверу компании Tailscale, а к указанному вами.
При своём сервере то, как входить, сколько устройств можно подключить и какие есть выходные узлы, решает тот, кто этот сервер держит; к бесплатным лимитам и платным тарифам официального Tailscale это отношения не имеет.
Что нужно знать, если вы пользуетесь им в Китае
- Пробивание NAT держится на UDP. Многие китайские домашние провайдеры ограничивают скорость UDP, а большие внутренние сети операторов (многоуровневая трансляция адресов) мешают пробиванию, так что соединение через ретранслятор там случается чаще, чем за границей.
- Через ретранслятор скорость зависит от того, где он находится. Если он далеко, задержка высокая — это главная причина, почему впечатления от Tailscale в Китае так различаются.
- Формат пакетов WireGuard фиксированный и ничем не замаскирован, в сетях со строгой проверкой его могут опознать и ограничить. Это инструмент для построения сети, а не для обхода блокировок.
- Держать включённым на телефоне можно: без трафика туннель почти не тратит батарею, а при переключении между Wi‑Fi и мобильным интернетом соединение восстанавливается само.
Как его использует «Приватная» в LeoTun
Раздел «Приватная» в LeoTun — это официальный клиент Tailscale, подключённый к нашему собственному серверу управления: вы один раз входите с аккаунтом сайта, и устройство остаётся в сети; выходные узлы мы держим в разных регионах — выберите регион в меню Exit Node (выходной узел) в клиенте, и выход сменится без повторного импорта настроек; телефоны, компьютеры и NAS одного аккаунта видят друг друга напрямую.
Поскольку вход идёт на наш сервер управления, число устройств считается по тарифу аккаунта на нашем сайте, а аккаунт и лимиты официального Tailscale роли не играют; если на устройстве уже выполнен вход в официальный аккаунт Tailscale, сначала выйдите из него, потом войдите с нашим. Пошаговая установка и вход со скриншотами — в статье Что такое «Приватная» (Tailscale), а начать можно на странице «Приватная».
Если ваша сеть ограничивает UDP и «Приватная» работает медленно и нестабильно, с тем же аккаунтом можно перейти на другой способ подключения — см. Какой способ подключения для какой ситуации.
FAQ
Видят ли серверы Tailscale мой трафик?
Содержимое — нет. Сервер управления хранит только открытые ключи, список устройств и правила доступа, закрытые ключи не покидают устройств; ретрансляторы пересылают уже зашифрованные пакеты и ключей не имеют. Видны им метаданные: какое устройство в сети и с кем оно соединилось.
Как связаны Tailscale и WireGuard?
WireGuard — нижний уровень, протокол зашифрованного туннеля; Tailscale добавляет к нему вход в аккаунт, раздачу ключей, назначение адресов, обход NAT и ретрансляцию. Если WireGuard — двигатель, то Tailscale — готовая машина с этим двигателем, на которой можно сразу ехать.
Почему иногда показывает relay, а не прямое соединение?
Значит, пробить NAT между двумя устройствами не удалось; обычно потому, что сеть одной из сторон блокирует UDP или трансляция адресов слишком строгая. Через ретранслятор всё работает, просто скорость зависит от его расположения. Смена сети (например, на раздачу с телефона) часто даёт прямое соединение.
Что такое DERP?
Ретрансляционные серверы Tailscale. Когда устройства не могут соединиться напрямую, DERP пересылает зашифрованные пакеты; через него же устройства впервые связываются, когда появляются в сети. Он работает по HTTPS, поэтому проходит даже в сетях, где разрешён только веб-трафик.
Чем exit node отличается от обычного VPN?
Результат тот же: весь интернет-трафик выходит из другого места. Разница в том, что выходной узел — просто одно из устройств сети: его в любой момент можно сменить в меню или отключить, без перенастройки, и связь между устройствами при этом не страдает.
Что такое Headscale?
Открытая реализация сервера управления Tailscale. Укажите его адрес в официальном клиенте вместо стандартного сервера — и получите сеть под своим контролем; передача данных по-прежнему идёт через WireGuard, а клиент остаётся официальным.
Можно ли через Tailscale обходить блокировки?
Сам по себе это инструмент для построения сети: трафик выходит за границу, только если в вашей сети есть устройство за границей и оно назначено выходным узлом. Трафик ничем не замаскирован и в сетях с ограничением UDP может работать плохо. Если нужна стабильная трансграничная линия, смотрите другие способы в статье Какой способ подключения для какой ситуации.