Преимущества
⭐️ Нет ограничения по слотам.
⭐️ Низкий пинг - можно выбрать любую локацию, например Москва или Питер.
⭐️ Безлимитное количество сетей и устройств, ограничено только мощностью сервера.
⭐️ Нет необходимости покупать дорогостоящий сервер - достаточно арендовать сервер с минимальными ресурсами для обеспечения соединения между игроками, которые и будут выступать хостом.
Установка
Для работы панели необходимо установить Docker:
curl -fsSL https://get.docker.com -o get-docker.sh && sudo bash get-docker.sh
Создадим директорию, в которой будет находиться наше решение:
mkdir -p /srv/zerotier/
Создадим в рабочей директории решения файл docker-compose.yml:
touch /srv/zerotier/docker-compose.yml
Добавим в него следующее содержимое, по желанию указав необходимые параметры окружения:
services:
postgres:
image: postgres:15.2-alpine
container_name: ztnet-database
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ztnet
volumes:
- postgres-data:/var/lib/postgresql/data
zerotier:
image: zyclonite/zerotier:1.14.2
hostname: zerotier
container_name: zerotier
restart: unless-stopped
volumes:
- zerotier:/var/lib/zerotier-one
cap_add:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
- "9993:9993/udp"
environment:
- ZT_OVERRIDE_LOCAL_CONF=true
- ZT_ALLOW_MANAGEMENT_FROM=172.31.255.0/29
ztnet:
image: sinamics/ztnet:latest
container_name: ztnet
working_dir: /app
volumes:
- zerotier:/var/lib/zerotier-one
restart: unless-stopped
ports:
- 3000:3000
environment:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ztnet
NEXTAUTH_URL: "http://localhost:3000"
NEXTAUTH_SECRET: "random_secret"
NEXTAUTH_URL_INTERNAL: "http://ztnet:3000"
links:
- postgres
depends_on:
- postgres
- zerotier
volumes:
zerotier:
postgres-data:
networks:
default:
name: zerotier
driver: bridge
ipam:
driver: default
config:
- subnet: 172.31.255.0/29
Запуск и настройка
Запустим командой:
docker compose -f /srv/zerotier/docker-compose.yml up -d
Входим в установленную панель по адресу http://<IP_СЕРВЕРА>:3000

Регистрируемся, нажав на кнопку «Get started!», вводим имя пользователя, любую почту (подтверждать её не нужно) и пароль.

После регистрации сразу откроется главный экран панели, на котором нам необходимо нажать «Create a network», для того чтобы приступить к созданию приватной сети.

Созданная сеть выглядит следующим образом:

Сетью уже можно пользоваться, но давайте разберём подробно некоторые моменты:
В правом верхнем углу имеется переключатель видимости сети: Private и Public.

Если необходимо чтобы сеть была доступна только доверенным лицам, и Вы вручную одобряли тех пользователей, которые желают присоединиться к сети – выбираем Private.
Если желаете сделать сеть доступной для свободного присоединения для всех без исключения – выбираем Public.
Вы также можете настроить префикс новой сети, выбрав один из популярных вариантов, или же задав свой, в разделе IP Assignment → Advanced.

Для примера зададим новый префикс сети с CIDR 10.0.0.0/24. Тогда укажем следующие значения:
Range start – 10.0.0.1
Range end – 10.0.0.254

Применив изменения, добавится новый route в разделе «Managed Routes». При этом желательно удалить старый route и старый префикс, в нашем случае это 10.121.15.0/24

Подключение
Устанавливаем клиент ZeroTier с официального сайта, после чего подключаемся к нашей сети.

Жмем ПКМ по иконке ZeroTier в трее и выбираем в нём пункт «Join New network». В появившемся окне вводим ID сети, которую мы создали. Его можно найти в установленной веб-панели ZTNet на вкладке сети.

Новое подключение необходимо подтвердить на стороне панели, нажав на чекбокс около клиента, который пытается осуществить подключение. Тоже самое необходимо осуществить на стороне каждого клиента, который должен находиться в сети ZeroTier.

