Ошибка вида 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
Типичные причины отсутствия файла порта
На практике сообщение 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.
Особые случаи: контейнеры и нестандартные установки
В 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 действительно запущен внутри контейнера и что каталог не смонтирован в режиме только для чтения.