เครือข่าย Yggdrasil
(yggdrasil-network.github.io)- Yggdrasil เป็นเครือข่ายที่ทดลองทางเลือกแบบกระจายศูนย์สำหรับโปรโตคอลการกำหนดเส้นทางแบบมีโครงสร้าง โดยใช้แนวทาง compact routing ที่คำนึงถึง mesh network ขนาดใหญ่
- การใช้งานปัจจุบันเป็น เราเตอร์ซอฟต์แวร์ใน user space ขนาดเบาที่ตั้งค่าได้ง่าย และเชื่อมต่อการกำหนดเส้นทาง IPv6 ที่เข้ารหัสแบบ end-to-end ระหว่างผู้เข้าร่วม
- การ peering ของโหนดสามารถตั้งค่าได้ผ่าน LAN, ลิงก์ point-to-point และ การเชื่อมต่อ TCP/TLS บนอินเทอร์เน็ต โดยการ peering จริงทำได้บน IPv4 หรือ IPv6
- มีจุดเด่นคือรองรับโทโพโลยีขนาดใหญ่, การกู้คืนจากเหตุขัดข้องและเหตุการณ์การเคลื่อนย้าย, การเข้ารหัส end-to-end ที่เปิดใช้อยู่เสมอ, การทำงานแบบ P2P โดยไม่มีจุดศูนย์กลาง และรองรับหลายระบบปฏิบัติการ
- ยังอยู่ใน ระยะอัลฟา จึงยังมีความเป็นไปได้ที่จะเกิดการเปลี่ยนแปลงที่ทำให้ความเข้ากันได้เสียหาย แต่โดยรวมเสถียรพอสำหรับการใช้งานประจำวัน และมีผู้ใช้บางส่วนกำลัง stress test อย่างหนัก
ปัญหาเครือข่ายที่ Yggdrasil ต้องการแก้ไข
- Yggdrasil เป็นแนวทาง compact routing แบบใหม่เชิงทดลอง
- มีเป้าหมายเป็น ทางเลือกแห่งอนาคตแบบกระจายศูนย์ แทนโปรโตคอลการกำหนดเส้นทางแบบมีโครงสร้างที่ใช้กันทั่วไปบนอินเทอร์เน็ต
- ออกแบบให้เป็นเทคโนโลยีที่ช่วยให้เกิด mesh network ขนาดใหญ่ในอนาคต
-
คุณลักษณะการออกแบบเครือข่าย
- ความสามารถในการขยายระบบ: รองรับโทโพโลยีขนาดใหญ่และซับซ้อน หรือโทโพโลยีระดับอินเทอร์เน็ต
- การกู้คืนด้วยตนเอง: ตอบสนองต่อการเชื่อมต่อขัดข้องหรือเหตุการณ์การเคลื่อนย้ายได้อย่างรวดเร็ว
- การเข้ารหัส: ทราฟฟิกที่ผ่านเครือข่ายใช้การเข้ารหัสแบบ end-to-end อย่างสมบูรณ์เสมอ
- P2P: ทำงานแบบ ad hoc โดยไม่มีจุดรวมศูนย์ที่ฝังอยู่ในระบบ
- ข้ามแพลตฟอร์ม: รองรับ Linux, macOS, Windows, iOS, Android เป็นต้น
วิธีการใช้งานจริงและการเข้าร่วมเครือข่าย
- การใช้งานปัจจุบัน เป็น เราเตอร์ซอฟต์แวร์ใน user space ขนาดเบา
- ตั้งค่าได้ง่ายและรองรับหลายแพลตฟอร์ม
- เชื่อมต่อ การกำหนดเส้นทาง IPv6 แบบเข้ารหัส end-to-end ระหว่างผู้เข้าร่วมเครือข่ายทั้งหมด
- การ peering ระหว่างโหนดสามารถตั้งค่าได้ผ่าน การเชื่อมต่อ TCP/TLS
- ใช้ได้บนเครือข่ายท้องถิ่น, ลิงก์ point-to-point และบนอินเทอร์เน็ต
- Yggdrasil Network ให้บริการการกำหนดเส้นทาง IPv6 ระหว่างโหนด แต่การเชื่อมต่อ peering เองสามารถตั้งค่าบนเครือข่าย IPv4 หรือ IPv6 ได้
- โปรเจกต์ยังอยู่ใน ระยะอัลฟา
- อาจเกิดการเปลี่ยนแปลงที่ทำให้ความเข้ากันได้เสียหายในอนาคต
- อย่างไรก็ตาม โดยรวมเสถียรพอสำหรับการใช้งานประจำวัน
- มีผู้ใช้บางส่วนใช้งานอย่างหนักเพื่อวัตถุประสงค์ต่าง ๆ และกำลัง stress test อยู่
-
ช่องทางเริ่มต้นและการมีส่วนร่วม
- สามารถเข้าร่วมเครือข่ายจากคอมพิวเตอร์ส่วนตัวหรือเราเตอร์ได้ผ่าน การติดตั้ง และ การตั้งค่า
- สามารถสำรวจ บริการภายใน ในเครือข่ายที่ผู้ใช้ดำเนินการเองได้
- สามารถมีส่วนร่วมในโปรเจกต์ได้ผ่าน หน้านักพัฒนา และ GitHub
- สามารถรายงานบั๊กและปัญหาได้ที่ GitHub Issues
1 ความคิดเห็น
ความเห็นจาก Hacker News
สิ่งแรกที่ผมมองหาในเว็บไซต์และ GitHub คือ สเปกของโปรโตคอล ที่สามารถนำไปทำ implementation แยกจาก implementation อ้างอิงได้ แต่ทั้งที่โปรโมตว่าเป็น scheme/protocol กลับไม่มีลิงก์ไปยังสเปกอยู่ที่ไหนเลย
พอขุดเองก็เจอ [1] ในไซด์บรานช์ของโปรเจกต์ GitHub อีกอันหนึ่ง และขอปรบมือให้ผู้เขียน เนื้อหาที่จำเป็นมีอยู่ค่อนข้างครบ ทั้งตัวตนเชิงเข้ารหัสลับ รูปแบบข้อความ โปรโตคอลส่งข้อมูล ความหมายของ peering และ stream การอัปเดต spanning tree และการเลือกรูท, DHT, logic การส่งต่อ, session ฯลฯ
อย่างไรก็ตาม ยังมี TODO อย่างวิธีตรวจสอบ/ลงนามการอัปเดตรูท และอัลกอริทึมจัดการกรณีเสมอกันในการเลือก next hop ก็ยังคลุมเครืออยู่ อีกทั้งทุกแพ็กเก็ตต้องถูกส่งแบบเชื่อถือได้และตามลำดับ และต้องสามารถแตกเป็นแพ็กเก็ตที่เล็กลงให้พอดีกับ MTU ได้ จึงดูเหมือนว่า transport layer จะ ผูกติดกับ TCP อย่างมาก
[1] https://github.com/yggdrasil-network/yggdrasil-specs/blob/ys...
ใน v0.4 DHT เปลี่ยนไปค่อนข้างมาก และใน v0.5 เราถอด DHT ออกทั้งหมด นี่เป็นโปรเจกต์วิจัย จึงมีแนวโน้มว่าจะเปลี่ยนต่อไปเรื่อย ๆ จนกว่าจะได้ดีไซน์ที่น่าพอใจกว่านี้ และเมื่อถึงจุดนั้นเราจะใช้เวลากับการทำเอกสารมากขึ้นแน่นอน
ความจำเป็นที่ลิงก์ต้องรับประกันลำดับ/ความเชื่อถือได้ ณ ตอนนี้ส่วนใหญ่เป็นเรื่องความสะดวกในการพัฒนา แต่ส่วนนั้นแก้ได้แน่นอน
ตามที่ผมเข้าใจ yggdrasil กับ cjdns เป็น เครือข่าย P2P เสมือน ที่สร้างอยู่บนอินเทอร์เน็ตเดิม และให้บริการ routing ระดับเลเยอร์ 3 แบบทั่วไป
ดังนั้นก็ยังต้องพึ่ง ISP และ backbone ของอินเทอร์เน็ตอยู่ดี มีโปรเจกต์ไหนที่พยายามสร้างเครือข่าย P2P ทั่วโลกซึ่งแทนที่ IP layer และทำงานได้โดยไม่ต้องมี Verizon หรือเราเตอร์ของ Cisco ไหม?
ผมรู้จักเทคโนโลยี mesh network สำหรับเครือข่ายขนาดเล็กที่ถูกตัดขาดอยู่บ้าง แต่ไม่ค่อยรู้จักแบบที่มุ่งผู้บริโภคและรองรับโหนดได้ตั้งแต่หลักพันขึ้นไป
ดูย่อหน้าแรกของ https://github.com/cjdelisle/cjdns/blob/master/doc/Whitepape... น่าเสียดายที่วิธี routing แบบนั้นพิสูจน์แล้วว่าในทางปฏิบัติขยายขนาดได้ไม่ดีพอ Yggdrasil ใช้อัลกอริทึม routing อีกแบบ จึงอาจมีความเป็นไปได้อยู่
วิธีนั้นมีข้อดีมากมาย โดยเฉพาะทำให้การนำมาใช้จริงง่ายขึ้น ตอนนี้เรากำลังรันเครือข่ายโทรศัพท์บน IP เพื่อรองรับแอป legacy ถ้า Yggdrasil นี้สำเร็จ ผมคิดว่าสุดท้ายเราก็จะรัน IP อยู่บนมันเพื่อรองรับระบบ legacy เช่นกัน
นี่ไม่ใช่แค่หนึ่งในหลายปัญหา แต่เป็นข้อจำกัดพื้นฐานของดีไซน์ อินเทอร์เน็ต (ARPAnet) ตอนแรกก็เริ่มจากการเป็น mesh network และแนวคิดเรื่อง trunk, backbone และ routing ก็เกิดขึ้นเพื่อแก้ปัญหาการขยายขนาดนั้น
หรือหมายถึง IP layer บนเครือข่ายแยกต่างหาก ไม่ใช่บน “อินเทอร์เน็ต”? ถ้าอย่างนั้นผมสงสัยว่าจะเชื่อมคนเข้าหากันอย่างไร ยิ่งขนาดใหญ่ขึ้น mesh ก็ยิ่งไม่มีประสิทธิภาพ เพราะ mesh routing และสุดท้ายไม่นานก็จะต้องประดิษฐ์ “อินเทอร์เน็ตของตัวเอง” ขึ้นมาใหม่อยู่ดี เพียงแต่คงไม่เป็นระดับโลก เพราะไม่มีทรัพยากรพอจะเชื่อมทั้งโลกจริง ๆ
ตอนนั้นค่อนข้างเป็นการตอบสนองแบบอุดมคติ/อนาธิปไตยต่อคำตัดสินคดี Pirate Bay ช่วงปี 2009–2010 เท่าที่จำได้ cjdns ออกมาหลังจากนั้นไม่นาน และดึงคนส่วนใหญ่ในกลุ่มไป
ใครจะไปรู้ว่าถ้าแฮกเกอร์ขี้บ่นกับโจรสลัดซอฟต์แวร์มารวมกันสร้างอินเทอร์เน็ตที่ห่วยกว่าเดิม มันจะอยู่ได้ไม่นาน?
[0] https://en.m.wikipedia.org/wiki/Athens_Wireless_Metropolitan...
ลิงก์ที่เกี่ยวข้อง:
Yggdrasil Network - https://news.ycombinator.com/item?id=41669625 - กันยายน 2024, 3 ความคิดเห็น
Yggdrasil P2P mesh E2EE IPv6 network - https://news.ycombinator.com/item?id=30156551 - มกราคม 2022, 77 ความคิดเห็น
Yggdrasil – Early-stage implementation of an end-to-end encrypted IPv6 network - https://news.ycombinator.com/item?id=27577201 - มิถุนายน 2021, 102 ความคิดเห็น
Show HN: Yggdrasil Network – compact mesh routing experiment for mesh networks - https://news.ycombinator.com/item?id=18863554 - มกราคม 2019, 15 ความคิดเห็น
Announcing Yggdrasil Network v0.3 - https://news.ycombinator.com/item?id=18751991 - ธันวาคม 2018, 3 ความคิดเห็น
Yggdrasil: End-To-end Encrypted IPv6 Networking - https://news.ycombinator.com/item?id=18666245 - ธันวาคม 2018, 1 ความคิดเห็น
ถ้าต้องการเครือข่าย IP แบบเมช P2P ที่ใช้งานได้จริงและทะลุไฟร์วอลล์/NAT ได้ ก็ใช้ Tailscale/Headscale ได้เลย
ถ้าอยากได้เครือข่ายเชื่อมต่อแบบ P2P ที่กำหนดที่อยู่ด้วยคีย์เข้ารหัส มีโปรเจกต์ที่ค่อนข้างใหม่และทำเรื่องนี้ได้ค่อนข้างดี: https://www.iroh.computer
มันทะลุไฟร์วอลล์/NAT แล้วสร้างการเชื่อมต่อ QUIC ได้ ตอนนี้มี proof of concept ที่พอใช้ได้แล้วสองตัว:
https://github.com/n0-computer/sendme
https://github.com/n0-computer/dumbpipe
มีข้อดีอะไรไหม? ถ้าแค่อยากรัน VPN ส่วนตัวแบบเบา ๆ Tailscale ก็ยอดเยี่ยมอยู่แล้ว และถ้าอยากโฮสต์เครือข่ายเองก็มี Headscale ซึ่งมีข้อดีเยอะ
เมื่อ 3–4 ปีก่อนผมค่อนข้างคาดหวังกับมัน แต่ตอนนี้ดูเหมือนเป็น โปรเจกต์ที่ถูกปล่อยทิ้ง ไปพอสมควร อยากรู้ว่ามีคนใช้งานจริงไหม และประทับใจอย่างไรบ้าง
ปลายปีที่แล้วเราออก เวอร์ชัน 0.5 ที่มีการออกแบบโปรโตคอลใหม่ และประมาณหนึ่งเดือนก่อนก็ปล่อย 0.5.9 ซึ่งปรับค่า link cost ทำให้ latency ของเครือข่ายดีขึ้นมาก
ผมใช้มันเหมือน VPN สำหรับเชื่อมโทรศัพท์กับเครือข่ายที่บ้าน โดยทั้งสองฝั่ง peer แบบส่วนตัวกับ VPS ไว้
มันซับซ้อนกว่าการเชื่อมตรงเข้าบ้านนิดหน่อย แต่ตั้งค่าง่ายกว่าการต้องมาคอยจัดการ dynamic IP, port forwarding และการแลกคีย์ WireGuard
multicast peering ก็ใช้ได้ดี ทำให้ตอนอยู่บ้านผมยังเข้าถึงโฮมเซิร์ฟเวอร์โดยตรงด้วย Ygg IP เดิมได้ ปัญหาคือต้องใช้ IP นี่แหละ แอป iOS ไม่รองรับการตั้งค่าเซิร์ฟเวอร์ DNS แบบกำหนดเองสำหรับการเชื่อมต่อ Ygg VPN
สำหรับกรณีใช้งานนี้ Headscale เป็นทางออกที่ดีกว่าจริง ๆ แต่ความที่แค่เพิ่ม peering อีกจุดเดียวก็ได้อินเทอร์เน็ตทางเลือกขึ้นมา ถือว่าน่าสนุกดี
ตอนนี้ผมใช้ yggdrasil บนอุปกรณ์ทุกเครื่อง ทำให้แม้อยู่หลัง NAT ก็ยัง ssh หากันได้
บน Android ถ้าใช้ termux กับแอป yggdrasil Android ก็เข้าถึงไฟล์ในคอมพิวเตอร์ที่บ้านได้ระหว่างเดินทาง โดยไม่ต้องเก็บไฟล์ไว้บนคลาวด์ที่ไหน
การพัฒนาค่อนข้างคึกคัก และในรีลีสล่าสุดมีการปรับปรุงอัลกอริทึม routing ให้เลือก hop ที่มี latency ต่ำสุดมากขึ้น ซึ่งรู้สึกได้ว่าดีขึ้น
ถ้าคาดหวังว่าจะมีฮับชุมชนใหญ่ ๆ อยู่ในเครือข่ายก็อาจผิดหวัง แต่คุณจะลองสร้างเองก็ได้ มีคนจำนวนมากใช้มันให้เหมาะกับงานของตัวเอง และโปรเจกต์นี้ห่างไกลจากคำว่าถูกปล่อยทิ้งมาก
ผมนึกว่านี่เป็น ดิสโทร Linux เสียอีก
https://en.m.wikipedia.org/wiki/Yggdrasil_Linux/GNU/X
ในสายนี้ยังมี Reticulum Network Stack ด้วย: https://reticulum.network/
ใน FAQ ระบุไว้ว่า “Yggdrasil เป็นเครือข่ายนิรนามหรือไม่? ไม่ใช่ เป้าหมายของโปรเจกต์ Yggdrasil ไม่ใช่การให้ความเป็นนิรนาม”
เข้าใจว่าปัญหานี้ยาก และมีประเด็นที่ต้องแก้มากกว่าแค่ปัญหาเชิงเทคนิคธรรมดา แต่พูดตรง ๆ สำหรับผมแล้วนี่ตกตั้งแต่จุดเริ่มต้นเลย ถ้าจะเป็นวิวัฒนาการของอินเทอร์เน็ตจริง ๆ ก็ควรรวม ความเป็นนิรนามในทางปฏิบัติ เข้าไปด้วย
ถ้าตัดเรื่องนั้นออกไป ผมก็ไม่เห็นว่าด้วยโครงสร้างปัจจุบันมันแก้ปัญหาใดของอินเทอร์เน็ตเดิมที่ยังไม่ได้รับการแก้ไขจริง ๆ
เครือข่ายนิรนามมักมีต้นทุนและโอเวอร์เฮดสูงมาก เพราะตั้งใจสร้างเส้นทางที่ยาวและอ้อมเพื่อการปกปิด หากดูประสิทธิภาพและความน่าเชื่อถือโดยรวมที่ค่อนข้างต่ำของวงจร Tor ก็จะเห็นเหตุผลว่าทำไมเราไม่ควรอยากให้อินเทอร์เน็ตทั้งหมดทำงานแบบนั้น
ไม่มีเหตุผลอะไรที่เราจะรันเครือข่าย Yggdrasil แล้วใช้งานเครือข่าย I2P ภายในนั้นไม่ได้ แบบนั้นการสื่อสารที่ไม่ต้องการความเป็นนิรนามก็จะสูญเสียประสิทธิภาพน้อย และยังสร้าง peer นิรนามได้โดยไม่ต้องขึ้นไปอยู่บน clearnet
ไอเดียที่ให้ที่อยู่ถูกอนุมานจาก public key นั้นดีมาก แต่แนวทางนี้มีปัญหาอยู่ เพราะตอนนี้ Yggdrasil ใช้ที่อยู่ IPv6 ทำให้ความยาวถูกจำกัดมาก และสามารถหา collision ได้
มีทางเลี่ยงคือ brute force เพื่อหาคีย์ที่มีบิตนำหน้ามากขึ้น เท่าที่เข้าใจ แผนระยะยาวคือเพิ่มโปรโตคอลแบบกำหนดเองที่ไม่มีข้อจำกัดเรื่องความยาวของที่อยู่
แต่การทำให้ชนกับชุดที่อยู่ที่ถูกใช้งานอยู่แล้วนั้นยังดูไม่เป็นไปได้ในทางปฏิบัติ ในบริบทของ Yggdrasil อย่างแรกเป็นปัญหาจริง ๆ แค่ไหนกัน?
ถึงอย่างนั้น ในตอนนี้มันหมายความว่า แอปพลิเคชันที่รองรับ IPv6 เดิมแทบทั้งหมดสามารถทำงานบน Yggdrasil ได้โดยไม่ต้องแก้ไข ซึ่งเป็นคุณสมบัติที่ดีสำหรับ testnet
มีประโยคว่า “Yggdrasil is a new experimental compact routing scheme” แต่ตอนนี้มันคงไม่ได้ใหม่ขนาดนั้นแล้วไหม? อย่างน้อยก็ 6 ปี แล้ว