Этот документ написан для аудитории разработчиков программного обеспечения. Информацию об использовании ZeroTier см. на веб-сайте, сайте документации и дискуссионном форуме.
ZeroTier — это интеллектуальный программируемый коммутатор Ethernet для планеты Земля. Это позволяет всем сетевым устройствам, виртуальным машинам, контейнерам и приложениям взаимодействовать так, как если бы они все находились в одном физическом центре обработки данных или облачном регионе.
Это достигается путем объединения криптографически адресованной и безопасной одноранговой сети (называемой VL1) с уровнем эмуляции Ethernet, чем-то похожим на VXLAN (называемым VL2). Наш уровень виртуализации Ethernet VL2 включает расширенные функции SDN корпоративного уровня, такие как правила точного контроля доступа для микросегментации сети и мониторинга безопасности.
Весь трафик ZeroTier шифруется сквозным шифрованием с использованием секретных ключей, которыми управляете только вы. Большинство потоков трафика одноранговые, хотя мы предлагаем бесплатную (но медленную) ретрансляцию для пользователей, которые не могут установить одноранговые соединения.
Цели и принципы проектирования ZeroTier, среди прочего, вдохновлены оригинальной статьей Google BeyondCorp и форумом Jericho с его понятием «депериметризация».
Посетите сайт ZeroTier для получения дополнительной информации и готовых двоичных пакетов. Приложения для Android и iOS доступны бесплатно в магазинах приложений Google Play и Apple.
ZeroTier лицензируется по BSL версии 1.1. Подробности см. в файле LICENSE.txt и на странице цен ZeroTier. ZeroTier можно бесплатно использовать внутри предприятий и академических учреждений, а также в некоммерческих целях. Некоторые виды коммерческого использования, такие как создание приложений и устройств с закрытым исходным кодом на основе ZeroTier или предложение сетевых контроллеров ZeroTier и управления сетью в качестве услуги SaaS, требуют коммерческой лицензии.
Небольшое количество стороннего кода также включено в ZeroTier и не подпадает под действие нашей лицензии BSL. См. AUTHORS.md для получения списка стороннего кода, где он включен, и лицензий, которые к нему применяются. Весь сторонний код в ZeroTier свободно лицензируется (MIT, BSD, Apache, общедоступное достояние и т. д.).
Все в мире ZeroTier контролируется двумя типами идентификаторов: 40-битными/10-значными адресами ZeroTier и 64-битными/16-значными сетевыми идентификаторами . Эти идентификаторы легко отличить по длине. Адрес ZeroTier идентифицирует узел или «устройство» (ноутбук, телефон, сервер, виртуальную машину, приложение и т. д.), а идентификатор сети идентифицирует виртуальную сеть Ethernet, к которой могут присоединиться устройства.
Адреса ZeroTier можно рассматривать как номера портов огромного интеллектуального Ethernet-коммутатора масштаба всей планеты, поддерживающего VLAN. Сетевые идентификаторы — это идентификаторы VLAN, которым могут быть назначены эти порты. Один порт может быть назначен более чем одной VLAN.
Адрес ZeroTier выглядит как 8056c2e21c
, а идентификатор сети — как 8056c2e21c000001
. Сетевые идентификаторы состоят из адреса ZeroTier основного контроллера этой сети и произвольного 24-битного идентификатора, который идентифицирует сеть на этом контроллере. Сетевые контроллеры примерно аналогичны контроллерам SDN в протоколах SDN, таких как OpenFlow, хотя, как и в случае с аналогией между VXLAN и VL2, это не следует понимать как подразумевающее, что протоколы или конструкция одинаковы. Вы можете использовать наши удобные и недорогие размещенные контроллеры SaaS на сайте my.zerotier.com или запустить свой собственный контроллер, если вы не против возиться с файлами конфигурации JSON или писать для этого сценарии.
Базовый путь содержит основную точку входа службы ZeroTier One ( one.cpp
), код самотестирования, файлы makefile и т. д.
artwork/
: значки, логотипы и т. д.attic/
: старый материал и экспериментальный код, который мы хотим сохранить для справки.controller/
: эталонная реализация сетевого контроллера, которая создается и включается по умолчанию в целевые объекты сборки настольных компьютеров и серверов.debian/
: файлы для сборки пакетов Debian в Linux.doc/
: страницы руководства и другая документация.ext/
: сторонние библиотеки, двоичные файлы, которые мы поставляем для удобства на некоторых платформах (Mac и Windows), а также файлы поддержки установки.include/
: включаемые файлы для ядра ZeroTier.java/
: оболочка JNI, используемая с нашим мобильным приложением для Android. (Все приложение для Android не является открытым исходным кодом, но может быть сделано так в будущем.)node/
: ядро виртуального Ethernet-коммутатора ZeroTier, которое полностью отделено от остального кода и может быть построено как автономная, независимая от ОС библиотека. Примечание для разработчиков: не используйте здесь функции C++11, так как мы хотим, чтобы это было основано на старых встроенных платформах, в которых отсутствует поддержка C++11. C++11 можно использовать где угодно.osdep/
: код для поддержки и интеграции с операционными системами, включая специфичные для платформы элементы, созданные только для определенных целей.rule-compiler/
: компилятор языка правил JavaScript для определения правил сетевого уровня.service/
: сервис ZeroTier One, который охватывает ядро ZeroTier и обеспечивает VPN-подключение к виртуальным сетям для настольных компьютеров, ноутбуков, серверов, виртуальных машин и контейнеров.windows/
: файлы решения Visual Studio, код службы Windows и пользовательский интерфейс приложения панели задач Windows.zeroidc/
: реализация OIDC, используемая службой ZeroTier для входа в сети с поддержкой единого входа. (Эта часть написана на Rust, и в будущем в этом репозитории появятся новые версии Rust.) Пожалуйста, делайте запросы на вытягивание из ветки dev
.
Релизы выполняются путем объединения dev
с main
, а затем тегирования и выполнения сборок.
Для сборки на Mac и Linux просто введите make
. Во FreeBSD и OpenBSD требуется gmake
(GNU make), который можно установить из пакетов или портов. Для Windows есть решение Visual Studio в windows/
.
gmake
для сборки.binutils
. Введите pkg install binutils
для установки./dev/tap0
до /dev/tap3
).gmake
для сборки. Ввод команды make selftest
создаст двоичный файл нулевого уровня-самотестирования , который модульно тестирует различные внутренние компоненты и сообщает о некоторых аспектах среды сборки. Хорошая идея попробовать это на новых платформах или архитектурах.
Запуск нулевого уровня с опцией -h
покажет помощь.
В Linux и BSD, если вы собирали из исходного кода, вы можете запустить службу с помощью:
sudo ./zerotier-one -d
В большинстве дистрибутивов, macOS и Windows установщик запустит службу и настроит ее запуск при загрузке.
Домашняя папка для вашей системы будет создана автоматически.
Служба управляется через JSON API, который по умолчанию доступен по адресу 127.0.0.1:9993
. Он также прослушивает 0.0.0.0:9993
, который можно использовать только в том случае, если allowManagementFrom
правильно настроен в local.conf
. Мы включили утилиту командной строки Zerotier-cli, позволяющую выполнять вызовы API для стандартных операций, таких как присоединение к сети и выход из нее. Файл authtoken.secret в домашней папке содержит секретный токен для доступа к этому API. См. документацию по API service/README.md.
Вот где находятся домашние папки (по умолчанию) в каждой ОС:
/var/lib/zerotier-one
/var/db/zerotier-one
/Library/Application Support/ZeroTier/One
ProgramDataZeroTierOne
(это значение по умолчанию. Базовая папка «общие данные приложения» может отличаться, если Windows установлена с нестандартным назначением буквы диска или макетом.)Для большинства пользователей это просто работает.
Если вы используете локальный системный брандмауэр, мы рекомендуем добавить правила, разрешающие нулевой уровень. Если вы установили двоичные файлы для Windows, это должно быть сделано автоматически. На других платформах может потребоваться ручное редактирование правил локального брандмауэра в зависимости от вашей конфигурации.
Дополнительную информацию см. на сайте документации.
Брандмауэр Mac можно найти в разделе «Безопасность» в Системных настройках. Linux имеет множество систем и инструментов настройки брандмауэра.
В CentOS проверьте /etc/sysconfig/iptables
на наличие правил IPTables. Для получения информации о других дистрибутивах обратитесь к документации вашего дистрибутива. Вам также придется проверить пользовательский интерфейс или документацию коммерческих приложений брандмауэра сторонних производителей, таких как Little Snitch (Mac), McAfee Firewall Enterprise (Windows) и т. д., если вы используете какое-либо из них. В некоторых корпоративных средах может использоваться централизованно управляемое программное обеспечение брандмауэра, поэтому вам также может потребоваться обратиться в ИТ-отдел.
Одноранговые узлы ZeroTier One будут автоматически определять местонахождение друг друга и обмениваться данными напрямую через локальную проводную локальную сеть, если входящий порт UDP 9993 открыт . Если этот порт фильтруется, они не смогут видеть пакеты объявлений LAN друг друга. Если вы испытываете низкую производительность между устройствами в одной физической сети, проверьте настройки их брандмауэра. Без автоматического определения местоположения в локальной сети одноранговые узлы должны пытаться пройти NAT по «петле», что иногда терпит неудачу и в любом случае требует, чтобы каждый пакет дважды проходил через внешний маршрутизатор.
Пользователи, находящиеся за определенными типами межсетевых экранов и «симметричными» устройствами NAT, могут вообще не иметь возможности напрямую подключаться к внешним узлам. ZeroTier имеет ограниченную поддержку прогнозирования портов и пытается пройти через симметричные NAT, но это не всегда работает. Если соединение P2P прервется, вы будете отбрасывать UDP-пакеты от наших серверов ретрансляции, что приведет к снижению производительности. Некоторые маршрутизаторы NAT имеют настраиваемый режим NAT, и установка для него значения «полный конус» устранит эту проблему. Если вы сделаете это, вы также сможете увидеть волшебное улучшение для таких вещей, как телефоны VoIP, Skype, BitTorrent, WebRTC, некоторые игры и т. д., поскольку все они используют методы обхода NAT, аналогичные нашим.
Если межсетевой экран между вами и Интернетом блокирует UDP-трафик ZeroTier, вы вернетесь к TCP-туннелированию последней инстанции к корневым серверам через порт 443 (олицетворение https). Это будет работать практически везде, но очень медленно по сравнению с UDP или прямым одноранговым соединением.
Дополнительную помощь можно найти в нашей базе знаний.
Метрики Prometheus доступны в конечной точке API /metrics
. Эта конечная точка защищена ключом API, хранящимся в metricstoken.secret
чтобы предотвратить нежелательную утечку информации. Информация, которую можно получить из метрик, включает присоединенные сети и одноранговые узлы, с которыми общается ваш экземпляр.
Контроль доступа осуществляется через сам интерфейс управления ZeroTier и metricstoken.secret
. Его можно отправить как токен аутентификации носителя через поле HTTP-заголовка X-ZT1-Auth
или добавить к URL-адресу как ?auth=<token>
. Посмотреть текущие метрики можно через cURL
с помощью следующей команды:
// Linux
curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics
// macOS
curl -H "X-ZT1-Auth: $(sudo cat /Library/Application Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics
// Windows PowerShell (Admin)
Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:ProgramDataZeroTierOnemetricstoken.secret)"; } -Uri http://localhost:9993/metrics
Чтобы настроить задание очистки в Prometheus на компьютере, на котором работает ZeroTier, добавьте это в scrape_config
Prometheus:
- job_name: zerotier-one
honor_labels: true
scrape_interval: 15s
metrics_path: /metrics
static_configs:
- targets:
- 127.0.0.1:9993
labels:
group: zerotier-one
node_id: $YOUR_10_CHARACTER_NODE_ID
authorization:
credentials: $YOUR_METRICS_TOKEN_SECRET
Если ни один из этих методов нежелателен, вероятно, можно распространять метрики через Prometheus Proxy или какой-либо другой инструмент. Примечание. Мы не проверяли это внутри компании, но, вероятно, будет работать с правильной конфигурацией.
Метрики также доступны на диске в рабочем каталоге ZeroTier:
// Linux /var/lib/zerotier-one/metrics.prom
// macOS/Library/Application Support/ZeroTier/One/metrics.prom
//Windows C:ProgramDataZeroTierOnemetrics.prom
Имя метрики | Этикетки | Тип метрики | Описание |
---|---|---|---|
zt_packet | тип_пакета, направление | Прилавок | Количество типов пакетов ZeroTier |
zt_packet_error | тип_ошибки, направление | Прилавок | Ошибки пакетов ZeroTier |
zt_data | протокол, направление | Прилавок | количество байтов, отправленных или полученных ZeroTier |
zt_num_networks | Измерять | количество сетей, к которым подключен этот экземпляр | |
zt_network_multicast_groups_subscribed | network_id | Измерять | количество групп многоадресной рассылки, на которые подписаны сети |
zt_network_packets | network_id, направление | Прилавок | количество входящих/исходящих пакетов на сеть |
zt_peer_latency | node_id | Гистограмма | задержка однорангового узла (мс) |
zt_peer_path_count | node_id, статус | Измерять | количество путей к пиру |
zt_peer_packets | node_id, направление | Прилавок | количество пакетов к/от партнера |
zt_peer_packet_errors | node_id | Прилавок | количество ошибок входящих пакетов от партнера |
Если есть другие показатели, которые вы хотели бы отслеживать, спросите нас об этом в проблеме или отправьте нам запрос на включение!
Существует статический файловый сервер http, подходящий для размещения одностраничных приложений по адресу http://localhost:9993/app/.
Используйте zerotier-cli info -j
, чтобы найти домашний каталог службы нулевого уровня.
cd $ZT_HOME
sudo mkdir -p app/app1
sudo mkdir -p app/appB
echo ' <html><meta charset=utf-8><title>appA</title><body><h1>hello world A ' | sudo tee app/appA/index.html
echo ' <html><meta charset=utf-8><title>app2</title><body><h1>hello world 2 ' | sudo tee app/app2/index.html
curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2
Затем посетите http://localhost:9993/app/app1/ и http://localhost:9993/app/appB/.
Запросы к путям не существуют, возвращают корень приложения index.html, как это принято для SPA. Если хотите, вы можете написать JavaScript, который взаимодействует с API службы или контроллера.