Fly.io के WireGuard सुधार
- Fly.io कंटेनरों को VM में बदलकर दुनिया भर के हार्डवेयर पर Firecracker की शक्ति का उपयोग करते हुए चलाता है.
- यह WireGuard का व्यापक उपयोग करता है, और अब यह customer API का हिस्सा बन गया है.
- हर बार
flyctl CLI चलाने पर यह एक TCP/IP stack बनाता है और एक unique IPv6 address का उपयोग करके Fly Machines से सीधे संचार करता है.
- इस approach के अपने फायदे और नुकसान हैं, और इसमें कुछ सुधार किए गए हैं.
पहले की स्थिति
- दुनिया भर में मौजूद "gateway" server WireGuard connections स्वीकार करते थे और उन्हें उचित private network से जोड़ते थे.
- हर बार
flyctl चलाने पर एक background agent process बनाया जाता था या उससे connect किया जाता था.
- agent GraphQL API में नई WireGuard peer configuration बनाता था.
- API, NATS messaging system के जरिए उचित gateway को peer configuration भेजता था.
- gateway पर
wggwd service configuration प्राप्त करके उसे SQLite database में सहेजती थी और kernel में जोड़ती थी.
- API, GraphQL request के जवाब में configuration लौटाता था, और
flyctl WireGuard peer से connect करता था.
- NATS तेज़ है, लेकिन delivery की guarantee नहीं देता और gateways पर बचे पुराने peers को साफ़ नहीं करता.
बेहतर तरीका
- WireGuard peers को store करने के लिए किसी जटिल database की ज़रूरत नहीं होती.
- इसे इस तरह बदला गया कि gateway ज़रूरत पड़ने पर हर बार API से configuration ले.
- client जब connection चाहे तभी peer को kernel में जोड़ा जा सकता है, और ज़रूरत न होने पर हटाया जा सकता है.
JIT WireGuard peers संभव बनाना
- Linux kernel का WireGuard configuration interface Netlink का उपयोग करता है.
- WireGuard connection request packets को BPF filter और packet socket की मदद से पहचाना और intercept किया जा सकता है.
- WireGuard में "client" और "server" की अवधारणा नहीं है; यह एक point-to-point protocol है.
- जब
flyctl gateway को UDP packet भेजता है, तो वह handshake initiation होता है.
- BPF filter का उपयोग करके incoming connections को पकड़ा जा सकता है.
- यह Noise protocol framework पर आधारित है, इसलिए request की पहचान करने के लिए encryption खोलना पड़ता है.
- एक event feed बनाकर gateway से connect करने की कोशिश करने वाले सभी users की public keys प्राप्त की जा सकती हैं.
- हर बार नया peer दिखने पर internal HTTP API request के जरिए उस peer की जानकारी लाकर install किया जाता है.
ऐप्स को मिनटों में लॉन्च करना
- Fly.io पर apps को तेज़ी से deploy किया जा सकता है और अपना JIT WireGuard peer पाया जा सकता है.
ग्राफ़ पर एक नज़र
- इस system को कुछ हफ़्तों तक चलाने के बाद gateways पर बचे पुराने WireGuard peers की संख्या में उल्लेखनीय कमी आई.
- gateways कम state बनाए रखते हैं और peer configuration पहले से तेज़ हो गई है.
- Grafana chart के जरिए migration वाले दिन के सफल नतीजे साझा किए गए हैं.
GN⁺ की राय
- Fly.io का WireGuard सुधार network performance और reliability को काफ़ी बेहतर बनाने का एक अच्छा उदाहरण है.
- यह approach खासकर cloud-based services में network traffic management और security को मज़बूत करने में मदद कर सकता है.
- इसी तरह की functionality देने वाले दूसरे projects में Tailscale और ZeroTier शामिल हैं, जो personal और enterprise users को VPN alternatives देते हैं.
- WireGuard अपनाते समय network configuration, security policies, compatibility जैसी बातों पर ध्यान देना चाहिए.
- इस तकनीक से मिलने वाले फायदे तेज़ performance और सरल configuration हैं, लेकिन existing infrastructure के साथ integration या management के स्तर पर चुनौतियाँ हो सकती हैं.
1 टिप्पणियां
Hacker News की राय