Эксплуатация
Проверим работоспособность нашего решения на практике:После подключения другого клиента (Ваших друзей) к сети проверим возможность подключения к нему, проверив прямой пинг до него через терминал, возьмём IP нашего друга из примера: Win + R → cmd
ping 10.0.0.201

Если пинг есть - значит всё ок. Теперь мы можем использовать возможности ZeroTier для наших целей.
Майнкрафт - это моя жизнь
Для примера создадим сервер Minecraft и проверим, сможем ли мы играть совместно с участниками сети.
Запускаем одиночную игру и разрешим подключение по сети, указав любой порт:

Делимся с друзьями нашим IP клиента ZeroTier. Его можно будет найти в веб-панели ZTNet.

Просим друзей подключиться через «Прямое подключение» в списке серверов Minecraft.

Примечание: для режима игры "LAN" необходимо наличие лицензии или использование системы скинов, в нашем примере ely.by. Иначе будет ошибка "Недействительная сессия (Попробуйте перезайти в игру)"
Если подключение прошло успешно, значит всё настроено верно.
Для тех, кто не любит многобукаф
Скачать готовый скрипт установки
Комментарии (11)
MaximusPrimie
15.05.2025 08:39А зачем? Сервер упомянутой вами игрушки и так легко настроить и запустить.
daedaldev
15.05.2025 08:39Да, но не у всех есть белый / статический IP, а вдски много у кого сейчас есть, но не самые мощные, а для майнкрафта нужна приличная вдска чтобы его захостить, ибо требование к ресурсам высокое. Легче и дешевле захостить у себя на машине локалку и пробросить через VPN в контексте игры с друзьями
ritorichesky_echpochmak
15.05.2025 08:39Есть какие-то плюсы использовать ZeroTier, например, на Keenetic, при условии, что есть SSTP и OpenConnect и вообще любой нужный сервис прокидывается в мир даже из-за NAT через KeenDNS (по сути по SSTP)?
Как он вообще уживается со всякими DPI? Как реагирует на разрывы? Что по перфомансу в сравнении с SSTP/OpenConnect/WG?
enamchuk
15.05.2025 08:39ZeroTier уже блокируется некоторыми операторами связи (в основном, мобильными).
Для большей работоспособности советуют использовать не только свой контроллер ZeroTier, но и свои "Луны".
enamchuk
15.05.2025 08:39ZeroTier хорош тем, что позволяет собрать все нужные устройства в одну "локальную" сеть на втором уровне, и, в отличие от классических VPN, нет центрального сервера для обмена трафиком, весь трафик идёт напрямую от клиента к клиенту. Через контроллер трафик данных не идёт, он только управляет клиентами и правилами доступа.
JerzyEx
15.05.2025 08:39А если нет прямого маршрута между клиентами? Провайдеры тупо не видят друг друга, tracert обрывается на шлюзе провайдера
ki11j0y
15.05.2025 08:39Прочитал несколько раз некоторые моменты. Из за зависимости внешнего сервиса, и возможной неработоспособности, продолжаем для этой цели использовать xray с псевдовпн, ocserv так же могут забанить, развернуть шустрый wg поверх websocket не удалось, rdp глючит, с openvpn такая же история, для ws использовался, wstunnel от erebe и gost от китайцев, терминация ws была на обратном прокси по итогу качество соединения не удовлетворяет.
1dntfkngcare
15.05.2025 08:39Вся титаническая работа по созданию приложения унижается, разбивается о то, что его разработчики не в силах упаковать всё в обычный exe или msi файл.
99.99% населения земли не будут заниматься этой попоболью с консолью, настройкой докера и т.д.
13werwolf13
перечитал статью дважды, но так и не понял каким образом клиент понимает что нужно топать за конфигом к поднятому selfhosted инстансу а не к официальному публичному..
Grapie
Ztnet, хоть и не существовенно, но зависит от API Zerotier
Подробнее тут:
https://docs.zerotier.com/roots/
daedaldev
"Резолвинг" селфхостед сервера все равно идет через API Zerotier, однако подключение по итогу проходит через личный сервер, который становится участником сети Zerotier, но с настройками, которыми Вы можете полностью управлять, в отличии от привычного сервиса Zerotier с управлением через их собственный дашборд. Получается не совсем полный selfhosted, который частично зависит от сервиса.