Iroh 1.0 - เชื่อมต่อด้วยคีย์แทน IP - ไลบรารีเครือข่ายสำหรับเชื่อมต่ออุปกรณ์ตามต้องการ
(iroh.computer)- Iroh 1.0 คือรุ่นเสถียรตัวแรก และรับประกันเสถียรภาพของ wire protocol และภาษา API ทำให้ endpoint ของ iroh v1 สื่อสารกันได้โดยไม่ขึ้นกับ minor version หรือภาษา
- นอกจาก Rust crate แล้ว ยังรองรับ Python, Node.js, Swift, Kotlin อย่างเป็นทางการ และสามารถฝัง iroh ลงในแอปพลิเคชัน Swift บน iOS และแอป Kotlin บน Android ได้
- การเปลี่ยนแปลงที่กระทบต่อ wire stability จะเกิดขึ้นพร้อมกับ major release เสมอ และในอนาคต เวอร์ชันของภาษา API กับความเข้ากันได้ของ wire อาจถูกจัดการเวอร์ชันแยกจากกัน
- หลัง 1.0 เป็นต้นไป major และ minor version จะได้รับการสนับสนุนตามกำหนดการสนับสนุน และ minor version 0.35 จะไม่มีรีลีสเพิ่มเติม
- การรองรับ Public relay จะดำเนินต่อไปจนถึง End of Life สำหรับ v1.0, จนถึงวันที่ 31 ธันวาคม 2026 สำหรับ v0.35x และจนถึงวันที่ 30 กันยายน 2026 สำหรับ v0.9x และ v1.0.0-rcX
- โดยปกติ public relay จะอัปเกรดเป็นเวอร์ชันล่าสุดภายใน 24 ชั่วโมงหลังแต่ละรีลีส และการเปลี่ยนแปลง relay ที่ทำให้ wire ไม่เข้ากันจะใช้ URL ใหม่เพื่อให้ไคลเอนต์เดิมยังทำงานต่อได้
- ความสามารถด้านการเชื่อมต่อประกอบด้วย QUIC multipath, QUIC NAT traversal, การตั้งค่าแบบ local-first, การรันบน WASM และเบราว์เซอร์, hook สำหรับควบคุมการเชื่อมต่อ และการรองรับ custom transport
- โดยทั่วไป ข้อมูล 95% ในการเชื่อมต่อจะถูกส่งตรงระหว่างอุปกรณ์ และอธิบายว่าการเชื่อมต่อโดยตรงช่วยลด hop ที่ต้องผ่านคลาวด์และลดค่า egress ได้ {p:95}
- relayed traffic บน public relay มีการจำกัดอัตรา และข้อจำกัดนี้อาจเปลี่ยนแปลงได้ทุกเมื่อ
2 ความคิดเห็น
ความคิดเห็นบน Hacker News
ถ้าเพิ่งเคยเห็น Iroh เป็นครั้งแรก ก็พอจะเข้าใจได้ว่าเป็น Tailscale ในชั้นแอปพลิเคชัน ไม่ใช่ชั้นเครือข่าย
คำถามว่า “งั้นใช้ Tailscale ไปเลยไม่ได้เหรอ?” ถ้ามองจากมุมของนักพัฒนาแอปจะต่างกันอยู่ ถ้าอยากให้แต่ละอินสแตนซ์ของแอปเชื่อมต่อกันได้ง่าย ในทางทฤษฎีก็ฝังความสามารถของ Tailscale เข้าไปในแอปได้ แต่แบบนั้นผู้ใช้ก็ต้องมีบัญชี Tailscale และตัวแอปก็จะผูกติดกับ Tailscale ไปด้วย
Iroh ทำให้ฝังความสามารถนี้เข้าไปได้โดยตรง และยังมี public fallback relay ให้ด้วย ถ้าแอปโตจนเกินกว่าที่ relay สาธารณะจะรองรับได้ การสลับไปใช้ relay ของตัวเองก็แทบจะเหมือนกดสวิตช์เดียว
โดยเฉพาะถ้า Iroh ทำให้การทำสิ่งที่ถูกต้องเป็นเรื่องง่ายและดีได้ขนาดนี้ก็ยิ่งใช่
ในสภาพแวดล้อมที่ผู้ใช้จำเป็นต้องเข้าถึงอินสแตนซ์บนเครื่องตัวเอง Iroh อาจเป็น game changer ได้เลย สำหรับเรา มันใช้เพื่อทำให้ควบคุมซอฟต์แวร์จากมือถือหรืออุปกรณ์อื่นได้ง่าย
เมื่อก่อนอาจต้องตรวจว่าอยู่ใน LAN เดียวกันหรือไม่ แต่ถ้าใช้ Iroh มันทำงานได้ในทุกสภาพแวดล้อม
ทั้ง Iroh และ OpenZiti ฝังเข้าแอปได้ และทั้งคู่ก็เป็น use case ที่ดีสำหรับนักพัฒนาแอปที่อยากฝังไว้ในบริการ
OpenZiti ใช้กับบริการที่ขนาดระบบและความปลอดภัยสำคัญ ส่วน Iroh ช่วยให้ผู้เข้าร่วมที่ไม่มีความสัมพันธ์กันมาก่อนก็เข้าร่วมได้ จึงอาจสะดวกมาก
ผมเป็นหนึ่งในนักพัฒนา Iroh
คำถามที่เจอบ่อยคือ Iroh จะรองรับ WebRTC, BLE, LoRa และอื่น ๆ เมื่อไร
ตอนนี้ Iroh รองรับแค่ IPv4, IPv6 และ relay transport เป็นค่าเริ่มต้น มี transport ที่น่าสนใจอยู่เยอะมาก ถ้าพยายามรองรับทั้งหมด codebase จะกลายเป็นเขาวงกตของ feature flag ที่บำรุงรักษาไม่ได้
เลยเลือกทำให้สามารถเขียน custom transport ได้แทน และ implementation ของ transport สามารถแยกไปอยู่ใน crate คนละตัวได้ทั้งหมด
custom transport เชิงทดลองที่มีอยู่แล้วได้แก่ Tor, Nym และ BLE: https://github.com/mcginty/iroh-ble-transport
ดูวิธีทำงานภายในได้ที่นี่: https://www.iroh.computer/blog/iroh-0-97-0-custom-transports...
ถ้าสร้างโครงแบบไคลเอนต์/เซิร์ฟเวอร์ P2P หรือทำ peer machine สองตัวด้วยสิ่งนี้ ก็สงสัยว่ามีข้อจำกัดอะไรบ้างในแง่ที่ต้องตั้งค่าเพิ่มเติมเพื่อให้สองแอปเชื่อมต่อกัน
เช่น ถ้าทำแอปที่รันบนมือถือกับแอปที่รันบนโน้ตบุ๊ก จะได้การเชื่อมต่อที่ตรงและปลอดภัยระหว่างกันจริงหรือไม่ หรือมันกำลังแก้ปัญหาอีกแบบหนึ่งอยู่
-[0]: p2p chat, in rust, from scratch: https://www.youtube.com/watch?v=ogN_mBkWu7o
ปีที่แล้วตอนต้องเลือกหนึ่งในสอง ผมเลือกตัวที่คุ้นเคยกว่า แต่ตอนนี้รู้สึกว่า ฝั่ง Iroh มีแรงส่งที่ชัดเจนกว่า
ตรงนี้ใช้ Tor daemon อยู่ Tor มี implementation ภาษา Rust และถ้าใช้จาก Rust ก็สามารถใช้งานในรูปแบบคล้าย stream object ได้
ดูตัวอย่างการใช้งานได้ที่ https://gitlab.torproject.org/tpo/core/oniux
strategy pattern กับการจัดการฟีเจอร์แบบรวมศูนย์ก็ดี
ไม่แน่ใจว่าในวิดีโอมีพูดถึง “Dial keys” หรือเปล่า แต่ผมคิดว่าย่อหน้าแรกควรทำให้ชัดว่าเป็นคีย์ประเภทไหนและทำไมถึงจำเป็น
ว่าเป็นคีย์เข้ารหัสลับหรือไม่ เป็นคีย์แบบอสมมาตรหรือเปล่า หรืออย่างน้อยก็ควรอธิบายว่ามันทำงานอย่างไรในระดับพื้นฐานที่สุด ตอนนี้กลับกระโดดไปพูดถึงข้ออ้างเชิงนามธรรมเรื่องความเหนือกว่าและสถิติการใช้งานทันที
ดูเหมือนว่ารีเลย์จะมีส่วนเกี่ยวข้อง ซึ่งก็ควรบอกมาตั้งแต่แรก ไม่ใช่ปล่อยให้คนไปขุดหาเอาเองจากกระทู้ HN
เริ่มจาก https://docs.iroh.computer/what-is-iroh แล้วก็มีส่วนอธิบายวิธีการทำงานต่อ จากที่ดูจนถึงตอนนี้ เอกสารถือว่าทำได้ดี และคำถามที่โผล่มาก็ดูจะมีคำตอบค่อนข้างไว
มันอาจจะกระจายศูนย์ อาจฟรี และอาจไม่เป็นเอกเทศ แต่ถ้ามองกว้าง ๆ ก็ยังอยู่ในหมวดเดียวกัน
.ssh/configแต่พอฟังต่อกลับเหมือนเป็นวิธีทำเครือข่ายแบบใหม่บน QUIC
สรุปแบบ Lobste.rs จากคนที่ไม่ใช่ผู้เชี่ยวชาญและเพิ่งเห็นโปรเจกต์นี้วันนี้คือ: มันใกล้เคียงกับชุดตั้งค่า WebRTC แบบมีความเห็นชัดเจนที่กำหนด persistent ID ให้ไคลเอนต์ งานสร้าง signaling server ถูกจัดการไว้แล้ว และแนวทางแก้ปัญหาก็ดูทั่วไปพอและราคาถูกพอจนใช้เซิร์ฟเวอร์ที่ชุมชนโฮสต์ก็ได้ คล้าย ๆ กับสิ่งที่ได้จากโครงสร้างพื้นฐาน P2P gamenetworkingsocket แบบผูกขาดของ Steam อยู่บ้าง
https://lobste.rs/s/cslljn/iroh_1_0_dial_keys_not_ips#c_s3na...
ผมไม่เข้าใจตั้งแต่แรกว่ามันกำลังพยายามแก้ปัญหาอะไรอยู่ IP กับ DNS ก็ทำงานได้ดีอยู่แล้ว
เรามีทั้งIPv6 และ QUICอยู่แล้ว และถ้าจะให้เกิดแรงดึงดูดที่มีความหมายในพื้นที่นี้ ก็ต้องมีทั้งผู้ขายและซอฟต์แวร์หลักเข้าร่วม
เอาแบบเป็นรูปธรรม สมมติว่ามีอุปกรณ์หนึ่งอยู่หลัง NAT ของ WLAN ที่บ้าน และอีกอุปกรณ์หนึ่งอยู่บนเครือข่าย 4G หรืออยู่หลัง NAT คนละตัวในบริษัท
ในหลายกรณี hole punching สามารถสร้างการเชื่อมต่อโดยตรงระหว่างอุปกรณ์ทั้งสองได้อย่างรวดเร็วมาก ทำให้ได้ทั้งแบนด์วิดท์สูงสุดและ latency ต่ำสุดเท่าที่เป็นไปได้
ปัญหานี้ยังไม่ใช่ปัญหาที่ถูกแก้ไปแล้วจนจบ
เพราะใน TCP/IP ไม่มี session layer ที่แท้จริง vMotion จึงมักทำได้แค่ภายใน broadcast domain เดียว ในสถานการณ์นั้นการระบุตำแหน่งจริง ๆ ใช้แค่ MAC address และแม้ MAC address จะเปลี่ยนหลัง vMotion ก็ยังใช้ IP เป็นตัวระบุที่เสถียรได้ การแมปถูกจัดการโดยตาราง MAC address ของสวิตช์
อนาคตของเครือข่ายคือการกระจายศูนย์ ผมชอบ Yggdrasil กับ I2P มาก
เราควรซื้อ mini PC สักเครื่องมารัน 24 ชั่วโมงเพื่อโฮสต์สิ่งที่ต้องการ แล้วเชื่อมต่อกับคนอื่นได้อย่างลื่นไหล คนสายเทคนิคหลายคนก็มีเครื่องสำรองเก่า ๆ ที่ตอนนี้ได้แต่นอนกินฝุ่นอยู่แล้ว และเอามาทำเป็นเซิร์ฟเวอร์ได้
ในระยะยาวมันถูกกว่าและดูแลง่ายกว่าการต้องจัดการโดเมนกับโฮสติ้งเซิร์ฟเวอร์มาก ผมชื่นชมงานของทีม Iroh อย่างจริงใจ
Iroh ใช้งานด้วยแล้วดีมากจริง ๆ และวิศวกรในช่อง Discord ก็เป็นมิตรมาก
แนวทางเชิงปฏิบัติที่ทำให้ P2P ใช้งานได้จริงนั้นเข้าใจง่าย และคอนเทนต์ในช่อง YouTube ก็ดีมากด้วย ยินดีกับการออก v1
https://youtube.com/@n0computer
มันไม่แปลกเหรอที่โปรโตคอลที่พยายามทำหน้าที่คล้าย IP address กลับมีป้ายราคาติดอยู่ด้วย? หรือผมอาจกำลังเข้าใจอะไรผิดไป
เพียงแต่เพื่อชดเชยต้นทุนการพัฒนา พวกเขาจึงมีบริการเสริมที่ช่วยให้การ deploy และการปฏิบัติการง่ายขึ้น โดยเฉพาะสำหรับกรณีใช้งานที่ใหญ่หรือเฉพาะทางมากขึ้น
อยู่ในสภาพที่ “อยากเป็นโครงสร้างพื้นฐานสำหรับคนทั่วไป และเป็นธุรกิจสำหรับผู้เชี่ยวชาญ”
ติดอยู่ระหว่าง “ต้องมีเงินถึงจะรันได้” กับ “อยากเป็นระบบโครงสร้างพื้นฐานสาธารณะ” และด้านลบของการเป็นบริษัทแสวงกำไรก็ถูกปัดด้วยคำว่า “แต่มันโอเพนซอร์สนะ”
ถ้าคำว่า “โอเพนซอร์ส” ไม่ได้พ่วงมาพร้อม codebase ที่ปรับแต่งจนสุดทางและไม่มีใครเข้าใจ ผมคิดว่าแนวคิดธุรกิจแบบนี้ก็พอรับได้ในระดับหนึ่ง
การรัน ISP หรือ AS ต้องใช้เงินจำนวนมากอยู่แล้วแน่นอน
บริษัทผมใช้ Iroh ในโปรดักชันอยู่ และชอบมากจริง ๆ
ถ้าจะอธิบายแบบสั้น ๆ ผมคงเรียกมันว่า hole punching สไตล์ Tailscale ที่มาในรูป Rust crate แต่แน่นอนว่าคุณยังต่อยอดฟีเจอร์ P2P เจ๋ง ๆ ได้อีกมากบนการเชื่อมต่อ QUIC พื้นฐาน
บริษัทเรานำ Iroh ไปใช้กับระบบฝึกแมชชีนเลิร์นนิงแบบกระจายในโปรดักชัน และพอใจมาก
แม้ก่อนจะมีสัญญาซัพพอร์ตระดับองค์กร ทีมงานก็ตอบสนองได้เร็วอย่างเหลือเชื่อ มีความรู้ลึกมาก และตัวไลบรารีเองก็ทำงานได้ดีอย่างน่าทึ่ง ถ้าให้เลือกอีกครั้ง ผมก็จะใช้ไลบรารีนี้แทน libp2p ทุกเมื่อ
ยินดีด้วยกับการเปิดตัว
จำเป็นอย่างเร่งด่วนที่จะต้องมีหน้า versus สำหรับเปรียบเทียบกับ tailscale/netbird/netmaker/zerotier/twingate/openziti
ถ้าดูจากกรณีการใช้งานอย่างเดียว ตอนนี้ยังมองไม่เห็นว่าอะไรที่ทำไม่ได้ด้วย Tailscale
ความคิดเห็นจาก Lobste.rs
ดูเหมือนว่าทั้งที่นี่และบน HN หลายคนจะสับสนว่า Iroh ต่างจากเมชเน็ตเวิร์กที่ครอบอยู่บน VPN (เช่น Tailscale, ZeroTier, Netbird ฯลฯ) อย่างไร เท่าที่ผมเข้าใจ Iroh มีไว้สำหรับนักพัฒนาแอปที่อยากให้เครื่องที่รันแอปของตัวเองสื่อสารกันแบบ P2P ส่วนเมชเน็ตเวิร์กมีไว้สำหรับผู้ดูแลเครือข่ายที่ต้องการเชื่อมต่ออุปกรณ์ที่ตนเป็นเจ้าของหรือดูแลเข้าหากัน
ยกตัวอย่างว่าถ้าจะทำแอปส่งข้อความแบบ P2P ผู้ใช้ฝั่งหนึ่งอาจเป็นอุปกรณ์พกพาที่สลับไปมาระหว่าง WiFi กับข้อมูลมือถืออยู่ตลอด จึงไม่มีแอดเดรสที่เสถียร ส่วนอีกฝั่งอาจเป็นโน้ตบุ๊กที่อยู่หลัง NAT และ CGNAT
ถ้าต้องการให้ทั้งสองเครื่องสื่อสารกันได้แม้ IP address จะเปลี่ยนไป ก็จำเป็นต้องมีกลไกมาจัดการเรื่องนี้
ในอดีตมักเป็นวิธีที่ทั้งสองเอนด์พอยต์เชื่อมต่อเข้าหา เซิร์ฟเวอร์ตัวกลาง ที่นักพัฒนาแอปเป็นผู้ดูแล แล้วแชร์สถานะกัน แต่ Iroh ดูจะใกล้เคียงกับการทำให้สิ่งนี้เป็นมาตรฐานและให้บริการมันในรูปแบบเซอร์วิสมากกว่า
คล้ายเล็กน้อยกับสิ่งที่ได้จากโครงสร้างพื้นฐาน P2P
gamenetworkingsocketแบบปิดของ Steamอาจมีอะไรที่ผมพลาดไป แต่การเอาทุกอย่างไปผูกไว้กับ คีย์เดียว ดูเสี่ยงมาก อยากรู้ว่าถ้าคีย์นั้นหายหรือถูกขโมยจะเกิดอะไรขึ้น
ผมลองค้นหา “key rotation” แบบเร็ว ๆ ในเอกสารของ Iroh แต่หาไม่เจอ
บางแอปที่ใช้ Iroh เก็บคีย์แบบถาวร ขณะที่บางแอปสร้างใหม่ทุกเซสชัน
ถ้า private key รั่ว ผู้โจมตีสามารถปลอมเป็นผมได้เวลาจะเริ่มหรือรับการเชื่อมต่อ ถ้าคีย์หาย ผมก็จะไม่สามารถพิสูจน์ตัวตนของตัวเองต่อเพียร์ได้ เท่าที่ผมเข้าใจ ความเสี่ยงก็คล้ายกับกรณีที่รหัสผ่านหรือ private key ทั่วไปสูญหายหรือถูกขโมย
แล้วมีทางเลือกอื่นที่คล้ายกันไหม? Host Identity Protocol? https://mkomu.kapsi.fi/hipl/index.php?index=how
ผมกำลังพยายามทำความเข้าใจโปรเจกต์นี้ แต่ยังไม่ค่อยเห็นภาพ ความต่างระหว่างคีย์กับ IP สุดท้ายแล้วในจุดใดจุดหนึ่งคีย์ก็ต้องถูกแมปเป็น IP address เพื่อใช้ IP routing ไม่ใช่หรือ?
คีย์เป็นเหมือนตัวระบุที่อยู่ได้นานและครอบอยู่บน IP address เพื่อมาแทน URL หรือ DNS หรือเปล่า?
เมื่อพยายามเชื่อมต่อโหนดหนึ่งไปยังอีกโหนดด้วยคีย์ มันจะไปค้นหาคีย์นั้นจากรีเลย์เซิร์ฟเวอร์ตัวใดตัวหนึ่ง แล้วลองหลายวิธีตั้งแต่เชื่อมต่อ IP โดยตรง, hole punching ไปจนถึงการเชื่อมต่อผ่านรีเลย์เซิร์ฟเวอร์ในท้ายที่สุด
นอกจากนี้คีย์ยังใช้สำหรับ การเข้ารหัสแบบต้นทางถึงปลายทาง ผ่าน QUIC ด้วย
มีวิธีโฮสต์ รีเลย์เซิร์ฟเวอร์ เองสำหรับแอปเฉพาะทางไหม? ดูเหมือนจะทำได้ แต่พอเห็นว่ามีหน้า pricing สำหรับรีเลย์โดยเฉพาะก็รู้สึกแปลกนิดหน่อย
รีเลย์แบบโฮสต์ให้มีเป้าหมายเพื่อมอบสิ่งนี้โดยไม่ต้องยุ่งยากกับการดูแลเซิร์ฟเวอร์เอง และเพื่อให้มองเห็นภาพของเครือข่ายได้มากขึ้น
อันนี้ให้ความรู้สึกว่าใกล้กับ Reticulum มากกว่า Yggdrasil หรือ Netbird
เข้าใจยากว่ามันคืออะไร ทำให้นึกถึง Yggdrasil แต่ก็ยังไม่แน่ใจว่าทั้งสองอย่างเทียบกันอย่างไร