Организация защищенных виртуальных сетей с помощью OpenZiti. Часть 1
Система управления распределенными сетевыми ресурсами с широкими возможностями кастомизации
Пополню коллекцию систем для организации защищенных виртуальных сетей еще одним, вероятно, самым мощным opensource решением - OpenZiti.
В настройке OpenZiti значительно сложнее, чем рассмотренные ранее ZeroTier или Nebula ввиду обширных возможностей контроля и управления сетями, хостами, маршрутами, политиками доступа и т.д. Именно поэтому я выделил под эту тему несколько запланированных публикаций, дабы на примере некоторых несложных топологий разобрать на практике варианты организации взаимодействия между распределенными машинами.
💎 Ключевые особенности
🔻 Zero Trust сегментация сети
Каждый клиент в сети имеет свой идентификатор и сертификат доступа. Сертификаты используются для установления безопасных каналов связи, а также для прохождения этапов аутентификации и авторизации. Каждая попытка доступа начинается с проверки наличия прав на подключение к тому или иному ресурсу, что позволяет изолировать клиентские приложения и сервисы и настраивать политики индивидуально. Связь между компонентами сети OpenZiti также подлежит обязательной авторизации.
🔻 End-to-End шифрование
Каждое соединение зашифровано даже в случае, если ваши приложения или сервисы не использую защищенные протоколы сами по себе.
🔻 Гибкая настройка режимов доступа
- Прямой доступ приложения к приложению
- Доступ от хоста к хосту
- Доступ к приватной сети
🔻 Интеграция с внешними провайдерами доступа.
🔻 Сбор метрик системы, включая Prometheus и Grafana.
🔻 Для организации подключения можно использовать как готовые приложения под большинство систем, так называемые Tunnelers, так и SDK под популярные языки для интеграции защищенного взаимодействия прямо в собственное приложение.
🔎 Основные компоненты
Рис. 1 - Пример сети из официальной документации
- Контроллер (Controller) - центральный пункт управления идентификационными данными пользователей, устройствами и узлами, отвечает за аутентификацию и авторизацию каждого соединения в сети.
- Маршрутизаторы (Routers) - точки входа в сеть для клиентских подключений. Отвечают за передачу трафика между узлами, включают в себя функцию мониторинга для выбора оптимальной маршрутизации трафика.
- Конечные клиенты (Edge clients) - программы на базе Ziti SDK (готовые клиенты или пакеты для собственной разработки), обеспечивающие безопасное подключение к сети.
- BrowZer - набор дополнительных компонентов для доступа к защищенным ресурсам через веб-браузер без необходимости устанавливать специализированное клиентское приложение.
📚 QuickStart версия для ознакомления с работой платформы
- Для быстрой настройки и запуска всех компонентов системы - QuickStarts.
- Для детальной настройки каждого компоненты системы - отдельный набор гайдов.
Документация очень проработанная, поэтому сразу начну с варианта установки с помощью Docker.
➡️ Скачиваем compose и .env файлы с официального сайта
1
2
curl -so docker-compose.yaml https://get.openziti.io/dock/docker-compose.yml
curl -so .env https://get.openziti.io/dock/.env
➡️ В конфигурационном файле .env можно указать пароль администратора (если оставить пустым, то он будет сгенерирован автоматически при первом запуске). Все остальные параметры по умолчанию.
1
2
3
4
5
6
7
8
9
10
11
ZITI_IMAGE=openziti/quickstart
ZITI_VERSION=latest
ZITI_USER=admin
ZITI_PWD=admin
ZITI_INTERFACE=0.0.0.0
ZITI_CTRL_NAME=ziti-controller
ZITI_CTRL_EDGE_ADVERTISED_ADDRESS=ziti-edge-controller
ZITI_CTRL_ADVERTISED_ADDRESS=ziti-controller
➡️ Запускаем весь набор компонентов, включая ZAC (Ziti Admin Console) - веб панель администратора.
1
docker compose up -d
➡️ По адресу машины, где было развернуто решение, на порту 8443 будет доступна консоль.
- В консоли администратора в разделе
Identitiesсоздаем новый идентификатор специально под рабочую машину, с которой хотим подключиться. Забираем сформированныйфайл JWT.
- На клиентскую машину ставим приложение-клиента (например, под Windows) для проверки подключения.
ADD IDENTITY-With JWT- Подгружаем
JWT файли проверяем подключение нового устройства. - Аналогично поступаем и с другими клиентскими машинами, чтобы связать устройства в сеть через единый контроллер и дефолтные роутеры.





