ZeroTier CLI: missing port и порт не найден в /var/lib/zerotier-one — причины и решение

Ошибка вида zerotier-cli: missing port and zerotier-one port not found in /var/lib/zerotier-one означает, что утилита командной строки zerotier-cli не смогла определить порт локального API службы ZeroTier One: файл zerotier-one.port в каталоге /var/lib/zerotier-one отсутствует, пуст или недоступен для чтения. Без этого файла CLI не знает, к какому локальному HTTP-порту подключаться, и любые команды вроде zerotier-cli info или zerotier-cli listnetworks завершаются ошибкой.

Проблема почти всегда связана не с самой утилитой, а с состоянием системной службы: демон zerotier-one либо не запущен, либо упал при старте, либо не смог создать служебные файлы в своём рабочем каталоге. Ниже разберём, как проверить каждую из этих причин и восстановить работу управляющего порта без переустановки, а также когда переустановка действительно оправдана.

Как устроено взаимодействие CLI и службы ZeroTier

Утилита zerotier-cli — это лишь клиент. Вся работа с сетью выполняется фоновым демоном zerotier-one, который при запуске открывает локальный управляющий порт и записывает его номер в файл zerotier-one.port внутри своего домашнего каталога (в Linux это обычно /var/lib/zerotier-one). Там же хранятся ключи идентификации узла (identity.public, identity.secret) и токен доступа authtoken.secret.

Когда вы вводите команду zerotier-cli status, клиент читает номер порта из файла, затем токен авторизации и отправляет HTTP-запрос к локальному API демона. Если файл порта отсутствует, клиент не может даже начать обмен — отсюда и сообщение missing port. Важно понимать: сам по себе файл — это следствие, а не причина. Он создаётся демоном при успешном старте.

Проверка состояния службы zerotier-one

Первое действие — убедиться, что демон вообще запущен. В системах с systemd выполните:

systemctl status zerotier-one

Если служба остановлена или находится в состоянии failed, попробуйте запустить её вручную и сразу посмотреть журнал:

sudo systemctl start zerotier-one

sudo journalctl -u zerotier-one -n 50

Журнал покажет, почему демон не стартует: нехватка прав, повреждённая идентификация, занятый порт или проблемы с каталогом данных. После успешного запуска проверьте, появился ли файл порта:

ls -la /var/lib/zerotier-one/

cat /var/lib/zerotier-one/zerotier-one.port

☑️ Базовая диагностика порта ZeroTier

Выполнено: 0 / 5

Типичные причины отсутствия файла порта

На практике сообщение port not found in /var/lib/zerotier-one возникает по ограниченному кругу причин. Возможные варианты:

  • 🔧 Служба не запущена или падает при старте — самый частый сценарий; без работающего демона файл порта просто не создаётся.
  • 🔒 Недостаточно прав у пользователя — zerotier-cli запущен без root и не может прочитать zerotier-one.port или authtoken.secret, доступ к которым ограничен.
  • 📁 Неверный путь к домашнему каталогу — при нестандартной установке или запуске с параметром -U/другим каталогом данных файлы лежат не в /var/lib/zerotier-one.
  • 🧹 Каталог был очищен или повреждён — например, после ручной чистки «лишних» файлов, сбоя файловой системы или работы скриптов очистки.
  • ⏱️ CLI вызван раньше, чем демон завершил инициализацию — сразу после перезагрузки служба может ещё создавать служебные файлы.
⚠️ Внимание: не создавайте файл zerotier-one.port вручную с произвольным номером. Демон выбирает порт сам при запуске, и поддельный файл не заставит API работать — вы лишь получите ошибку соединения на следующем этапе.

Права доступа и запуск CLI от root

Даже если демон работает и файл порта существует, пользователь без привилегий может получить похожую ошибку: файлы в /var/lib/zerotier-one обычно принадлежат root и недоступны для чтения остальным. Проверьте, от чьего имени вы запускаете клиент:

sudo zerotier-cli info

Если команда с sudo работает, а без него — нет, причина именно в правах. Решения два: всегда использовать sudo для управления узлом или осознанно настроить доступ к токену для конкретного пользователя (это снижает изоляцию, поэтому делать так стоит только на доверенных машинах).

