ZeroTier Частные корневые серверы

Создание собственных корней (они же moon)

Все узлы ZeroTier на планете фактически находятся в одном центре обработки данных. Это упрощает прямое подключение устройств в любом месте, но у него есть недостаток, заключающийся в том, что он не работает без подключения к Интернету. Сетевые соединения далеки от идеальной надежности, и иногда по соображениям безопасности пользователь может пожелать полностью «изолировать» набор узлов от остальной части Интернета.

В 1.2.0 мы представили возможность добавлять собственные определяемые пользователем корни. Поскольку центром обработки данных, в котором мы живем, является планета, определяемый пользователем набор корней называется луной . Когда узел «вращается» вокруг Луны, он добавляет корни Луны к своему набору корневых серверов. Узлы, вращающиеся вокруг Луны, по-прежнему будут использовать корни планет, но они будут использовать корни Луны, если они будут выглядеть быстрее или если больше ничего не будет доступно.

Первым шагом в создании moon является развертывание набора корневых серверов. В большинстве случаев мы рекомендуем два. Это обычные узлы ZeroTier, но они всегда включены и имеют статические (физические) IP-адреса. Эти статические IP-адреса могут быть глобальными IP-адресами в Интернете или физическими IP-адресами в интрасети, доступными только изнутри. В последнем случае корни вашей луны не будут работать за пределами вашего офиса, но это не имеет значения. Вместо этого перемещающиеся узлы будут использовать планетарные корни.

Мы рекомендуем, чтобы корневые серверы не действовали как сетевые контроллеры, не присоединялись к сетям или не выполняли какие-либо другие дублирующие функции. Им нужны хорошие надежные сетевые соединения, но в остальном требуется очень мало оперативной памяти, хранилища или процессора. Корнем может быть небольшая виртуальная машина, VPS или облачный экземпляр или небольшое устройство, такое как Raspberry Pi . Если вы подготавливаете свои корни как виртуальные машины, позаботьтесь о том, чтобы все они не располагались на одном и том же физическом оборудовании. Это противоречило бы цели иметь двоих.

Следующим шагом будет создание определения мира с помощью zerotier-idtool. Вам потребуются identity.publicфайлы с каждого из ваших корневых серверов. Выберите один корень (неважно какой) и запустите zerotier-idtool initmoon <identity.public of one root> >>moon.json. Команда zerotier-idtoolвыведет JSON-версию вашего определения мира на стандартный вывод , поэтому мы перенаправляем его на moon.json.

Изучите этот файл. Он будет содержать что-то вроде:

{
"id": "eb9xxxxe6d",
"objtype": "world",
"корнеплоды": [
{
"identity": "eb9xxxxe6d: 0: 34031483094 ...",
"stableEndpoints": []
}
],
«SigningKey»: «b324d84cec708d1b51d5ac_________b39ac052ce3f54e58d8944b52632eb6d671d»,
"SigningKey_SECRET": "ffc5dd0b2baf1c9_________bf7d314cfd70dbf7d314cfdbf7d3143da7db
"UpdatesMustBeSignedBy": "b324d84cec7_________3ab2e3da1ac52ecb39ac052ce3f54e58d89446d52632e",
"worldType": "moon"
}

ID мира технически произвольный и может быть любым случайным 64-битным значением. По соглашению мы используем адрес одного из корней.
JSON-файл определения мира содержит секреты , поэтому важно хранить его в надежном месте. Это signingKey_SECRETто, что позволит вам автоматически обновлять определение мира в будущем.
Теперь добавьте другие корни и определите их стабильные конечные точки. В итоге вы получите что-то вроде:

{
"id": "eb9xxxxe6d",
"objtype": "world",
"корнеплоды": [
{
"identity": "eb9xxxxe6d: 0: 34031483094 ...",
"stableEndpoints": ["192.168.20.1/9993"]
},
{
"identity": "eb0xxxxe62: 0: 83588158384 ...",
"stableEndpoints": ["192.167.21.1/9993"]
}
],
«SigningKey»: «b324d84cec708d1b51d5ac_________b39ac052ce3f54e58d8944b52632eb6d671d»,
"SigningKey_SECRET": "ffc5dd0b2baf1c9_________bf7d314cfd70dbf7d314cfdbf7d3143da7db
"UpdatesMustBeSignedBy": "b324d84cec7_________3ab2e3da1ac52ecb39ac052ce3f54e58d89446d52632e",
"worldType": "moon"
}

Статические IP-адреса, которые вы используете, должны быть доступны из всех мест, где вы хотите, чтобы эти корни обслуживались. Если вы развертываете их для использования в физическом месте, используйте внутренние IP-адреса. Если вы хотите, чтобы их можно было использовать за пределами площадки, используйте общедоступные IP-адреса из своей демилитаризованной зоны или разместите их у поставщика облачных услуг с ближайшим к вам центром обработки данных. Недорогие облачные хосты, которые обеспечивают простую статическую прямую IP-адресацию и поддержку IPv4 / IPv6 с двумя стеками, такие как Digital Ocean , Vultr и Linode, являются идеальными местами для размещения корневых серверов . Самых дешевых экземпляров у этих поставщиков в большинстве случаев более чем достаточно.

Третий шаг - создать реальный подписанный мир с помощью zerotier-idtool genmoon moon.json. В этом случае будет создан файл с именем 000000eb9xxxxe6d.moon. Он не содержит секретных ключей, но подписан секретом из файла JSON.

Теперь перейдите к своим корням, создайте (если он не существует) подкаталог их рабочих каталогов (обычно /var/lib/zerotier-oneв Linux) с именем moons.dи скопируйте туда подписанный файл луны. Теперь перезапустите корни, и они должны быть готовы.

Вы можете добавить эти корни в обычные узлы в одном из двух способов: путем размещения одного файла мир определения в их moons.dкаталогах или с помощью zerotier-cli orbitкоманды: zerotier-cli orbit eb9xxxxe6d eb9xxxxe6d. Первый аргумент - это идентификатор мира (который мы можем сократить, удалив два ведущих нуля), а второй - адрес любого из его корней. Он свяжется с корнем и получит от него полное определение мира, если он в сети и доступен.

Как только вы «облетели» свою луну, попробуйте zerotier-cli listpeers. Вы должны увидеть созданные вами корни в списке MOONвместо LEAF. Теперь они будут использоваться в качестве альтернативных корневых серверов.

Официальная документация.

Все это можно уестить в 4 строки.

/sbin/zerotier-idtool initmoon /var/lib/zerotier-one/identity.public >>moon.json
/sbin/zerotier-idtool genmoon moon.json

mkdir /var/lib/zerotier-one/moon.d
cp 000000eb9xxxxe6d.moon /var/lib/zerotier-one/moon.d/

/sbin/zerotier-cli orbit eb9xxxxe6d eb9xxxxe6d