ID узла или ID сети: что присоединяется к сети ZeroTier
ID узла называет устройство, а ID сети — виртуальную сеть. Для присоединения нужна сеть, а для авторизации участника — идентичность устройства.
В каждом разговоре о ZeroTier появляются два идентификатора, и они достаточно похожи, чтобы их путали в окне чата. ID узла называет устройство. ID сети называет виртуальную сеть, к которой это устройство хочет присоединиться. Присоединение берёт второй, а авторизация участника — первый.
Два идентификатора, две задачи
Идентичность узла создаётся при первом запуске службы на машине, и это шестнадцатеричный адрес из десяти символов. Она остаётся с этой установкой, пока не удалены файлы идентичности, поэтому переустановка может создать нового участника, которого никто не одобрил. ID сети — шестнадцать шестнадцатеричных символов, и он обозначает виртуальную сеть, а не машину. Контроллер, которому принадлежит сеть, сам является узлом, поэтому первые десять символов ID сети совпадают с адресом контроллера.
Ни одно из значений не является секретом, и ни одно не заменяет другое. Делиться ID сети со всеми участниками нормально; передача ID узла указывает контроллеру на одно устройство.
Читайте каждое значение из команды, которая его сообщает
Одна команда сообщает идентичность локальной службы, а другая — сети, к которым она присоединилась. Просить значение у неправильной команды — это путь, которым люди в итоге вставляют ID сети в список участников.
zerotier-cli info zerotier-cli status zerotier-cli listnetworks
Первая печатает адрес узла и то, в сети ли служба. Вторая добавляет сведения о версии и порте. Третья перечисляет присоединённые сети с их ID, состоянием и назначенными адресами, и это единственная команда, которую следует использовать, когда нужен ID сети.
Присоединяйтесь сетью, авторизуйте узлом
Команда присоединения берёт ID сети, который предоставляет тот, кто управляет контроллером. Положительный ответ команды означает, что запрос отправлен, а не что членство в частной сети предоставлено.
После присоединения администратор авторизует устройство по его ID узла в списке участников этой сети. Ему больше не нужен ID сети, и он не может авторизовать устройство по имени хоста, потому что идентичность — это адрес. Если вы администратор, прочитайте список участников и сверьте адрес узла с запросом. Запрос, в котором названа сеть, но нет адреса узла, невыполним.
Общий префикс имеет причину
Поскольку ID сети начинается с адреса узла контроллера, одни и те же десять символов видны в обоих местах. Это удобство маршрутизации, а не намёк на то, что значения взаимозаменяемы.
Это также объясняет, почему идентичность контроллера важнее его отображаемого имени. Восстановление контроллера под новой идентичностью создаёт другое адресное пространство, поэтому сети, определённые под старой, не являются теми же сетями, даже если имена используются повторно.
Храните идентичность контроллера в резервной копии вместе с его конфигурацией. Если относиться к этой идентичности как к метке, которую можно создать заново, восстановление превращается в переделку.
Проверяйте результат, а не вывод команды
Успешное присоединение — это начало проверки, а не её конец. Затем посмотрите на запись сети и прочитайте три поля: состояние, назначенный адрес и ID сети.
zerotier-cli listnetworks -j ip -br addr show | grep zt ping -c 2 10.147.20.5
Первая команда печатает тот же список в разбираемом виде, что упрощает сравнение с ожиданием администратора. Вторая подтверждает, что интерфейс получил адрес, а третья проверяет партнёра в сети, а не локальное состояние.
Если запись говорит ACCESS_DENIED, ID узла не авторизован. Если она говорит NOT_FOUND, ID сети неверен. Если она говорит OK без адреса, следующий вопрос — назначение адресов контроллером, и ни один из этих трёх не решается повторным присоединением.