Overview
ZeroTier는 전 세계 장치들을 마치 같은 데이터센터에 있는 것처럼 연결하는 분산형 네트워크 하이퍼바이저로, 암호화된 P2P 전송과 이더넷 수준의 가상화 계층을 결합해 L2 기반 가상 LAN을 제공하는 소프트웨어입니다.
핵심 개념
식별자(Identifiers) 체계
ZeroTier 환경에서 모든 참여자는 특정 식별자(Identifiers)를 통해 고유하게 관리됩니다.
- ZeroTier Address (40-bit/10-hex digit): 노드(장치, VM, 컨테이너 등)를 식별하는 고유한 암호화 식별자이며, 지구 규모의 가상 이더넷 스마트 스위치에서의 포트 번호와 같은 역할을 수행합니다.
- Network ID (64-bit/16-hex digit): 하나의 가상 이더넷 네트워크(VLAN)를 식별하는 ID입니다. 이 ID는 해당 네트워크를 관리하는 컨트롤러 ZeroTier Address (40-bit)와 그 컨트롤러가 관리하는 네트워크 번호 (24-bit)로 구성되어, 노드가 통신의 주체를 즉시 파악할 수 있도록 돕습니다.
VL1 (Peer-to-Peer Transport)
VL1은 노드들이 서로를 탐색하고 직접 통신 경로를 맺는 탐색 및 전송 계층입니다. 이 계층을 통해 노드들은 보안이 강화된 P2P 링크를 확립하며, 전 세계 어디서든 마치 로컬 LAN에 있는 것처럼 통신할 수 있는 기반을 마련합니다.
루트 서버 구조 : Planet과 Moons
VL1은 노드 탐색의 출발점을 제공하기 위해 DNS와 유사하게 항상 존재하는 루트 서버들의 집합을 구성합니다. 기본 루트인 Planet은 ZeroTier Inc.가 운영하는 공용 서버 풀로, 전 세계 사용자들에게 초기 네트워크 탐색 및 연결(rendezvous)을 위한 인프라를 제공합니다. 대부분의 사용자는 이 Planet 루트 서버에 연결하여 상대 노드의 위치 힌트(Discovery Hint)를 조회하고 P2P 연결을 시작합니다. 또한, 사용자 또는 조직은 자체 구축한 Moons라는 사용자 정의 루트 서버를 운영할 수 있습니다. Moons는 Planet 풀에 추가되어 특정 지역에 국한되거나 지리적으로 근접한 루트를 제공함으로써 초기 연결 지연 시간(Latency)을 낮추고 성능을 향상시키는 데 기여합니다. 조직이 자체 Moons를 운영할 경우 ZeroTier사의 인프라 의존도를 낮추고, 데이터센터 내부 네트워크가 외부 인터넷과 단절되더라도 내부 VL1 탐색 및 통신을 유지할 수 있는 독립성과 내결함성을 확보하는 이점도 있습니다.
P2P 연결 확립 프로세스
노드는 처음에는 루트 서버에만 연결되어 있으며, 트래픽 패턴에 따라 P2P 연결을 동적으로 생성하려고 시도합니다.
- 초기 전송: 노드 A가 노드 B로 통신을 시도하지만 직접 경로가 없으므로 패킷을 상위 루트(R)로 전송합니다.
- 경로 포워딩: 루트 R은 가능하면 B로 패킷을 포워딩합니다. (Planet 루트는 모든 노드에 대해 알고 있으므로, B가 온라인 상태라면 최종적으로 패킷이 전달됩니다.)
- Rendezvous (만남): R은 A와 B 모두에게 상대방에게 연결하는 힌트(Rendezvous 메시지)를 보냅니다.
- P2P 시도: A와 B는 Rendezvous 메시지를 받아 서로에게 테스트 메시지를 보내어 NAT 홀 펀칭(Hole Punching)을 시도합니다. 성공하면 직접적인 P2P 링크가 확립됩니다.
참고: 직접 경로를 확립할 수 없는 경우에도 중계(Relay)를 통해 계속될 수 있으며, 직접 연결 시도는 주기적으로 무기한 지속됩니다.
암호화
모든 VL1 패킷은 종단 간(End-to-End) 암호화되며, 루트 서버를 포함한 누구도 데이터 내용을 해독할 수 없습니다. VL1은 Curve25519/Ed25519와 같은 강력한 256비트 타원 곡선 암호화를 사용하며, 데이터 전송에는 Salsa20 암호와 Poly1305 인증(MAC)을 결합한 방식으로 보안을 유지합니다.
VL2 (Virtual Layer 2) - Ethernet Virtualization Layer
VL2는 VL1을 기반으로 구축되며, SDN 관리 기능이 포함된 VXLAN과 유사한 네트워크 가상화 프로토콜입니다. VL2는 운영체제와 애플리케이션에 익숙한 통신 매체인 이더넷을 에뮬레이션합니다.
네트워크 컨트롤러
VL2 네트워크의 구성과 보안은 네트워크 ID에 정의된 컨트롤러에 의해 관리됩니다.
- 컨트롤러: VL2의 컨트롤러는 가상 네트워크의 구성 관리자이자 인증 기관(CA) 역할을 수행합니다. 네트워크의 구성 정보, ACL(Access Control List), IP 주소 할당 등을 관장하며, 멤버들에게 멤버십 인증서(Certificates of Membership)를 발급하고 서명합니다.
- 참고로, VL1의 루트 서버(Planet/Moons)는 P2P 연결을 돕는 '통신 촉진자'이며, VL2의 컨트롤러는 네트워크의 구성과 보안 규칙을 관리하는 '인증 관리자'라는 차이가 있습니다.
인증서 기반 접근 제어
모든 자격 증명(Credential)은 컨트롤러의 비밀 키로 서명되어 신뢰성을 보장하며, 노드들은 이 인증서를 P2P로 교환하며 유효성을 검증합니다. 이는 컨트롤러에 상시 연결하지 않고도 네트워크 보안을 유지할 수 있는 분산된 검증 체계입니다.
추가적인 네트워킹 기능들
- 멀티캐스트 및 브로드캐스트: 단순한 Publish/Subscribe 시스템을 통해 지원되며, 이더넷 브로드캐스트(
ff:ff:ff:ff:ff:ff)는 모든 멤버가 구독하는 멀티캐스트 그룹으로 처리될 수 있습니다. - IPv4 ARP 특별 처리: 대규모 네트워크에서 ARP의 확장 문제를 해결하기 위해, 각 IPv4 주소에 대해 고유한 멀티캐스트 그룹을 생성하고 ARP 쿼리를 해당 그룹에만 전송합니다.
- IPv6 NDP 에뮬레이션: IPv6 NDP(Neighbor Discovery Protocol)의 추가적인 지연 시간을 줄이기 위해, 노드가 NDP 쿼리를 가로채고 스푸핑된 NDP 응답을 생성합니다.
- Ethernet Bridging (L2 브리지): ZeroTier는 일반적인 이더넷 브리징을 사용하여 다른 물리/가상 이더넷 네트워크를 VL2 가상 네트워크에 연결할 수 있도록 지원합니다.