
Набор протоколов маршрутизации на языке Rust, реализующий BGP, OSPF, IS-IS, RIP и VRRP с конфигурацией на основе YANG, автоматизацией через gNMI/gRPC и встроенным фаззингом для крупномасштабных, управляемых автоматизацией сетей.
Holo — это набор протоколов маршрутизации, разработанный для поддержки крупномасштабных сетей, управляемых автоматизацией.
Описание того, что такое протокол маршрутизации, можно найти на этой странице Википедии.
Основная цель Holo — создать надёжную, простую в сопровождении и расширяемую кодовую базу. С учётом постоянно растущей сложности протоколов маршрутизации и их расширений крайне важно иметь реализации протоколов маршрутизации, построенные на прочном фундаменте. Для этого кодовая база Holo ставит во главу угла простоту, модульность и тщательную документацию. Благодаря строгости компилятора Rust и обширным модульным тестам ожидается, что большинство регрессий будет выявлено на ранних этапах цикла разработки новых функций. Подробнее см. на странице Архитектура.
Holoo был разработан специально для крупномасштабных сетей, управляемых автоматизацией, которые требуют программируемой настройки и мониторинга с использованием структурированных и смоделированных данных. Holo нативно реализует стандартные модули YANG от IETF и поддерживает несколько интерфейсов управления, включая нативные gRPC и gNMI. Кроме того, Holo имеет автономный CLI, который динамически формирует команды из модулей YANG и взаимодействует с демоном Holo через gRPC.
Изменения конфигурации обрабатываются как транзакции, что гарантирует применение либо всех изменений, либо ни одного. Эта функция значительно упрощает сетевую автоматизацию, поскольку устраняет необходимость в восстановлении после ошибок в управляющих приложениях. Holo также поддерживает сетевые транзакции, охватывающие несколько сетевых устройств. Дополнительные возможности сетевой автоматизации включают поддержку подтверждённых фиксаций (confirmed commits) и откат конфигурации.
Благодаря тому, что Holo написан на языке с безопасной работой с памятью, он защищён от широкого спектра ошибок, связанных с памятью, и уязвимостей безопасности. Помимо гарантий безопасности, предоставляемых Rust, демон Holo также сбрасывает привилегии при запуске. Для определённых операций, таких как привязка сокетов, используются возможности Linux, чтобы получить минимально необходимые разрешения на минимальное время.
Holo также обеспечивает надёжную защиту от наиболее распространённого вектора атак в стеках протоколов маршрутизации: атак типа «отказ в обслуживании» (DoS) с помощью вредоносных входных пакетов. Входящие пакеты декодируются в изолированных контролируемых асинхронных задачах, что позволяет реализациям протоколов корректно восстанавливаться после паник, например, игнорируя повреждённые пакеты или закрывая только затронутый TCP-поток, не ставя под угрозу стабильность всего демона. Кроме того, благодаря модульной конструкции Holo и встроенной поддержке фазинга на основе покрытия, ожидается, что большинство ошибок разбора будет обнаружено и устранено в процессе разработки.
Некоторые протоколы, такие как OSPF и RIP, имеют разные версии, которые широко развёрнуты, обычно одна для IPv4, а другая для IPv6. Holo использует обобщённые типы (generics) Rust для создания версионно-независимых реализаций протоколов, где большая часть кода является общей для разных версий протокола. Такой подход снижает затраты на сопровождение этих протоколов и упрощает внедрение новых функций, которые приносят пользу всем версиям протокола.
Holo активно использует асинхронные операции и полагается на среду выполнения Tokio для планирования задач и их выполнения в пуле потоков. Для достижения лучшей производительности как операции ввода-вывода, так и алгоритмы с интенсивными вычислениями выносятся в отдельные задачи, максимизируя использование всех доступных ядер ЦП. Поддержка кода, не зависящего от среды выполнения, запланирована на будущее, как только необходимые абстракции будут стандартизированы командой разработчиков языка Rust.
Holo генерирует сообщения журнала, содержащие структурированные данные, которые могут быть представлены в различных форматах, таких как JSON, текст и т. д. Поскольку логирование осуществляется через фасад tracing, для удовлетворения различных потребностей пользователей могут использоваться различные подписчики tracing. Например, логирование может быть направлено в файл, journald, централизованный коллектор OpenTelemetry или любую комбинацию этих вариантов с потенциально разными уровнями логирования.
Holo предоставляет функциональность записи и воспроизведения, что позволяет легко воспроизвести любую ошибку, о которой сообщил пользователь. Демон Holo можно настроить на запись полного жизненного цикла экземпляра протокола в файл. Этот файл затем можно воспроизвести на другой машине, воспроизводя ту же последовательность событий. В то время как сеанс записи может длиться часы или дни, процесс воспроизведения должен занять всего несколько секунд. Это возможно благодаря модульной архитектуре Holo, где все операции, связанные со временем и вводом-выводом, выполняются в отдельных задачах и абстрагируются как сообщения событий.
Подробные инструкции по установке см. в файле INSTALL.md.
В настоящее время Holo совместим только с операционными системами Linux. Поддержка WebAssembly запланирована на будущее.
Самый простой способ начать использовать Holo — использовать предварительно собранные Docker-контейнеры в сочетании с программным обеспечением containerlab. Различные предварительно настроенные сетевые топологии можно найти по этой ссылке. Эти топологии можно развернуть одной командой, что позволяет тестировать Holo в различных сетевых конфигурациях, включая тестирование интероперабельности с другими реализациями.
Кроме того, Holo можно использовать везде, где требуется стек маршрутизации, например, в программных маршрутизаторах, при условии, что набор функций соответствует вашим конкретным потребностям.
Holo поддерживает следующие интернет-стандарты:
Результаты тестирования на соответствие, проведённого с помощью Ixia IxANVL RFC Compliance Tester, доступны здесь.
Этот проект финансируется через NGI Zero Core, фонд, учреждённый NLnet при финансовой поддержке программы Next Generation Internet Европейской комиссии. Узнайте больше на странице проекта NLnet.
Этот проект лицензирован в соответствии с [лицензией MIT].
Мы приветствуем любой вклад, от сообщений об ошибках до запросов на включение изменений. Пожалуйста, ознакомьтесь с нашим списком пожеланий проекта для идей, где можно помочь.
Если явно не указано иное, любой вклад, намеренно предоставленный для включения в Holo вами, будет лицензирован как MIT, без каких-либо дополнительных условий.
| Модуль | Конфигурация | Состояние | RPC | Уведомления | Всего |
|---|
| ietf-bfd-ip-mh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd-ip-sh@2022-09-22 | 100.00% | 100.00% | - | 100.00% | 100.00% |
| ietf-bfd@2022-09-22 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-bgp-policy@2023-07-05 | 100.00% | - | - | - | 100.00% |
| ietf-bgp@2023-07-05 | 32.38% | 85.95% | - | - | 60.40% |
| ietf-bier@2023-09-12 | 100.00% | - | - | 0.00% | 72.50% |
| ietf-if-extensions@2023-01-26 | 100.00% | 0.00% | - | - | 50.00% |
| ietf-if-vlan-encapsulation@2023-01-26 | 42.86% | - | - | - | 42.86% |
| ietf-igmp-mld@2019-11-01 | 84.62% | 100.00% | - | - | 95.83% |
| ietf-interfaces@2018-02-20 | 100.00% | 0.00% | - | - | 22.22% |
| ietf-ip@2018-02-22 | 52.17% | 0.00% | - | - | 40.00% |
| ietf-ipv4-unicast-routing@2018-03-13 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-ipv6-unicast-routing@2018-03-13 | 40.62% | 100.00% | - | - | 45.71% |
| ietf-isis-flex-algo@2026-06-26 | 0.00% | 100.00% | - | 0.00% | 74.00% |
| ietf-isis-link-attr@2026-06-26 | 81.82% | 78.43% | - | - | 78.76% |
| ietf-isis-msd@2024-09-02 | - | 100.00% | - | - | 100.00% |
| ietf-isis-sr-mpls@2025-12-09 | 15.38% | 57.27% | - | - | 52.85% |
| ietf-isis@2022-10-19 | 93.62% | 80.09% | 100.00% | 100.00% | 86.77% |
| ietf-key-chain@2017-06-15 | 100.00% | 100.00% | - | - | 100.00% |
| ietf-mpls-ldp@2022-03-14 | 86.96% | 92.31% | 100.00% | 100.00% | 92.38% |
| ietf-mpls@2020-12-18 | 0.00% | 57.14% | - | - | 35.29% |
| ietf-ospf-anycast-flag@2026-05-19 | 100.00% | - | - | - | 100.00% |
| ietf-ospf-sr-mpls@2025-12-09 | 21.43% | 51.36% | - | - | 49.82% |
| ietf-ospf@2022-10-19 | 95.70% | 85.04% | 100.00% | 58.06% | 83.89% |
| ietf-ospfv3-extended-lsa@2024-06-07 | 50.00% | 85.28% | - | - | 84.85% |
| ietf-rip@2020-02-20 | 27.91% | 93.33% | 100.00% | - | 55.41% |
| ietf-routing-policy@2021-10-11 | 100.00% | 0.00% | - | - | 98.11% |
| ietf-routing@2018-03-13 | 100.00% | 85.71% | - | - | 92.31% |
| ietf-segment-routing-mpls@2021-05-26 | 62.50% | 0.00% | - | 23.53% | 32.76% |
| ietf-segment-routing@2021-05-26 | 100.00% | - | - | - | 100.00% |
| ietf-system@2014-08-06 | 26.67% | 60.00% | 0.00% | - | 38.24% |
| ietf-vrrp@2018-03-13 | 53.19% | 80.00% | - | 66.67% | 66.35% |