Также убедитесь, что сам каталог принадлежит пользователю, под которым работает демон, и не смонтирован в режиме «только чтение». Проверить можно командой mount | grep /var и ls -ld /var/lib/zerotier-one.

📊 Где вы столкнулись с ошибкой missing port?
Ubuntu/Debian с systemd
Docker-контейнер
Windows-служба ZeroTier
Другая система

Особые случаи: контейнеры и нестандартные установки

В Docker-контейнерах ошибка встречается особенно часто: процесс zerotier-one может запускаться с другим домашним каталогом, а CLI — с путём по умолчанию. В таком случае укажите каталог данных явно через параметр -D или проверьте, куда реально пишет демон. Точные флаги зависят от версии, поэтому сверьтесь с документацией вашей сборки.

Ещё один сценарий — параллельный запуск нескольких экземпляров демона. Второй экземпляр может не стартовать из-за конфликта, и его каталог останется без файла порта. Проверьте список процессов:

ps aux | grep zerotier

Восстановление: перезапуск, сброс и переустановка

Если служба запускается, но файл порта так и не появляется, действуйте по нарастающей. Сначала — полный перезапуск с очисткой состояния:

sudo systemctl stop zerotier-one

sudo systemctl start zerotier-one

sleep 5

sudo zerotier-cli info

Если это не помогло, возможна порча служебных файлов. Перед удалением чего-либо из /var/lib/zerotier-one обязательно сохраните identity.secret — это приватный ключ узла, его потеря означает смену идентификатора устройства в сети и необходимость заново авторизовывать узел в контроллере.

⚠️ Внимание: удаление файлов identity.secret и identity.public приводит к генерации нового Node ID. Все сети, где узел был авторизован вручную, потребуют повторного одобрения администратором.

Полная переустановка пакета — крайняя мера. Она оправдана, когда повреждены сами исполняемые файлы или конфигурация пакетного менеджера. После переустановки служба создаст свежий каталог данных, и файл порта появится при первом успешном запуске.

Сводная таблица диагностики

СимптомВероятная причинаДействие
Файл порта отсутствует, служба не активнаДемон не запущен или падаетЗапустить службу, изучить journalctl
Файл есть, но CLI выдаёт ошибку без sudoНедостаточно прав на чтениеИспользовать sudo или настроить доступ
Ошибка только в контейнереНестандартный каталог данныхУказать путь к данным явно
Ошибка сразу после загрузки ОСCLI вызван до готовности демонаДобавить задержку в скрипт
Файл порта есть, но соединения нетДемон завис или API недоступенПерезапустить службу, проверить процессы
Как узнать реальный порт вручную

Если демон работает, но файл порта недоступен, можно посмотреть, какой локальный порт слушает процесс: sudo ss -tlnp | grep zerotier. Управляющий API обычно слушает на интерфейсе 127.0.0.1.

Часто задаваемые вопросы

Почему zerotier-cli пишет missing port, хотя ZeroTier установлен?

Установка пакета не означает, что демон запущен. Файл zerotier-one.port создаётся только работающей службой. Проверьте статус через systemctl status zerotier-one и журнал ошибок.

Можно ли задать порт ZeroTier вручную?

Файл порта генерируется демоном автоматически, и вручную его править не следует. Если нужен предсказуемый порт, изучите параметры запуска вашей версии zerotier-one — возможности зависят от сборки, сверяйтесь с официальной документацией.

Ошибка пропадает после sudo — это нормально?

Да. Служебные файлы в /var/lib/zerotier-one доступны только привилегированному пользователю. Запуск sudo zerotier-cli — штатный способ управления узлом.

Что будет, если удалить весь каталог /var/lib/zerotier-one?

Демон при следующем запуске создаст каталог заново, но с новой идентификацией узла: изменится Node ID, и устройство придётся повторно авторизовывать во всех сетях. Предварительно сохраните identity.secret, если хотите сохранить идентификатор.

Ошибка возникает в Docker — что проверить в первую очередь?

Убедитесь, что демон и CLI используют один и тот же каталог данных, что процесс zerotier-one действительно запущен внутри контейнера и что каталог не смонтирован в режиме только для чтения.