Опубликован выпуск проекта Nebula 1.9, предлагающего инструментарий для построения защищённых оверлейных сетей, позволяющих объединить территориально разделённые хосты в отдельную изолированную сеть, работающую поверх глобальной сети. Проект предназначен для создания своих собственных оверлейных сетей для любых нужд, например, для объединения корпоративных компьютеров в разных офисах, серверов в разных ЦОД или виртуальных окружений у разных облачных провайдеров. Код написан на языке Go и распространяется под лицензией MIT. Проект основан компанией Slack, развивающей одноимённый корпоративный мессенджер. Поддерживается работа в Linux, FreeBSD, macOS, Windows, iOS и Android.
Узлы в сети Nebula взаимодействуют друг с другом напрямую в режиме P2P – по мере появления необходимости передачи данных между узлами динамически создаются прямые VPN-соединения. Идентичность каждого хоста в сети подтверждается цифровым сертификатом, а подключение к сети требует прохождения аутентификации – каждый пользователь получает сертификат, подтверждающий IP-адрес в сети Nebula, имя и членство в группах хостов. Сертификаты подписываются внутренним удостоверяющим центром, развёртываемым создателем каждой отдельной сети на своих мощностях и применяемым для заверения полномочий хостов, имеющих право подключения к конкретной оверлейной сети, привязанной к удостоверяющему центру.
Для создания аутентифицированного защищённого канала связи в Nebula применяется собственный туннельный протокол, основанный на протоколе обмена ключами Диффи—Хеллмана и шифре AES-256-GCM. Реализация протокола базируется на готовых и проверенных примитивах, предоставляемых фреймворком Noise, который также применяется в таких проектах, как WireGuard, Lightning и I2P. Утверждается, что проект прошёл независимый аудит безопасности.
Для обнаружения других узлов и координации подключении к сети создаются специальные узлы “lighthouse”, глобальные IP-адреса которых фиксированы и известны участникам сети. У узлов-участников нет привязки к внешнему IP-адресу, они идентифицируются по сертификатам. Владельцы хостов самостоятельно не могут внести изменения в подписанные сертификаты и в отличие от традиционных IP-сетей не могут притвориться другим хостом простой сменой IP-адреса. При создании туннеля идентичность хоста подтверждается индивидуальным закрытым ключом.
Создаваемой сети выделяется определённый диапазон интранет адресов (например, 192.168.10.0/24) и осуществляется связывание внутренних адресов с сертификатами хостов. Предоставляются различные механизмы для обхода трансляторов адресов (NAT) и межсетевых экранов. Возможна организации маршрутизации через оверлейную сеть трафика сторонних хостов, не входящих в сеть Nebula (unsafe route). Из участников оверлейной сети могут формироваться группы, например, для разделения серверов и рабочих станций, к которым применяются отдельные правила фильтрации трафика.
Поддерживается создание межсетевых экранов для разделения доступа и фильтрации трафика между узлами в оверлейной сети Nebula. Для фильтрации применяются ACL с привязкой тегов. Каждый хост в сети может определять собственные правила фильтрации по хостам, группам, протоколам и сетевым портам. При этом хосты фильтруются не по IP-адресам, а по заверенным цифровой подписью идентификаторам хоста, которые невозможно подделать без компрометации удостоверяющего центра, координирующего работу сети.
В новом выпуске:
- Добавлена новая настройка default_local_cidr_any, которая меняет поведение при обработки подсетей “local_ip” в правилах межсетевого экрана для предотвращения необоснованного разрешения трафика к хостам, перечисленным в блоке unsafe_routes. В версии 1.9 настройка выставлена в значение “true”, но в следующем выпуске 1.10 будет заменена на значение “fasle”, что приведёт к учёту локальных подсетей при применении правил межсетевого экрана к хостам, доступным через небезопасные маршруты (для открытия доступа к таким хостам потребуется обязательное указание local_cidr).
- Предоставлен официальный образ для системы Docker, позволяющий быстро развернуть оверлейную сеть на базе Nebula или узел для неё.
- Добавлены экспериментальные сборки для архитектуры Loong64.
- Реализован сервисный скрипт для системы инициализации OpenRC.
- В фоновый процесс SSH добавлена поддержка аутентификации по сертификатам, заверенным удостоверяющим центром (sshd.trusted_cas). Реализована возможность встраивания хостовых ключей в блок настроек sshd.host_key.
- Обеспечена поддержка перезагрузки настроек “tun.unsafe_routes”.
- Удалена поддержка устаревшей настройки local_range, вместо которой следует использовать preferred_ranges.
- Для сборки теперь требуется инструментарий go 1.22. Минимальные требования к версиям Windows повышены до Windows 10 и Windows Server 2016.