Mesh
Tuna Mesh объединяет ноутбуки, серверы и виртуальные машины команды в частную сеть. Каждое устройство получает постоянный адрес и DNS-имя вида laptop.tuna, и устройства обращаются друг к другу напрямую по любым протоколам и портам. Публичный IP-адрес и открытые порты не нужны.
Туннель публикует один локальный сервис в интернет. Mesh — закрытая сеть: в ней видны только устройства вашей команды, а снаружи к ним не попасть.
Что ещё умеет mesh:
- точки выхода — выходить в интернет через другое устройство команды, например через сервер в нужной стране;
- подсети — открыть доступ к офисной сети через одно устройство, не ставя клиент на каждый хост;
- правила доступа — задать, какие устройства и по каким портам могут общаться;
- отзыв устройств из личного кабинета: сессия обрывается сразу.
Трафик шифруется WireGuard. Если в сети режется UDP, клиент сам переключается на запасной транспорт поверх SSH.
Требования
- Linux, macOS или Windows. Раздавать точку выхода и подсети можно только с Linux и macOS, пользоваться ими можно на всех трёх системах.
- Клиент tuna. Рекомендуем версию 0.38.0 и новее, а tunad — 0.1.2 и новее.
- Служба
tunad. Она настраивает сетевой интерфейс, поэтому работает с правами root или администратора. Сами командыtuna meshзапускаются от обычного пользователя,sudoдля них не нужен.
Внутри Docker-контейнера tunad не запускается, ставьте её на хост.
Установка tunad
- Linux
- macOS
- Windows
Пакет tunad лежит в том же репозитории, что и tuna. Подключите репозиторий по инструкции по установке и установите пакет:
# Debian, Ubuntu
sudo apt install -y tunad
# RHEL, Fedora
sudo dnf install -y tunad
# SUSE, openSUSE
sudo zypper install -y tunad
Пакет сам включит и запустит службу tunad.service.
brew install yuccastream/tap/tunad
sudo tunad install
Управлять службой можно командами sudo tunad status, sudo tunad restart и sudo tunad uninstall. Логи лежат в /var/log/tunad.out.log и /var/log/tunad.err.log.
Скачайте установщик tunad_x64.msi или, для ARM, tunad_arm64.msi и запустите его. Установщик сам зарегистрирует службу.
Подключение устройства
С браузером
На рабочем компьютере выполните:
tuna mesh login
Команда откроет браузер со страницей подтверждения. Проверьте, что имя устройства, ОС и IP-адрес ваши, и нажмите Подключить. Если браузер не открылся, CLI напечатает ссылку. На подтверждение есть 10 минут.
После подтверждения браузер возвращает результат в CLI по адресу 127.0.0.1, поэтому браузер должен быть открыт на том же компьютере. Для удалённого сервера, к которому вы подключены по SSH, используйте токен подключения.
Устройство попадёт в ту команду, которая сейчас выбрана в личном кабинете. Если вы состоите в нескольких командах, переключитесь на нужную в боковой панели до подтверждения.
После подтверждения подключите устройство к сети:
tuna mesh up
Сервер без браузера
Для серверов, виртуальных машин и CI используйте токен подключения:
- В кабинете откройте Mesh → Токены подключения и нажмите Создать токен.
- Выберите срок действия, от 1 часа до 1 дня, и число активаций, от 1 до 10. Одним токеном можно подключить несколько серверов.
- Скопируйте токен: он показывается один раз.
На сервере выполните:
tuna mesh enroll <токен>
tuna mesh up
Токен можно передать и через переменную окружения TUNA_MESH_ENROLL_TOKEN. После срока действия токен перестаёт работать, даже если активации остались. Устройства, подключённые по токену, принадлежат тому, кто его создал.
Метка окружения
При подключении устройству можно задать метку окружения, например production или staging:
tuna mesh enroll <токен> --env=production
Вместо флага подойдёт переменная TUNA_MESH_ENV, без неё метка — default. Метка видна в списке устройств, администратор команды может её поменять. Пока это только подпись для удобства, на доступ она не влияет.
Адреса и имена
Каждое устройство получает адрес IPv4 из диапазона 100.100.0.0/16 и парный адрес IPv6 из fd74:756e:6100:100::/64. Адрес закреплён за устройством и не меняется при переподключении. Диапазон одинаковый у всех команд, но сети команд изолированы друг от друга.
Имя устройства — его hostname в зоне .tuna, например office-gw.tuna. Если имя занято, сервер добавит суффикс: laptop-1, laptop-2. Переименовать устройство из кабинета нельзя: чтобы сменить имя, поменяйте hostname и подключите устройство заново.
Имена работают в любых программах:
ssh ubuntu@office-gw.tuna
psql -h prod-db-1.tuna -U app
curl http://k8s-worker-3.tuna:8080/healthz
tunad настраивает DNS только для зоны .tuna, остальные запросы идут через ваш обычный DNS-сервер.
Статус и диагностика
| Команда | Что показывает |
|---|---|
tuna mesh status | состояние сети, имя и адреса устройства, транспорт, точку выхода, раздаваемые и полученные подсети |
tuna mesh ip | адреса устройства, -4 или -6 — только один |
tuna mesh peers | устройства команды и их состояние |
tuna mesh trace <устройство> | путь до устройства и задержку |
tuna mesh debug trace <откуда> <куда> | пропустят ли правила доступа соединение, без реального трафика |
Для скриптов у status, peers и debug trace есть флаг --json.
После перезагрузки служба tunad сама поднимает сеть с теми же настройками, если она была включена.
Отключение
Команда tuna mesh down отключает устройство от сети, но оставляет его в команде: снова подключиться можно командой tuna mesh up.
Команда tuna mesh logout отключает устройство, отзывает его и удаляет ключи с компьютера. После этого устройство можно подключить заново, в том числе под другим пользователем.
Отозвать устройство можно и в кабинете: Mesh → Мои устройства → Отозвать. Сессия обрывается сразу. Администратор команды может отозвать любое устройство в разделе Команда → Устройства.
Тарифы
| Тариф | Устройств на участника | Точки выхода и подсети | Свои правила доступа |
|---|---|---|---|
| Новичок | 5 | только пользоваться чужими | нет |
| Профи | 10 | раздавать и пользоваться | нет |
| Легенда | 100 | раздавать и пользоваться | до 100 правил |
Отозванные устройства в лимит не входят.
Без своих правил доступа устройства одного пользователя видят друг друга, а устройства разных участников — нет. Чтобы коллеги могли подключаться к устройствам друг друга, нужен тариф «Легенда» и разрешающее правило.
Ограничения беты
- Точку выхода выбирают вручную, автоматического выбора нет.
- Раздавать точку выхода и одновременно выходить через другое устройство нельзя.
- Если запустить
tuna mesh upбез флагов--advertise-*, ранее объявленные точка выхода и подсети снимаются. Повторяйте флаги при каждом запуске. - Службой tunad на компьютере пользуется один пользователь ОС — тот, кто первым подключил устройство. Другой пользователь получит отказ, пока первый не выполнит
tuna mesh logout. - Если клонировать виртуальную машину, переустановить ОС или заменить материнскую плату, устройство нужно подключить заново.
- Сертификат устройства действует 7 дней и продлевается сам, пока устройство включено. Если устройство было выключено дольше, подключите его заново командой
tuna mesh loginилиtuna mesh enroll. Подсказкаtuna mesh down && tuna mesh upв выводеtuna mesh statusв этом случае не поможет. - Адреса mesh
100.100.0.0/16входят в диапазон, который использует Tailscale. Если на устройстве работают оба, маршруты могут пересечься.