ZeroTier
ZeroTier — это программное обеспечение с открытым исходным кодом, предназначенное для создания виртуальных частных сетей (VPN) на основе концепции «сети как услуги» (Network as a Service). Оно позволяет объединять устройства, находящиеся в разных физических сетях и географических локациях, в одну логическую сеть, как если бы они были подключены к одному локальному коммутатору. Это особенно полезно для удалённой работы, распределённых команд, IoT-устройств или гибридных облачных инфраструктур, где требуется безопасное и прозрачное сетевое взаимодействие.
Архитектура ZeroTier основана на децентрализованной модели с использованием глобальной распределённой системы управления, называемой планетой (Planet). Планета — это набор публичных корневых серверов (roots), которые обеспечивают начальное обнаружение узлов и маршрутизацию между ними. Каждая сеть в ZeroTier идентифицируется 64-битным идентификатором и управляется через веб-интерфейс или API. Администратор может настраивать правила доступа, IP-адресацию, маршруты и другие параметры, не требуя сложной настройки на каждом клиенте.
Когда устройство (нода) подключается к сети ZeroTier, оно получает виртуальный сетевой интерфейс с собственным MAC- и IP-адресом. Весь трафик между узлами шифруется с использованием современных криптографических протоколов (на основе Curve25519, Salsa20 и Poly1305), что обеспечивает высокий уровень безопасности. ZeroTier использует технологию peer-to-peer (P2P): как только узлы обнаруживают друг друга через корневые серверы, они стремятся установить прямое соединение, минуя центральные серверы, что снижает задержки и нагрузку на инфраструктуру.
Если прямое P2P-соединение невозможно (например, из-за NAT или файрволов), ZeroTier автоматически переключается на ретрансляцию трафика через промежуточные реле-серверы (relays), обеспечивая работоспособность сети в любых условиях. При этом вся логика маршрутизации и авторизации остаётся прозрачной для пользователя — достаточно установить клиент и присоединиться к нужной сети по её идентификатору.
ZeroTier поддерживает все основные операционные системы — Windows, macOS, Linux, Android, iOS, а также может работать на маршрутизаторах и встраиваемых устройствах. Это делает его универсальным решением для создания защищённых и масштабируемых сетей без необходимости в сложной настройке традиционных VPN-серверов или специализированного оборудования.
Важно отметить, что, несмотря на использование централизованных компонентов (планеты и реле), ZeroTier сохраняет контроль за сетью в руках её владельца: администратор полностью управляет политиками доступа, а трафик между доверенными узлами остаётся зашифрованным и не подвержен вмешательству со стороны третьих лиц, включая саму компанию ZeroTier. Это сочетание простоты, безопасности и гибкости делает ZeroTier популярным выбором как для частных пользователей, так и для корпоративных сред.
TIP
Ссылка на последнюю версю пакета для Альт Линукс https://git.altlinux.org/tasks/337183/build/100/x86_64/rpms/zerotier-one-1.12.2-alt1.x86_64.rpm
Сейчас последняя версия это 1.16.0, а для альта - 1.12.2, так как он был удалён из репозитория https://packages.altlinux.org/ru/sisyphus/srpms/zerotier-one/
Вот графический интерфейс контроллера: https://github.com/key-networks/ztncui
Вот графический интерфейс клиента: https://github.com/zerotier/DesktopUI
Дублирую ссылки на мои пакеты
ZeroTier-One: zerotier-one-1.16.0-alt1.x86_64.rpm
ZeroTier-One NonFree: zerotier-one-1.16.0-alt1.nf.x86_64.rpm
ZeroTier Desktop UI: zerotier-desktop-ui-1.8.3-alt1.x86_64.rpm
ZTNCUI: ztncui-0.8.14-alt1.x86_64.rpm
Пишите, если будут ошибки)
Ниже описаны мои потуги по сборке последней версии ZeroTierOne для Альт Линукс П11 (версия 1.16.0 на момент написания статьи), а также пакетов DesktopUI и ztncui.
Сборка rpm-пакета ZeroTier-One
- Устновка необходимых пакетов (скорее всего тут перечислены не все)
apt-get install rpmdevtools rpm-build gcc-c++ git-core gem-ronn-ng gem-ronn ronn libstdc++-devel libminiupnpc-devel rust rust-cargo udev-rules clang libssl-devel libminiupnpc-devel
- Не знаю почему, но я не использовал
GEAR
, так что собирал чисто с помощьюrpmbuild
. Подготавливаем дерево каталогов для сборки:
rpmdev-setuptree
- Просто куда-нибудь клонируем два репозитория: один с исходниками и готовой спекой для 1.12.2 версии, и второй - последняя версия от разработчиков:
git clone http://git.altlinux.org/gears/z/zerotier-one.git
git clone https://github.com/zerotier/ZeroTierOne.git
- Переходим в директорию с 1.12.2 версией и начинаем шаманить:
cd zerotier-one
- Редактируем спеку, меняем только версию (можно ещё changelog написать, если охота):
Version: 1.16.0
WARNING
Для некоммерческого использования: в строку 58 добавляем параметр ZT_NONFREE=1
:
%make_build ZT_USE_MINIUPNPC=1 ZT_NONFREE=1 one
При добавлении данного параметра должна произойти Non Free сборка, содержащая контролер, ранее же этот контроллер шёл в поставке свободно, теперь только так (подробнее об этом ниже).
- Копируем спеку в директорию сборки:
cp zerotier-one.spec ~/RPM/SPECS/
- Создаем директорию:
mkdir -p zerotier-one-development-1.16.0
- Копируем какие-то растовские файлы:
cp -R zerotier-one/zeroidc zerotier-one-development-1.16.0/
- Проваливаемся в скопированные файлы:
cd zerotier-one-development-1.16.0/zeroidc
- Генерируем директорию
vendor
:
cargo vendor
- Переносим сгенерированную директорию:
mv ./vendor ../
Должна получиться следующая структура:
zerotier-one-development-1.16.0/
├── vendor
└── zeroidc
- Поднимаемся на уровень выше:
cd ..
- Архивируем директорию и сразу переносим её в нашу сборочницу:
tar cvf ~/RPM/SOURCES/zerotier-one-development-1.16.0.tar zerotier-one-development-1.16.0
- Теперь работаем с исходниками.
cd ..
- После клонирования должна быть директория
ZeroTierOne
. Переименовываем её:
mv ZeroTierOne zerotier-one-1.16.0
- Архивируем директорию и сразу переносим её в нашу сборочницу:
tar cvf ~/RPM/SOURCES/zerotier-one-1.16.0.tar zerotier-one-1.16.0
- Если всё сделано правильно и я нигде не ошибся при описании, то можно проводить сборку пакета:
rpmbuild -ba ~/RPM/SPECS/zerotier-one.spec
- По завершению сборки должен появиться пакет
~/RPM/RPMS/x86_64/zerotier-one-1.16.0-alt1.x86_64.rpm
, который можно попробовать установить:
apt-get install ~/RPM/RPMS/x86_64/zerotier-one-1.16.0-alt1.x86_64.rpm
- Проверьте его статус после установки (он не должен быть запущен) и действуйте дальше сами):
systemctl status zerotie-one
WARNING
Эта инструкция далеко не истина в последней инстанции. Собирал по наитию, как ёжик в тумане. А устанавливал этот пакет я вообще поверх уже установленной версии 1.12.2, и вот что плохое у меня случилось:
- После обновления, ztncui, не смотря на то, что увидел zerotier, выдает ошибку HTTPError: Response code 404 (Not Found), но при этом ZeroTier version 1.16.0 он определяет. Вот за это всё-таки обидно.
P.S. по пункту 2:
Открыл я тут ZeroTier Release Notes 2025-08-21 -- Version 1.16.0 и вот что тут написано: The network controller (`controller/`) is now under a commercial source-available license. Default binary builds no longer contain the controller.
То есть, он теперь идёт отдельно и не поставляется вместе с клиентом, который я собирал. Ну, теперь хотя бы понятно, почему вебморда контроллера не работает как надо)
Но при этом у меня продолжила спокойно работать сеть, созданная на сайте zerotier.com, панель управления увидила, что у меня последняя версия.
P.S.2 по пункту 2:
Контроллер по-прежнему существует в основном репозитории ZeroTierOne, но теперь находится в подкаталоге: ZeroTierOne/nonfree/controller/
Для некоммерческого использования: можно попробовать собрать из исходников с ZT_NONFREE=1
.
make ZT_NONFREE=1
DANGER
В принципе, я считаю, что шалость удалась. Вот сама собранная rpm`ка (без контроллера) если кому надо: zerotier-one-1.16.0-alt1.x86_64.rpm
Также, собрал Non Free версию: zerotier-one-1.16.0-alt1.nf.x86_64.rpm
Desktop UI
Соберём и сделаем автозапуск графического интерфейса, который будет висеть в трее. С помощью него можно подключаться к сетям и чёт там настраивать.
WARNING
Была попытка сборка именно релиза 1.8.3, а не текущего состояния main ветки (6 октября 2025 года). Там у меня проблема с зависимостями, а именно tauri-libappindicator-sys
требует именно appindicator3
которого в Альте нет и ради которого делается патч (при сборке пакета).
TIP
Кстати, в репозитории уже несколько лет висит Pull Request на тоже самое, что мы тут патчим: https://github.com/zerotier/DesktopUI/pull/57
WARNING
Для работы этого трея нужно, чтобы хотя бы единожды у пользователя, который запускает сервис, были права на sudo, потом их можно отключить. Иначе Вы увидите ошибку sudo (я тестил на чистой машине)
Сборка руками из исходников
- Устанавливаем необходимые пакеты:
apt-get install meson ninja-build libgtk+3-devel pkg-config libayatana-appindicator3-devel
- Клонируем репозиторий:
git clone https://github.com/zerotier/DesktopUI.git
TIP
Кстати, без изменений этой инструкции, по состоянию на 6 октября 2025 года, можно собрать ветку 1.16.0 из этого же репозитория:
git clone -b 1.16.0 https://github.com/zerotier/DesktopUI.git
- Переходим в корень склонированного репозитория. Дальше я никуда перемещаться не буду. Все пути будут описаны от этой точки.
cd DesktopUI
- Редактируем файл
tray/Makefile
строки 24 и 25:
TRAY_CFLAGS := $(OPT_FLAGS) -DTRAY_APPINDICATOR=1 $(shell pkg-config --cflags appindicator3-0.1) -std=c99
TRAY_LDFLAGS := $(shell pkg-config --libs appindicator3-0.1)
Необходимо заменить appindicator3-0.1
на ayatana-appindicator3-0.1
.
- Редактируем файл
tray/tray.h
строку 34
#include <libappindicator/app-indicator.h>
Необходимо заменить libappindicator/app-indicator.h
на libayatana-appindicator/app-indicator.h
- Редактируем файл
build.rs
строку 17:
println!("cargo:rustc-link-lib=dylib=appindicator3");
Необходимо заменить appindicator3
на ayatana-appindicator3
.
- Начинаем процесс сборки:
make
- Далее будет настраивать автозапуск. Переносим собранный бинарный файл:
mv ./target/debug/zerotier_desktop_ui /usr/local/bin/
- Будем создавать пользовательский юнит systemd. Создаём директорию для юнитов (если её нет):
mkdir -p ~/.config/systemd/user
- Создаём файл юнита:
nano ~/.config/systemd/user/zerotier-desktop-ui.service
- Вставляем следующее содержимое:
[Unit]
Description=ZeroTier Desktop UI
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/local/bin/zerotier_desktop_ui
Restart=on-failure
RestartSec=5
Environment=DISPLAY=:0
Environment=XDG_RUNTIME_DIR=/run/user/%U
[Install]
WantedBy=default.target
- Перезагрузка конфигурации systemd для пользователя:
systemctl --user daemon-reload
- Включение автозапуска:
systemctl --user enable zerotier-desktop-ui.service
- Запустк сервиса:
systemctl --user start zerotier-desktop-ui.service
Собираем rpm-пакет
- Клонируем репозиторий:
git clone https://github.com/zerotier/DesktopUI.git
TIP
Кстати, без изменений этой инструкции, по состоянию на 6 октября 2025 года, можно собрать ветку 1.16.0 из этого же репозитория:
git clone -b 1.16.0 https://github.com/zerotier/DesktopUI.git
- Переименуйте директорию
DesktopUI
вDesktopUI-1.8.3
:
mv DesktopUI DesktopUI-1.8.3
- Создаём файл
zerotier-desktop-ui.spec
Name: zerotier-desktop-ui
Version: 1.8.3
Release: alt1
Summary: ZeroTier Desktop UI — system tray application for managing ZeroTier networks
Group: Applications/Internet
License: MPL-2.0
URL: https://github.com/zerotier/DesktopUI
# Build dependencies
BuildRequires: meson
BuildRequires: ninja-build
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(ayatana-appindicator3-0.1)
BuildRequires: rust
# Runtime dependencies
Requires: zerotier-one
# Патчи для совместимости с Ayatana AppIndicator
Patch0: use-ayatana-appindicator.patch
Source0: %{name}-%{version}.tar
%description
ZeroTier Desktop UI is a system tray application that allows you to manage ZeroTier networks
from your desktop environment. This RPM builds the UI with Ayatana AppIndicator support.
%prep
%setup -q -n DesktopUI-%{version}
# Применяем патч для замены appindicator → ayatana-appindicator
%patch0 -p1
%build
# Сборка через make (внутри Makefile вызывается cargo и meson)
make %{?_smp_mflags}
%install
# Очистка
rm -rf %{buildroot}
# Установка бинарника
install -Dm755 target/debug/zerotier_desktop_ui \
%{buildroot}%{_bindir}/zerotier_desktop_ui
# Установка systemd user unit
install -Dm644 packaging/systemd/zerotier-desktop-ui.service \
%{buildroot}%{_userunitdir}/zerotier-desktop-ui.service
%files
%{_bindir}/zerotier_desktop_ui
%{_userunitdir}/zerotier-desktop-ui.service
%changelog
* Mon Oct 06 2025 Nikita Bystrov bystrovno@basealt.ru - 1.8.3-alt1
- Initial RPM package for ZeroTier Desktop UI with Ayatana AppIndicator support
- Вам понадобится создать патч, который автоматизирует изменения, описанные в шагах 4–6 инструкции по ручной сборке:
- Распакуйте исходники релиза во временную директорию (или скопируйте директорию
DesktopUI-1.8.3
)
tar -xzf DesktopUI-1.8.3.tar.gz /tmp/DesktopUI-1.8.3
Или
cp DesktopUI-1.8.3/ /tmp/DesktopUI-1.8.3
- Перейдите в данную директорию
cd /tmp/DesktopUI-1.8.3
- Сохраните исходное состояние исходных файлов.
git init
git add .
git commit -m "original"
- Внесите нужные изменения вручную:
tray/Makefile
: Найдите строки с appindicator3-0.1
и замените на ayatana-appindicator3-0.1
:
sed -i 's/appindicator3-0.1/ayatana-appindicator3-0.1/g' tray/Makefile
tray/tray.h
: Замените заголовок:
sed -i 's|libappindicator/app-indicator.h|libayatana-appindicator/app-indicator.h|' tray/tray.h
build.rs
: Замените имя библиотеки:
sed -i 's/appindicator3/ayatana-appindicator3/' build.rs
- Сгенерируйте новый патч
git diff > ~/RPM/SOURCES/use-ayatana-appindicator.patch
- Проверьте патч
cd /tmp/DesktopUI-1.8.3
git reset --hard # или удалите изменения
patch -p1 < ~/RPM/SOURCES/use-ayatana-appindicator.patch
Если нет ошибок — патч готов.
Должен получиться следующий патч use-ayatana-appindicator.patch
:
diff --git a/build.rs b/build.rs
index a332a99..e6edaab 100644
--- a/build.rs
+++ b/build.rs
@@ -14,6 +14,6 @@ fn main() {
println!("cargo:rustc-link-lib=dylib=gdk-3");
println!("cargo:rustc-link-lib=dylib=gobject-2.0");
println!("cargo:rustc-link-lib=dylib=glib-2.0");
- println!("cargo:rustc-link-lib=dylib=appindicator3");
+ println!("cargo:rustc-link-lib=dylib=ayatana-appindicator3");
}
}
diff --git a/tray/Makefile b/tray/Makefile
index 2111412..2b6ed01 100644
--- a/tray/Makefile
+++ b/tray/Makefile
@@ -21,8 +21,8 @@ else ifeq ($(shell uname -s),Linux)
else
OPT_FLAGS := -Og
endif
- TRAY_CFLAGS := $(OPT_FLAGS) -DTRAY_APPINDICATOR=1 $(shell pkg-config --cflags appindicator3-0.1) -std=c99
- TRAY_LDFLAGS := $(shell pkg-config --libs appindicator3-0.1)
+ TRAY_CFLAGS := $(OPT_FLAGS) -DTRAY_APPINDICATOR=1 $(shell pkg-config --cflags ayatana-appindicator3-0.1) -std=c99
+ TRAY_LDFLAGS := $(shell pkg-config --libs ayatana-appindicator3-0.1)
else ifeq ($(shell uname -s),Darwin)
RM=rm -f
LIB_NAME=libzt_desktop_tray.a
diff --git a/tray/tray.h b/tray/tray.h
index fe18fea..0ed4ffc 100644
--- a/tray/tray.h
+++ b/tray/tray.h
@@ -31,7 +31,7 @@ void tray_update(struct tray *tray);
#if defined(TRAY_APPINDICATOR)
#include <gtk/gtk.h>
-#include <libappindicator/app-indicator.h>
+#include <libayatana-appindicator/app-indicator.h>
#define TRAY_APPINDICATOR_ID "tray-id"
- Создайте папку
DesktopUI-1.8.3/packaging/systemd/
в корне исходников (не/tmp
!) и поместите туда файлDesktopUI-1.8.3/packaging/systemd/zerotier-desktop-ui.service
:
[Unit]
Description=ZeroTier Desktop UI
After=graphical-session.target
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/zerotier_desktop_ui
Restart=on-failure
RestartSec=5
Environment=DISPLAY=:0
Environment=XDG_RUNTIME_DIR=/run/user/%U
[Install]
WantedBy=default.target
- Установите зависимости:
apt-get install rpm-build meson ninja-build gtk3-devel libayatana-appindicator3-devel rust cargo
- Подготовьте сборочницу, перенеся все подготовленные файлы:
cp zerotier-desktop-ui.spec ~/RPM/SPECS/
cp use-ayatana-appindicator.patch ~/RPM/SOURCES/
tar cvf ~/RPM/SOURCES/zerotier-desktop-ui-1.8.3.tar DesktopUI-1.8.3/
- Соберите:
rpmbuild -ba ~/RPM/SPECS/zerotier-desktop-ui.spec
DANGER
В принципе, я считаю, что шалость2 удалась. Вот сама собранная rpmка (из ветки 1.16.0) если кому надо: zerotier-desktop-ui-1.8.3-alt1.x86_64.rpm (Вероятнее всего пакет вообще не установится без уже установленного zerotier-one
и будет кричать, что пакет битый, так как apt
не сможет сам удовлетворить зависимость)
После установки пакета необходимо включить сервис:
systemctl --user enable --now zerotier-desktop-ui.service
ztncui
DANGER
Вот собранный пакет: ztncui-0.8.14-alt1.x86_64.rpm Так, ну вроде пакет рабочий, я исправил права доступа, теперь вроде как всё нормально
Данный пакет:
- Устанавливает приложение в
/opt/ztncui
- Управляет службой через systemd (
ztncui.service
)
- Убедитесь, что установлены необходимые пакеты для сборки и создано дерево сборки:
apt-get install rpm-build git nodejs npm gcc-c++ make
- Также установите
node-gyp
глобально:
npm install -g node-gyp
- Клонирование репозитория:
cd /tmp
git clone https://github.com/key-networks/ztncui.git
- Создаём архив исходников (имя должно соответствовать версии)
tar -czf ~/RPM/SOURCES/ztncui-0.8.14.tar.gz ztncui
- Создайте файл
~/RPM/SPECS/ztncui.spec
со следующим содержимым:
Name: ztncui
Version: 0.8.14
Release: alt1
Summary: ZeroTier Network Controller Web UI
License: GPL-3.0-or-later
Group: Applications/Internet
AutoReqProv: no
URL: https://github.com/key-networks/ztncui
Source0: %{name}-%{version}.tar.gz
# Зависимости
Requires: nodejs >= 14
Requires: npm
Requires: zerotier-one
BuildRequires: npm
BuildRequires: gcc-c++
BuildRequires: make
%description
ztncui is a web-based user interface for managing a standalone ZeroTier network controller.
%prep
%setup -q -n %{name}
%build
cd src
npm install --production
%install
rm -rf %{buildroot}
# Основная установка в /opt
install -d %{buildroot}/opt/%{name}
cp -r . %{buildroot}/opt/%{name}/
# Удаляем .git и ненужные файлы
rm -rf %{buildroot}/opt/%{name}/.git*
# Создаём конфигурационный каталог
install -d %{buildroot}/etc/%{name}
install -d %{buildroot}/var/lib/%{name}
# Systemd unit
install -d %{buildroot}%{_unitdir}
cat > %{buildroot}%{_unitdir}/%{name}.service << 'EOF'
[Unit]
Description=ZeroTier Network Controller UI
After=network.target zerotier-one.service
[Service]
Type=simple
User=zerotier-one
Group=zerotier-one
WorkingDirectory=/opt/ztncui/src
EnvironmentFile=-/opt/ztncui/src/.env
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
%post
# Копируем passwd, если не существует
if [ ! -f /opt/ztncui/src/etc/passwd ]; then
cp -v /opt/ztncui/src/etc/default.passwd /opt/ztncui/src/etc/passwd
chown zerotier-one:zerotier-one /opt/ztncui/src/etc/passwd
chmod 600 /opt/ztncui/src/etc/passwd
fi
# Создаём .env, если не существует
if [ ! -f /opt/ztncui/src/.env ]; then
ZT_TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret 2>/dev/null || echo "YOUR_TOKEN_HERE")
cat > /opt/ztncui/src/.env << EOF
ZT_TOKEN=$ZT_TOKEN
NODE_ENV=production
EOF
chown zerotier-one:zerotier-one /opt/ztncui/src/.env
chmod 600 /opt/ztncui/src/.env
fi
# Перезагружаем systemd, чтобы увидеть новый unit
systemctl daemon-reload || :
%files
%attr(755, zerotier-one, zerotier-one) /opt/%{name}
%dir %attr(755, zerotier-one, zerotier-one) /etc/%{name}
%{_unitdir}/%{name}.service
%dir %attr(755, zerotier-one, zerotier-one) /var/lib/%{name}
%changelog
* Tue Oct 07 2025 Nikita Bystrov bystrovno@basealt.ru - 0.8.14-alt1
- Initial RPM package for ALT Linux
- Сборка RPM:
rpmbuild -ba ~/RPM/SPECS/ztncui.spec
- Если всё прошло успешно, RPM-пакет будет в:
ls -l ~/RPM/RPMS/x86_64/ztncui-0.8.14-alt1.x86_64.rpm
- Установка и запуск:
apt-get install ~/RPM/RPMS/ztncui-0.8.14-alt1.x86_64.rpm
Убедитесь, что ZeroTier запущен
systemctl enable --now zerotier-one
Запустите ztncui
systemctl enable --now ztncui
Проверьте статус
systemctl status ztncui
Доступ к веб-интерфейсу:
По умолчанию:
- HTTP на
http://localhost:3000
Также в файл /opt/ztncui/src/.env
можно добавить следующее:
HTTP_ALL_INTERFACES=yes
Приложение можно заставить прослушивать все интерфейсы для HTTP-запросов, установивHTTP_ALL_INTERFACES
в.env
файл.HTTPS_PORT=3443
HTTPS_HOST=12.34.56.78
Приложение можно заставить прослушивать на определенном интерфейсе HTTPS-запросов, указавHTTPS_HOST (имя хоста или IP-адрес интерфейса)
в.env
файл. ЕслиHTTPS_HOST
не указан, но указаноHTTPS_PORT
, то приложение будет прослушивать запросы HTTPS на всех интерфейсах.
Важные замечания:
authtoken.secret: Пакет пытается автоматически прочитать токен из /var/lib/zerotier-one/authtoken.secret
. Убедитесь, что zerotier-one
установлен и запущен до установки ztncui
(Нужно, чтобы zerotier-one
был собран вместе с контроллером, иначе, очевидно, работать не будет) (Вероятнее всего пакет вообще не установится без уже установленного zerotier-one
и будет кричать, что пакет битый, так как apt
не сможет сам удовлетворить зависимость).