Yggdrasil 네트워크
(yggdrasil-network.github.io)- Yggdrasil은 구조화 라우팅 프로토콜의 탈중앙 대안을 실험하는 네트워크로, 대규모 메시 네트워크를 염두에 둔 컴팩트 라우팅 방식을 사용함
- 현재 구현은 설정이 쉬운 경량 사용자 공간 소프트웨어 라우터이며, 참여자 사이에 종단 간 암호화된 IPv6 라우팅을 연결함
- 노드 피어링은 LAN, 지점 간 링크, 인터넷 위의 TCP/TLS 연결로 구성할 수 있고, 실제 피어링은 IPv4 또는 IPv6 위에서 가능함
- 대규모 토폴로지, 장애·이동성 이벤트 복구, 항상 켜진 종단 간 암호화, 중앙 지점 없는 P2P 동작, 여러 운영체제 지원을 특징으로 함
- 아직 알파 단계라 호환성 깨짐 가능성이 남아 있지만, 일상 사용에는 대체로 안정적이며 일부 사용자가 강하게 스트레스 테스트 중임
Yggdrasil이 해결하려는 네트워킹 문제
- Yggdrasil은 새로운 실험적 컴팩트 라우팅 방식임
- 인터넷에서 흔히 쓰이는 구조화 라우팅 프로토콜을 대신할 미래 지향적·탈중앙 대안을 목표로 함
- 향후 대규모 메시 네트워크를 가능하게 하는 기술로 설계됨
-
네트워크 설계 특성
- 확장성: 크고 복잡한 토폴로지나 인터넷 규모 토폴로지를 지원함
- 자가 복구: 연결 장애나 이동성 이벤트에 빠르게 반응함
- 암호화: 네트워크를 지나는 트래픽은 항상 완전한 종단 간 암호화를 사용함
- P2P: 내장된 중앙 집중 지점 없이 애드혹 방식으로 동작함
- 크로스 플랫폼: Linux, macOS, Windows, iOS, Android 등을 지원함
구현 방식과 네트워크 참여
- 현재 구현은 경량 사용자 공간 소프트웨어 라우터임
- 설정이 쉽고 다양한 플랫폼을 지원함
- 모든 네트워크 참여자 사이에 종단 간 암호화 IPv6 라우팅을 연결함
- 노드 간 피어링은 TCP/TLS 연결로 구성할 수 있음
- 로컬 영역 네트워크, 지점 간 링크, 인터넷 위에서 사용할 수 있음
- Yggdrasil Network는 노드 사이에 IPv6 라우팅을 제공하지만, 피어링 연결 자체는 IPv4 또는 IPv6 네트워크 위에서 설정 가능함
- 프로젝트는 아직 알파 단계임
- 향후 호환성 깨짐이 발생할 수 있음
- 그래도 일상 사용에는 대체로 안정적임
- 일부 사용자가 다양한 용도로 강하게 사용하며 스트레스 테스트 중임
-
시작과 기여 경로
댓글과 토론
Hacker News 의견들
-
웹사이트와 GitHub에서 제일 먼저 찾은 건 참조 구현과 독립적으로 구현할 수 있는 프로토콜 명세였는데, scheme/protocol이라고 홍보하는 것치고는 어디에도 명세가 연결돼 있지 않았음
직접 파다 보니 다른 GitHub 프로젝트의 사이드 브랜치에서 [1]을 찾았고, 작성자에게는 박수를 보냄. 암호화 신원, 메시지 형식, 전송 프로토콜, 피어링과 스트림 의미론, 스패닝 트리 갱신과 루트 선택, DHT, 전달 로직, 세션 등 필요한 내용이 꽤 잘 들어 있음
다만 루트 갱신 검증/서명 방식 같은 TODO가 있고, 다음 홉 선택의 동률 처리 알고리즘에는 모호함이 있음. 또 모든 패킷이 신뢰성 있게 순서대로 전달돼야 하고 MTU에 맞춰 더 작은 패킷으로 조각낼 수 있어야 해서, 전송 계층이 TCP에 강하게 결합된 것처럼 보임
[1] https://github.com/yggdrasil-network/yggdrasil-specs/blob/ys...- 링크한 예전 v0.3 프로토콜 문서화에는 시간을 조금 들였지만, 이후 설계가 두 번 크게 바뀜
v0.4에서는 DHT가 꽤 바뀌었고 v0.5에서는 DHT를 완전히 제거했음. 연구 프로젝트라 더 만족스러운 설계에 도달할 때까지 계속 바뀔 가능성이 높고, 그 시점에는 문서화에 확실히 더 시간을 쓸 예정임
순서 보장/신뢰성 있는 링크가 필요한 건 현재 단계에서 개발 편의를 위한 면이 크지만, 그 부분은 분명 고칠 수 있음 - TCP와 결합된 게 문제인가? 완전한 탈중앙화라는 목표에 어긋나는 동작을 하나?
- 링크한 예전 v0.3 프로토콜 문서화에는 시간을 조금 들였지만, 이후 설계가 두 번 크게 바뀜
-
이해한 바로는 yggdrasil과 cjdns는 기존 인터넷 위에 만들어진 가상 P2P 네트워크이고, 일반적인 3계층 라우팅 서비스를 제공함
그래서 여전히 ISP와 인터넷 백본 등이 필요함. Verizon이나 Cisco 라우터 없이 동작할 수 있는, IP 계층을 대체하는 전 세계 P2P 네트워크를 만들려는 프로젝트가 있나?
작은 단절 네트워크용 메시 네트워크 기술은 몇 가지 알지만, 소비자 대상이면서 수천 노드 이상을 지원하는 건 잘 모르겠음- 그게 원래 cjdns의 목표였음. 그래서 WiFi를 포함해 이더넷으로 도달 가능한 다른 노드와 자동으로 피어링함(IP 불필요)
https://github.com/cjdelisle/cjdns/blob/master/doc/Whitepape... 첫 문단 참고. 안타깝게도 그 라우팅 방식은 실제로 확장성이 부족한 것으로 드러났음. Yggdrasil은 다른 라우팅 알고리즘을 쓰므로 가능성이 있을 수도 있음 - IP도 원래는 전화망 위의 오버레이 네트워크였음
그 방식은 장점이 많고, 특히 도입이 쉬워짐. 지금은 레거시 앱을 위해 전화망을 IP 위에서 돌리고 있음. 이 Yggdrasil이 성공한다면 결국 레거시 시스템을 위해 IP를 그 위에서 돌리게 될 거라고 봄 - 메시 네트워크는 오래전부터 모두가 꿈꿔 왔지만, 안타깝게도 확장성이 매우 나쁨
이는 여러 문제 중 하나가 아니라 설계상의 근본적 한계임. 인터넷(ARPAnet)도 처음에는 메시 네트워크로 시작했고, 그 확장성 문제를 해결하려고 트렁크, 백본, 라우팅 개념이 생겨났음 - 왜 IP 계층을 제거하고 싶은 건가?
아니면 “인터넷” 위가 아니라 별도 네트워크 위의 IP 계층을 말하는 건가? 그렇다면 사람들을 어떻게 서로 연결할 생각인지 궁금함. 규모가 커질수록 메시 라우팅 때문에 메시는 비효율적이 되고, 결국 조만간 “자체 인터넷”을 재발명하게 됨. 다만 전 세계를 실제로 연결할 자원이 없으니 전 세계적이지는 못할 것임 - cjdns 이전에 우리 몇 명이 Athens[0]에서 영감을 받아, 인터넷을 대체하거나 보완하려는 project meshnet을 시작했음
당시에는 2009~2010년 Pirate Bay 판결에 대한 이상주의적/아나키즘적 대응에 가까웠음. 기억상 cjdns가 조금 뒤에 나왔고, 그룹 대부분을 흡수했음
불만 많은 해커와 소프트웨어 해적들이 더 구린 인터넷을 만들면 오래 못 간다는 걸 누가 알았겠나?
[0] https://en.m.wikipedia.org/wiki/Athens_Wireless_Metropolitan...
- 그게 원래 cjdns의 목표였음. 그래서 WiFi를 포함해 이더넷으로 도달 가능한 다른 노드와 자동으로 피어링함(IP 불필요)
-
관련 링크:
Yggdrasil Network - https://news.ycombinator.com/item?id=41669625 - 2024년 9월, 댓글 3개
Yggdrasil P2P mesh E2EE IPv6 network - https://news.ycombinator.com/item?id=30156551 - 2022년 1월, 댓글 77개
Yggdrasil – Early-stage implementation of an end-to-end encrypted IPv6 network - https://news.ycombinator.com/item?id=27577201 - 2021년 6월, 댓글 102개
Show HN: Yggdrasil Network – compact mesh routing experiment for mesh networks - https://news.ycombinator.com/item?id=18863554 - 2019년 1월, 댓글 15개
Announcing Yggdrasil Network v0.3 - https://news.ycombinator.com/item?id=18751991 - 2018년 12월, 댓글 3개
Yggdrasil: End-To-end Encrypted IPv6 Networking - https://news.ycombinator.com/item?id=18666245 - 2018년 12월, 댓글 1개 -
방화벽/NAT을 뚫을 수 있는 실제 메시 P2P IP 네트워크가 필요하면 Tailscale/Headscale을 쓰면 됨
암호화 키로 주소를 지정하는 P2P 연결 네트워크를 원한다면, 비교적 최근 프로젝트 중 이걸 꽤 잘하는 게 있음: https://www.iroh.computer
방화벽/NAT을 뚫고 QUIC 연결을 맺음. 이미 쓸 만한 개념 증명도 두 개 있음:
https://github.com/n0-computer/sendme
https://github.com/n0-computer/dumbpipe- 바로 이걸 물어보려 했음. 왜 누군가 Yggdrasil을 Tailscale이나 WireGuard 대신 써야 하나?
장점이 있나? 그냥 개인용 가벼운 사설 VPN을 돌리려는 거라면 Tailscale이 훌륭하고, 네트워크를 직접 호스팅하고 싶으면 Headscale도 있어 이점이 많음
- 바로 이걸 물어보려 했음. 왜 누군가 Yggdrasil을 Tailscale이나 WireGuard 대신 써야 하나?
-
3~4년 전에는 꽤 기대했지만, 지금은 어느 정도 방치된 프로젝트처럼 보임. 실제로 쓰는 사람이 있고 인상이 어떤지 궁금함
- 전혀 방치되지 않았고, 나와 다른 개발자 한 명이 여가 시간에 하는 프로젝트임
작년 말에 새 프로토콜 설계를 담은 0.5 버전을 냈고, 약 한 달 전에는 링크 비용 변경으로 네트워크 지연 시간을 크게 개선한 0.5.9를 릴리스했음 - 최근 업데이트가 몇 차례 있었고, 한동안 정체됐던 iOS 앱도 다시 살아났음
나는 휴대폰과 홈 네트워크를 연결하는 VPN처럼 쓰고 있고, 둘 다 VPS에 사설로 피어링해 둠
집에 직접 연결하는 것보다 좀 복잡하지만, 동적 IP, 포트 포워딩, WireGuard 키 교환을 신경 쓰는 것보다는 설정이 쉬웠음
멀티캐스트 피어링은 괜찮아서, 집에 있을 때도 같은 Ygg IP로 홈 서버에 직접 접근할 수 있음. 문제는 IP를 써야 한다는 것임. iOS 앱이 Ygg VPN 연결에 커스텀 DNS 서버 설정을 지원하지 않음
이 용도에는 Headscale이 사실 더 나은 해법이지만, 피어링 하나만 추가하면 대안 인터넷이 생긴다는 점은 꽤 재미있음 - Yggdrasil은 그냥 잘 동작하니, 개발자들이 채팅방에서 고칠 문제를 토론할 필요가 상대적으로 적음
지금 모든 기기에서 yggdrasil을 써서, NAT 뒤에 있어도 서로 ssh로 접속할 수 있음
Android에서 termux와 yggdrasil Android 앱을 쓰면, 이동 중에도 파일을 어딘가 클라우드에 저장하지 않고 집 컴퓨터에 있는 파일에 접근할 수 있음 - 밖에 있을 때 집에 있는 장비들에 접속하려고 항상 쓰고, 그 위에서 도는 IRC 서버로 친구들과 채팅도 함
개발은 꽤 활발하고, 최신 릴리스에서는 지연 시간이 가장 낮은 홉을 선호하도록 라우팅 알고리즘을 개선해서 체감 개선이 있었음
네트워크 안의 큰 커뮤니티 허브를 기대한다면 실망할 수 있지만, 직접 하나 만들어볼 수도 있음. 자기 용도에 맞게 쓰는 사람은 많고 프로젝트는 방치와 거리가 멂
- 전혀 방치되지 않았고, 나와 다른 개발자 한 명이 여가 시간에 하는 프로젝트임
-
나는 이게 Linux 배포판인 줄 알았음
https://en.m.wikipedia.org/wiki/Yggdrasil_Linux/GNU/X -
이 분야에는 Reticulum Network Stack도 있음: https://reticulum.network/
-
FAQ에 “Yggdrasil은 익명인가? 아니다, Yggdrasil 프로젝트의 목표는 익명성을 제공하는 것이 아니다”라고 되어 있음
문제가 어렵고, 단순한 기술 문제를 넘어 풀어야 할 이슈가 있다는 건 이해하지만, 솔직히 이건 나에게는 시작점에서 탈락임. 실제 인터넷의 진화라면 실질적 익명성을 포함해야 한다고 봄
그걸 제외하면, 현재 구성으로 이미 해결되지 않은 기존 인터넷의 어떤 문제를 실제로 해결하는지 모르겠음- 익명성은 Yggdrasil의 목표가 아닌 것처럼 BGP, OSPF, BATMAN 등의 목표도 아님
익명 네트워크는 보통 비용과 오버헤드가 매우 큼. 은닉을 위해 길고 간접적인 경로를 의도적으로 만들기 때문임. Tor 회선의 전반적으로 낮은 성능과 신뢰성을 보면, 전체 인터넷이 그런 식으로 동작하길 원하지 않을 이유를 알 수 있음 - 왜 그래야 하나? 메시 라우팅 프로토콜에 집중하고, 익명성은 선택적 계층으로 그 위에 올리는 게 훨씬 타당해 보임
Yggdrasil 네트워크를 돌리고 그 안에서 I2P 네트워크를 운영하지 못할 이유는 없음. 그러면 익명성이 필요 없는 통신에는 성능 손실이 적고, 익명 피어도 클리어넷에 올라가지 않고 만들 수 있음 - 지연 시간 최적화는 익명성을 깨뜨릴 수 있으니, 익명화는 위 계층에 올리는 편이 낫다
- 익명성은 Yggdrasil의 목표가 아닌 것처럼 BGP, OSPF, BATMAN 등의 목표도 아님
-
주소가 공개키에서 파생된다는 아이디어는 정말 좋지만, 이 접근에는 문제가 있음. Yggdrasil이 현재 IPv6 주소를 쓰기 때문에 길이가 매우 제한되고 충돌을 찾을 수 있음
선행 비트가 더 많은 키를 무차별 대입으로 찾는 우회책이 있긴 함. 이해한 바로는 장기 계획이 주소 길이 제한이 없는 커스텀 프로토콜을 추가하는 것임- 대충 계산해 보면 충돌하는 주소 쌍을 생성하는 건 가능해 보임. 생일 문제 같은 이유 때문임
하지만 이미 사용 중인 주소 집합과 충돌시키는 건 여전히 비현실적으로 보임. Yggdrasil 맥락에서 전자가 실제로 얼마나 문제가 될까? - 공개키를 IPv6 주소에 맞추려고 잘라내는 게 완전히 이상적이지 않다는 데 동의함
그래도 현재로서는 거의 모든 기존 IPv6 지원 애플리케이션이 수정 없이 Yggdrasil 위에서 동작한다는 뜻이고, 테스트넷으로서는 좋은 속성임 - 왜 전체 공개키를 쓰고 나머지는 엔트로피에 맡기지 않나? Reticulum Network처럼 말임
- 대충 계산해 보면 충돌하는 주소 쌍을 생성하는 건 가능해 보임. 생일 문제 같은 이유 때문임
-
“Yggdrasil is a new experimental compact routing scheme”이라고 되어 있는데, 이제 그렇게 새롭진 않지 않나? 최소 6년은 됐음
- 비슷한 걸 실제로 쓰는 곳이 있나?