
Holo는 고용량 및 자동화 중심 네트워크를 지원하도록 설계된 라우팅 프로토콜 제품군입니다.
라우팅 프로토콜에 대한 설명은 이
위키피디아 페이지를 참조하십시오.
특징
단순성과 정확성에 중점
Holo의 주요 목표는 안정적이고 유지보수가 쉬우며 확장 가능한 코드베이스를 만드는 것입니다.
라우팅 프로토콜과 그 확장의 복잡성이 점점 증가함에 따라, 견고한 기반 위에 구축된 라우팅 프로토콜 구현을 갖추는 것이 중요합니다.
이를 위해 Holo의 코드베이스는 단순성, 모듈성 및 철저한 문서화를 우선시합니다.
Rust 컴파일러의 엄격함과 광범위한 단위 테스트 덕분에, 대부분의 회귀는 새로운 기능의 개발 주기 초기에 발견될 것으로 예상됩니다.
자세한 내용은 아키텍처 페이지를 참조하십시오.
자동화 준비
Holo는 구조화되고 모델링된 데이터를 사용하여 프로그래밍 가능한 구성 및 모니터링이 필요한 고용량, 자동화 중심 네트워크를 위해 특별히 개발되었습니다.
Holo는 IETF의 표준 YANG 모듈을 기본적으로 구현하며, 기본 gRPC 및
gNMI를 포함한 여러 관리 인터페이스를 지원합니다.
또한 Holo는 YANG 모듈에서 동적으로 명령을 렌더링하고 gRPC를 통해 Holo 데몬과 통신하는 독립형 CLI를 제공합니다.
구성 변경 사항은 트랜잭션으로 처리되어 모든 변경 사항이 적용되거나 전혀 적용되지 않도록 보장합니다.
이 기능은 관리 애플리케이션에서 오류 복구가 필요 없으므로 네트워크 자동화의 중요한 촉진자입니다.
Holo는 또한 여러 네트워크 장치를 포함하는 네트워크 전체 트랜잭션을 지원합니다.
추가 네트워크 자동화 기능에는 확인된 커밋 및 구성 롤백 지원이 포함됩니다.
보안
메모리 안전 언어로 작성되었기 때문에 Holo는 다양한 메모리 관련 버그 및 보안 취약성에 면역입니다.
Rust가 제공하는 안전 보장 외에도 Holo 데몬은 시작 시 권한을 낮춥니다.
특정 작업(예: 소켓 바인딩)의 경우 Linux
capabilities를 사용하여 최소한의 시간 동안 필요한 최소 권한을 얻습니다.
Holo는 또한 라우팅 프로토콜 스택에서 가장 일반적인 공격 벡터인 악의적인 패킷 입력을 통한 서비스 거부(DoS) 공격에 대한 강력한 보호 기능을 제공합니다.
들어오는 패킷은 격리되고 감독된 비동기 작업에서 디코딩되어 프로토콜 구현이 패닉에서 우아하게 복구할 수 있도록 합니다.
예를 들어, 잘못된 형식의 패킷을 무시하거나 영향을 받은 TCP 스트림만 닫는 방식으로, 전체 데몬의 안정성을 손상시키지 않습니다.
또한 Holo의 모듈식 설계와 커버리지 가이드 퍼징에 대한 내장 지원 덕분에 대부분의 파싱 버그는 개발 중에 발견되고 해결될 것으로 예상됩니다.
통합 프로토콜 구현
OSPF 및 RIP와 같은 일부 프로토콜은 일반적으로 IPv4 및 IPv6용으로 각각 하나씩 광범위하게 배포된 다른 버전을 가지고 있습니다.
Holo는 Rust의 제네릭을 활용하여 버전에 구애받지 않는 프로토콜 구현을 제공하며, 대부분의 코드는 다른 프로토콜 버전에서 공유됩니다.
이 접근 방식은 이러한 프로토콜의 유지 관리 비용을 줄이고 모든 프로토콜 버전에 혜택을 주는 새로운 기능을 제공하는 것을 용이하게 합니다.
병렬 처리
Holo는 비동기 작업을 광범위하게 사용하며 Tokio 런타임에 의존하여 작업을 예약하고 스레드 풀에서 실행합니다.
더 나은 성능을 달성하기 위해 I/O 요청과 CPU 집약적 알고리즘 모두 별도의 작업으로 오프로드되어 사용 가능한 모든 CPU 코어의 활용을 극대화합니다.
런타임에 구애받지 않는 코드에 대한 지원은 Rust 언어 팀이 필요한 추상화를 표준화한 후에 계획되어 있습니다.
구조화된 로깅
Holo는 JSON, 텍스트 등 다양한 형식으로 제공될 수 있는 구조화된 데이터를 포함하는 로그 메시지를 생성합니다.
로깅은 tracing 퍼사드를 통해 수행되므로 다양한 사용자 요구를 충족하기 위해 다양한 tracing 구독자를 사용할 수 있습니다.
예를 들어, 로깅은 파일, journald, 중앙 집중식 OpenTelemetry 수집기로 전달되거나 잠재적으로 다양한 로깅 수준을 가진 이러한 옵션의 조합으로 전달될 수 있습니다.
재현 가능한 버그
Holo는 기록 및 재생 기능을 제공하여 사용자가 보고한 모든 버그를 쉽게 재현할 수 있습니다.
Holo 데몬은 프로토콜 인스턴스의 전체 수명을 파일에 기록하도록 설정할 수 있습니다.
그 파일은 다른 머신에서 재생되어 동일한 이벤트 시퀀스를 재현할 수 있습니다.
기록 세션은 몇 시간 또는 며칠 동안 지속될 수 있지만 재생 프로세스는 몇 초 밖에 걸리지 않습니다.
이는 모든 시간 관련 및 I/O 작업이 별도의 작업에서 수행되고 이벤트 메시지로 추상화되는 Holo의 모듈식 아키텍처 덕분에 가능합니다.
설치
자세한 설치 지침은 INSTALL.md 파일을 참조하십시오.
지원 플랫폼
현재 Holo는 Linux 운영 체제와만 호환됩니다.
WebAssembly 지원은 향후 계획되어 있습니다.
시작하기
Holo를 사용하는 가장 쉬운 방법은 미리 빌드된 Docker 컨테이너를 containerlab 소프트웨어와 함께 사용하는 것입니다.
사전 구성된 다양한 네트워크 토폴로지는 이 링크에서 확인할 수 있습니다.
이러한 토폴로지는 단일 명령으로 배포할 수 있어 다양한 네트워크 설정(다른 구현과의 상호 운용성 테스트 포함)에서 Holo를 테스트할 수 있습니다.
또한 Holo는 기능 세트가 특정 요구 사항과 일치하는 경우 소프트웨어 라우터와 같이 라우팅 스택이 필요한 모든 곳에서 사용할 수 있습니다.
준수
Holo는 다음 인터넷 표준을 지원합니다:
BFD
- RFC 5880 - Bidirectional Forwarding Detection (BFD)
- RFC 5881 - Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)
- RFC 5882 - Generic Application of Bidirectional Forwarding Detection (BFD)
- RFC 5883 - Bidirectional Forwarding Detection (BFD) for Multihop Paths
BGP
- RFC 1997 - BGP Communities Attribute
- RFC 2385 - Protection of BGP Sessions via the TCP MD5 Signature Option
- RFC 2545 - Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
- RFC 2918 - Route Refresh Capability for BGP-4
- RFC 4271 - A Border Gateway Protocol 4 (BGP-4)
- RFC 4360 - BGP Extended Communities Attribute
- RFC 4486 - Subcodes for BGP Cease Notification Message
- RFC 4760 - Multiprotocol Extensions for BGP-4
- RFC 5082 - The Generalized TTL Security Mechanism (GTSM)
- RFC 5492 - Capabilities Advertisement with BGP-4
- RFC 5668 - 4-Octet AS Specific BGP Extended Community
- RFC 5701 - IPv6 Address Specific BGP Extended Community Attribute
- RFC 6286 - Autonomous-System-Wide Unique BGP Identifier for BGP-4
- RFC 6608 - Subcodes for BGP Finite State Machine Error
- RFC 6793 - BGP Support for Four-Octet Autonomous System (AS) Number Space
- RFC 7606 - Revised Error Handling for BGP UPDATE Messages
- RFC 7607 - Codification of AS 0 Processing
- RFC 8092 - BGP Large Communities Attribute
- RFC 8212 - Default External BGP (EBGP) Route Propagation Behavior without Policies
- RFC 8642 - Policy Behavior for Well-Known BGP Communities
- RFC 9774 - Deprecation of AS_SET and AS_CONFED_SET in BGP
IS-IS
- ISO/IEC 10589 - Information technology — Telecommunications and information exchange between systems — Intermediate System to Intermediate System intra-domain routeing information exchange protocol for use in conjunction with the protocol for providing the connectionless-mode network service (ISO 8473)
- RFC 1195 - Use of OSI IS-IS for Routing in TCP/IP and Dual Environments
- RFC 3719 - Recommendations for Interoperable Networks using Intermediate System to Intermediate System (IS-IS)
- RFC 3787 - Recommendations for Interoperable IP Networks using Intermediate System to Intermediate System (IS-IS)
- RFC 5120 - M-ISIS: Multi Topology (MT) Routing in Intermediate System to Intermediate Systems (IS-ISs)
- RFC 5301 - Dynamic Hostname Exchange Mechanism for IS-IS
- RFC 5303 - Three-Way Handshake for IS-IS Point-to-Point Adjacencies
- RFC 5304 - IS-IS Cryptographic Authentication
- RFC 5305 - IS-IS Extensions for Traffic Engineering
- RFC 5308 - Routing IPv6 with IS-IS
- RFC 5310 - IS-IS Generic Cryptographic Authentication
- RFC 6232 - Purge Originator Identification TLV for IS-IS
- RFC 6233 - IS-IS Registry Extension for Purges
- RFC 7308 - Extended Administrative Groups in MPLS Traffic Engineering (MPLS-TE)
- RFC 7602 - IS-IS Extended Sequence Number TLV
- RFC 7794 - IS-IS Prefix Attributes for Extended IPv4 and IPv6 Reachability
- RFC 7917 - Advertising Node Administrative Tags in IS-IS
- RFC 7981 - IS-IS Extensions for Advertising Router Information
- RFC 7987 - IS-IS Minimum Remaining Lifetime
- RFC 8401 - Bit Index Explicit Replication (BIER) Support via IS-IS
- RFC 8405 - Shortest Path First (SPF) Back-Off Delay Algorithm for Link-State IGPs
- RFC 8491 - Signaling Maximum SID Depth (MSD) Using IS-IS
- RFC 8570 - IS-IS Traffic Engineering (TE) Metric Extensions
- RFC 8667 - IS-IS Extensions for Segment Routing
- RFC 8918 - Invalid TLV Handling in IS-IS
- RFC 9479 - IS-IS Application-Specific Link Attributes
- draft-ietf-bier-lsr-non-mpls-extensions-03 - LSR Extensions for BIER non-MPLS Encapsulation
- draft-ietf-lsr-distoptflood-12 - IS-IS Distributed Flooding Reduction
- draft-westphal-lsr-isis-database-checksumming-00 - IS-IS Database Fingerprinting
MPLS LDP