संबंधित गाइड
WireGuard को गहराई से समझें: यह कैसे काम करता है और कैसे आगे बढ़ा
अपडेट किया गया
WireGuard एक ओपन-सोर्स VPN प्रोटोकॉल है, जिसे Jason A. Donenfeld ने डिज़ाइन किया। यह 2015 के आसपास सामने आया और 2020 में आधिकारिक तौर पर Linux kernel में शामिल हुआ। इसकी ख़ासियत एक शब्द में कहें तो: कम। कोड कम है, इसका मुख्य हिस्सा बस कुछ हज़ार लाइनों का है, जबकि OpenVPN और IPsec लाखों लाइनों के आसपास हैं। विकल्प कम हैं, एन्क्रिप्शन एल्गोरिदम का एक ही तय सेट है, चुनने का झंझट नहीं। स्टेट कम है, "कनेक्ट हो रहा है" या "डिस्कनेक्ट" जैसी कोई चीज़ नहीं; डेटा हो तो भेजता है, न हो तो चुप रहता है। इसी कमी से यह तेज़ है, बैटरी कम खाता है और इसकी जाँच (audit) आसान है; और यहीं से इसकी सीमाएँ भी आती हैं: सिर्फ़ UDP, कोई छिपाव नहीं, और कीज़ बाँटने का कोई इंतज़ाम नहीं। नीचे पहले यह कि यह काम कैसे करता है, फिर यह कि यह धीरे-धीरे नई पीढ़ी के VPN की नींव कैसे बना।
डिज़ाइन का विचार: VPN को एक नेटवर्क कार्ड जैसा बनाना
WireGuard से पहले मुख्य विकल्प IPsec और OpenVPN थे। IPsec मानकों का एक बड़ा परिवार है, इसमें सेटिंग्स बेहिसाब हैं, और अलग-अलग कंपनियों के उपकरणों को आपस में जोड़ना बदनाम रूप से सिरदर्द है। OpenVPN यूज़र स्पेस में चलता है और एक भारी-भरकम TLS लाइब्रेरी पर टिका है; लचीला है, पर धीमा। दोनों का कोड इतना बड़ा है कि शायद ही कोई उसे पूरा जाँच पाए।
WireGuard का विचार उल्टा है: एक ही काम करो, और उसे सही करो। सिस्टम में यह एक वर्चुअल नेटवर्क कार्ड (जैसे wg0) के रूप में दिखता है। आप इस कार्ड को अपनी प्राइवेट की और सामने वाले कुछ डिवाइसों की पब्लिक की देते हैं; इसमें भेजा गया हर पैकेट एन्क्रिप्ट होकर बाहर जाता है, और आने वाला पैकेट डिक्रिप्ट होकर इसी से निकलता है। बाक़ी सब, यानी रूटिंग, फ़ायरवॉल, IP पता देना, सिस्टम के पहले से मौजूद टूल्स के ज़िम्मे है।
यह किन चीज़ों को जान-बूझकर नहीं करता, यह भी साफ़ है: एल्गोरिदम पर मोलभाव नहीं, यूज़रनेम-पासवर्ड नहीं, IP पता देना नहीं, ट्रैफ़िक छिपाना नहीं। इनमें से कुछ को कमज़ोरियों की जड़ माना गया, और बाक़ी ऊपर की परत के टूल्स पर छोड़ दिए गए।
Cryptokey routing: पब्लिक की ही पहचान है
WireGuard में हर डिवाइस के पास कीज़ की एक जोड़ी होती है, और उसकी पब्लिक की ही उसकी पहचान है, कुछ-कुछ SSH की तरह: दोनों तरफ़ एक-दूसरे की पब्लिक की अपनी कॉन्फ़िग में लिख दें, बस भरोसा बन गया। न सर्टिफ़िकेट, न यूज़रनेम-पासवर्ड।
कॉन्फ़िग में हर सामने वाले डिवाइस (peer) के लिए "इजाज़त वाले पते" (AllowedIPs) लिखे जाते हैं। यह दोनों दिशाओं को संभालता है: पैकेट भेजते समय, मंज़िल का पता जिस peer की रेंज में आता है, उसी की पब्लिक की से एन्क्रिप्ट करके उसी को भेजा जाता है; पैकेट आने पर, डिक्रिप्ट करके देखा जाता है कि भेजने वाले का पता उस peer की रेंज में है या नहीं, न हो तो पैकेट फेंक दिया जाता है। इस तरीक़े को cryptokey routing कहते हैं: रूटिंग टेबल और एक्सेस कंट्रोल एक ही टेबल में मिल जाते हैं।
इसलिए अगर किसी peer के AllowedIPs में 0.0.0.0/0 लिख दें, तो मतलब है "सारा ट्रैफ़िक इसी को दो", यानी जिसे आमतौर पर फ़ुल (ग्लोबल) VPN कहते हैं; और अगर सिर्फ़ एक अंदरूनी नेटवर्क की रेंज लिखें, तो टनल तभी इस्तेमाल होगा जब उस रेंज तक जाना हो।
हैंडशेक और एन्क्रिप्शन: एल्गोरिदम का एक तय सेट
दो डिवाइस पहली बार बात करने से पहले हैंडशेक करते हैं: शुरू करने वाला एक पैकेट भेजता है, जवाब देने वाला एक पैकेट लौटाता है, एक बार आना-जाना और काम पूरा; दोनों को सेशन कीज़ का एक सेट मिल जाता है जो सिर्फ़ कुछ समय के लिए है। हैंडशेक Noise protocol framework पर आधारित है: दोनों की लंबी अवधि वाली कीज़ से एक-दूसरे की पहचान पक्की होती है, और साथ में अस्थायी कीज़ से forward secrecy मिलती है, यानी अगर आगे चलकर लंबी अवधि वाली प्राइवेट की लीक भी हो जाए, तो पहले रिकॉर्ड किया गया ट्रैफ़िक फिर भी नहीं खुल सकता।
सेशन कीज़ हर कुछ मिनट में अपने-आप बदलती रहती हैं; यूज़र को कुछ पता नहीं चलता, और "दोबारा कनेक्ट" जैसी कोई चीज़ होती ही नहीं।
एल्गोरिदम तय हैं: की एक्सचेंज के लिए Curve25519, डेटा एन्क्रिप्शन के लिए ChaCha20-Poly1305, हैश के लिए BLAKE2s। मोलभाव नहीं, तो downgrade attack भी नहीं: हमलावर दोनों तरफ़ को किसी कमज़ोर एल्गोरिदम पर लाने के लिए बहका नहीं सकता। अगर भविष्य में इनमें से कोई एल्गोरिदम टूट जाए, तो इलाज है प्रोटोकॉल का नया वर्ज़न लाकर पूरा बदल देना, कोई नया विकल्प जोड़ना नहीं।
इसके ऊपर एक pre-shared key भी जोड़ी जा सकती है, जो पब्लिक की वाले तरीक़े के साथ मिलकर काम करती है; इसका मक़सद है भविष्य के क्वांटम कंप्यूटरों से पब्लिक-की एल्गोरिदम पर आने वाले ख़तरे से बचाव।
सिर्फ़ UDP, अनजान को जवाब नहीं, नेटवर्क बदलने पर भी जुड़ा रहता है
- सिर्फ़ UDP: WireGuard हर पैकेट को अलग से एन्क्रिप्ट करके एक UDP पैकेट में डालकर भेजता है। TCP इस्तेमाल न करना सोच-समझकर लिया गया फ़ैसला है: TCP के अंदर TCP चलाएँ तो दोनों परतें री-ट्रांसमिट करती हैं, और पैकेट लॉस होने पर एक-दूसरे को नीचे खींचती हैं।
- अनजान को जवाब नहीं: जो पैकेट ऑथेंटिकेशन पास नहीं करता, उसका कोई जवाब नहीं जाता। पोर्ट स्कैन करने वाले को यह पोर्ट बंद जैसा दिखता है; उसे पता ही नहीं चल सकता कि यहाँ WireGuard चल रहा है।
- रोमिंग: WireGuard "कनेक्शन" को नहीं मानता, सिर्फ़ पब्लिक की को मानता है। सामने वाले का पता बदल जाए, जैसे फ़ोन Wi‑Fi से मोबाइल डेटा पर चला जाए, तो उसका अगला पैकेट ऑथेंटिकेशन पास करते ही इधर से जवाब अपने-आप नए पते पर जाने लगता है। इसलिए नेटवर्क बदलने पर टनल नहीं टूटता।
- चुप रहना: भेजने को डेटा न हो तो टनल कोई ट्रैफ़िक नहीं बनाता, इसीलिए फ़ोन पर बैटरी बहुत बचती है। सिर्फ़ तब, जब डिवाइस किसी राउटर के पीछे हो और उसे हर समय सामने वाले की पहुँच में रहना हो, PersistentKeepalive चालू करना पड़ता है, जो हर कुछ दस सेकंड में एक छोटा पैकेट भेजकर राउटर की मैपिंग ज़िंदा रखता है।
यह तेज़ क्यों है
- kernel में चलता है: Linux पर WireGuard एक kernel module है, इसलिए पैकेट को kernel और यूज़र प्रोग्राम के बीच बार-बार कॉपी नहीं करना पड़ता; OpenVPN पारंपरिक रूप से यूज़र स्पेस में चलता है, जहाँ हर पैकेट को एक चक्कर ज़्यादा लगाना पड़ता है।
- एल्गोरिदम हर CPU पर अच्छा चलता है: ChaCha20 किसी ख़ास हार्डवेयर एक्सेलेरेशन निर्देश पर निर्भर नहीं, इसलिए फ़ोन और राउटर जैसे चिप पर, जिनमें AES निर्देश नहीं होते, इसका ख़ास फ़ायदा मिलता है।
- हैंडशेक छोटा: एक बार आने-जाने के बाद ही डेटा भेजा जा सकता है, कनेक्शन बनने में लगभग कोई इंतज़ार नहीं।
- कोड कम: रास्ता छोटा है, और जितना ऑप्टिमाइज़ेशन हो सकता था, वह उन्हीं कुछ अहम क़दमों पर किया गया है।
- ध्यान रहे, ये बातें प्रोटोकॉल और उसके इम्प्लीमेंटेशन के अपने ख़र्च की हैं। बॉर्डर पार वाली लाइनों पर असली स्पीड ज़्यादातर लाइन के पैकेट लॉस और इंटरनेट कंपनी के UDP के प्रति रवैये पर निर्भर करती है।
सफ़र: एक व्यक्ति के प्रोजेक्ट से kernel तक
- 2015 के आसपास: Jason A. Donenfeld ने WireGuard बनाना शुरू किया और इसे सार्वजनिक किया; शुरू में यह Linux का एक अलग kernel module था।
- 2017: इसके डिज़ाइन पर पेपर नेटवर्क सिक्योरिटी कॉन्फ़्रेंस NDSS में छपा, और उसके बाद प्रोटोकॉल की कई स्वतंत्र formal verification हुईं। लगभग इसी समय Mullvad जैसे VPN प्रोवाइडर WireGuard कनेक्शन देने लगे।
- 2018: Linux के निर्माता Linus Torvalds ने मेलिंग लिस्ट में इसके कोड की तारीफ़ की और कहा कि OpenVPN और IPsec के मुक़ाबले यह एक कलाकृति है; इस बात से यह डेवलपर्स के बीच ख़ूब मशहूर हुआ।
- 2019: Cloudflare ने Rust में लिखा यूज़र-स्पेस इम्प्लीमेंटेशन BoringTun जारी किया और WireGuard को अपने WARP में लगाया; NordVPN ने WireGuard पर आधारित NordLynx लॉन्च किया; Tailscale ने भी इसी दौर में WireGuard को डेटा प्लेन बनाकर शुरुआत की।
- मार्च 2020: WireGuard Linux 5.6 के साथ आधिकारिक तौर पर kernel की मुख्य शाखा में आया, और साथ ही 1.0 वर्ज़न जारी हुआ। तब से बड़े Linux डिस्ट्रिब्यूशन में WireGuard पहले से मौजूद है, अलग module लगाने की ज़रूरत नहीं। उसी साल OpenBSD ने भी इसे अपने kernel में जोड़ा।
- 2021: Windows के लिए kernel-स्तर का इम्प्लीमेंटेशन WireGuardNT आया, जो पहले वाले यूज़र-स्पेस इम्प्लीमेंटेशन से काफ़ी तेज़ है; उसके बाद FreeBSD में भी kernel इम्प्लीमेंटेशन आ गया।
- आज: Windows, macOS, Linux, iOS और Android सबके आधिकारिक क्लाइंट हैं; OpenWrt, Synology जैसे राउटर और NAS सिस्टम में आमतौर पर सपोर्ट पहले से है; और ज़्यादातर कमर्शियल VPN इसे डिफ़ॉल्ट या वैकल्पिक प्रोटोकॉल के रूप में देते हैं।
यह क्या नहीं करता, और इससे आने वाली सीमाएँ
- कीज़ बाँटने का इंतज़ाम नहीं: हर नया डिवाइस जोड़ने पर उसकी पब्लिक की बाक़ी सभी डिवाइसों की कॉन्फ़िग में लिखनी पड़ती है। डिवाइस बढ़ें तो यह संभालना मुश्किल हो जाता है, और Tailscale जैसे टूल ठीक इसी वजह से बने हैं।
- IP पता अपने-आप नहीं देता: हर peer का अंदरूनी पता कॉन्फ़िग में पक्का लिखा होता है; OpenVPN जैसा "जुड़ते ही एक पता दे दो" वाला तरीक़ा इसमें नहीं है। कमर्शियल VPN इसे इस्तेमाल करते समय ऊपर से अपनी एक परत अलग बनाते हैं।
- प्राइवेसी की चिंता: जवाब भेजने के लिए सर्वर को हर peer का आख़िरी पब्लिक पता याद रखना पड़ता है। जिन VPN प्रोवाइडर का वादा "कोई लॉग नहीं" है, उन्हें आमतौर पर इसके लिए अलग से इंतज़ाम करना पड़ता है (जैसे समय-समय पर मिटाना, या दोहरा address translation)।
- सिर्फ़ UDP: जिन नेटवर्क में UDP ब्लॉक है या उसकी स्पीड सीमित है, वहाँ यह चलता नहीं या बहुत धीमा चलता है। इसे TCP या पोर्ट 443 पर चलाना हो तो बाहर से कोई दूसरा टूल लपेटना ही पड़ता है।
- कोई छिपाव नहीं: हैंडशेक और डेटा पैकेट का फ़ॉर्मेट और लंबाई तय पैटर्न वाले हैं, इसलिए इसे पहचानना आसान है। इसका लक्ष्य सुरक्षा और सादगी है, सेंसरशिप से बचना नहीं।
- अकाउंट सिस्टम नहीं: प्रोटोकॉल में यूज़रनेम, पासवर्ड या एक्सपायरी जैसी कोई चीज़ नहीं; यह सिर्फ़ पब्लिक की पहचानता है।
OpenVPN और IPsec से तुलना
- कोड का आकार: WireGuard का मुख्य हिस्सा कुछ हज़ार लाइनें; OpenVPN अपनी TLS लाइब्रेरी के साथ, और IPsec के अलग-अलग इम्प्लीमेंटेशन, सब लाखों लाइनों के आसपास।
- ट्रांसपोर्ट: WireGuard में सिर्फ़ UDP; OpenVPN दोनों पर चल सकता है, और TCP 443 पर HTTPS ट्रैफ़िक वाले पोर्ट में घुल-मिल सकता है; IPsec अपना protocol number और UDP 500 / 4500 इस्तेमाल करता है।
- कॉन्फ़िगरेशन: WireGuard में एक peer की कुछ ही लाइनें; OpenVPN की कॉन्फ़िग फ़ाइल में ढेरों विकल्प हैं पर लचीलापन भी पूरा; IPsec सबसे पेचीदा।
- परफ़ॉर्मेंस: साफ़ नेटवर्क पर WireGuard आमतौर पर सबसे तेज़ और सबसे कम बैटरी खाने वाला है; OpenVPN के नए वर्ज़न में भी kernel एक्सेलेरेशन (DCO) आ गया है, इसलिए फ़ासला घट रहा है।
- फ़ीचर: यूज़रनेम-पासवर्ड से लॉग इन, पते और रूट अपने-आप भेजना, TCP पर चलना, ये सब OpenVPN में पहले से हैं; WireGuard में ये बाहर के सिस्टम से पूरे करने पड़ते हैं।
- डिवाइस सपोर्ट: OpenVPN का इतिहास लंबा है, पुराने राउटर, NAS और तरह-तरह के embedded डिवाइस लगभग सभी इसे पहचानते हैं; WireGuard पिछले कुछ सालों के सिस्टम में आम हो चुका है, पर पुराने डिवाइस पर ज़रूरी नहीं कि हो।
WireGuard के ऊपर बनी चीज़ें
- Tailscale: WireGuard के ऊपर लॉग इन, कीज़ बाँटना, NAT traversal और रिले जोड़कर अपने-आप बनने वाला नेटवर्क तैयार करता है; देखें Tailscale को गहराई से समझें। Headscale इसका ओपन-सोर्स कंट्रोल सर्वर है।
- Netmaker, NetBird, Firezone वग़ैरह: ये भी "डेटा के लिए WireGuard, मैनेजमेंट अपना" वाले नेटवर्किंग या zero-trust प्रोडक्ट हैं।
- Cloudflare WARP: आम यूज़र के लिए WireGuard क्लाइंट, जो ट्रैफ़िक को Cloudflare के नेटवर्क में भेजता है।
- कमर्शियल VPN के अपने पैकेज: जैसे NordLynx, जो WireGuard के बाहर पता देने और प्राइवेसी की एक परत जोड़ते हैं।
- AmneziaWG जैसे बदले हुए रूप: ये पैकेट हेडर और पैडिंग बदलकर WireGuard के तय पैटर्न छिपाते हैं, ताकि सख़्त जाँच वाले नेटवर्क पर चल सकें; ये स्टैंडर्ड WireGuard क्लाइंट के साथ काम नहीं करते।
चीन के नेटवर्क पर
- चलेगा या नहीं, यह सबसे पहले UDP पर निर्भर है: कई ब्रॉडबैंड और मोबाइल नेटवर्क भारी UDP ट्रैफ़िक की स्पीड सीमित करते हैं; नतीजा यह कि जुड़ते समय तेज़, थोड़ी देर बाद धीमा, या शाम के पीक में साफ़ अटकना।
- सीधा बॉर्डर पार कनेक्शन आसानी से पहचाना जाता है: WireGuard के हैंडशेक पैकेट का पैटर्न तय है, इसलिए बॉर्डर पार वाले रास्ते पर इसे पहचानकर रोका जा सकता है; नतीजा यह कि हैंडशेक ही नहीं होता, या कुछ देर चलने के बाद ट्रैफ़िक रुक जाता है। यह प्रोटोकॉल में छिपाव न होने का सीधा नतीजा है।
- चीन के अंदर के डिवाइसों के बीच नेटवर्क (ऑफ़िस और घर, फ़ोन और NAS) बॉर्डर पार वाले रास्ते से नहीं गुज़रता, इसलिए आमतौर पर यह दिक़्क़त नहीं होती; असर बस UDP की स्पीड सीमा और NAT में सीधा रास्ता बनने (hole punching) की कामयाबी का होता है।
- इसलिए यह नेटवर्क जोड़ने और रिमोट एक्सेस के लिए ज़्यादा ठीक है; लंबे समय तक स्थिर बॉर्डर पार कनेक्शन के लिए साथ में कोई छिपाव वाला या TCP / TLS पर चलने वाला तरीक़ा चाहिए; अलग-अलग प्रोटोकॉल की तुलना VPN प्रोटोकॉल की तुलना में है।
LeoTun में WireGuard कहाँ इस्तेमाल होता है
LeoTun का "निजी" सेक्शन Tailscale इस्तेमाल करता है, और उसका डेटा प्लेन WireGuard ही है: डिवाइसों के बीच के टनल हों या अलग-अलग रीजन के एग्ज़िट नोड तक के टनल, एन्क्रिप्शन और ट्रांसफ़र यही करता है। आपको ख़ुद कीज़ बनाने या कॉन्फ़िग लिखने की ज़रूरत नहीं; इस साइट के अकाउंट से लॉग इन करते ही क्लाइंट सब अपने-आप कर देता है। इस्तेमाल का तरीक़ा निजी नेटवर्क (Tailscale) क्या है में है, और शुरुआत निजी नेटवर्क पेज से।
निजी नेटवर्क के अलावा उसी अकाउंट में ऐसे तरीक़े भी हैं जो UDP पर निर्भर नहीं: Cisco (AnyConnect) TLS पर चलता है, OpenVPN TCP पर चल सकता है, और Hiddify (Hysteria2) ख़ास तौर पर पैकेट लॉस से निपटने के लिए है। अगर आपके नेटवर्क पर निजी नेटवर्क धीमा और अस्थिर हो, तो बस तरीक़ा बदल लें; देखें कौन-सा कनेक्शन तरीक़ा किस हालात के लिए सही है।
FAQ
WireGuard बेहतर है या OpenVPN?
साफ़ नेटवर्क पर, जहाँ UDP पर पाबंदी न हो, WireGuard ज़्यादा तेज़ है, बैटरी कम खाता है और नेटवर्क बदलने पर भी नहीं कटता; जहाँ TCP पर चलाना हो, यूज़रनेम-पासवर्ड से लॉग इन चाहिए, या डिवाइस पुराना हो, वहाँ OpenVPN बेहतर है। दोनों ओपन-सोर्स हैं, सालों से परखे हुए हैं, और सुरक्षा के मामले में दोनों भरोसेमंद हैं।
क्या WireGuard सुरक्षित है?
यह आधुनिक पर सावधानी से चुने गए एल्गोरिदम इस्तेमाल करता है, प्रोटोकॉल की formal verification हो चुकी है, कोड छोटा है और जाँचना आसान है, और अभी तक इसे असल में तोड़ने का कोई तरीक़ा ज्ञात नहीं। ध्यान रहे कि कीज़ को सँभालना और बाँटना इसकी ज़िम्मेदारी नहीं: प्राइवेट की लीक हो जाए, या पब्लिक की ग़लत डिवाइस के लिए लिख दी जाए, तो प्रोटोकॉल ख़ुद कुछ नहीं कर सकता।
WireGuard सिर्फ़ UDP क्यों सपोर्ट करता है?
यह डिज़ाइन का सोचा-समझा समझौता है। TCP कनेक्शन के अंदर TCP चलाएँ तो पैकेट लॉस पर दोनों परतें एक साथ री-ट्रांसमिट करती हैं और परफ़ॉर्मेंस बुरी तरह गिरती है; साथ ही UDP से "अनजान को जवाब नहीं" और रोमिंग दोनों आसानी से हो पाते हैं। क़ीमत यह है कि जिन नेटवर्क में UDP बंद है, वहाँ यह नहीं चलता।
क्या WireGuard चीन में चलता है?
चीन के अंदर के डिवाइसों के बीच नेटवर्क आमतौर पर चल जाता है। सीधा बॉर्डर पार कनेक्शन अस्थिर है: इसके ट्रैफ़िक में छिपाव नहीं, इसलिए यह आसानी से पहचाना और रोका जाता है, ऊपर से कुछ लाइनों पर UDP की स्पीड सीमित रहती है। स्थिर बॉर्डर पार कनेक्शन चाहिए, तो साथ में छिपाव वाला या TLS पर चलने वाला तरीक़ा इस्तेमाल करें।
WireGuard किसने बनाया, और यह Linux kernel में कब आया?
इसे Jason A. Donenfeld ने डिज़ाइन किया और बनाया, यह 2015 के आसपास सार्वजनिक हुआ; मार्च 2020 में Linux 5.6 के साथ kernel की मुख्य शाखा में शामिल हुआ, और उसी समय 1.0 वर्ज़न जारी हुआ।
क्या Tailscale और WireGuard एक ही चीज़ हैं?
नहीं। WireGuard एन्क्रिप्टेड टनल का प्रोटोकॉल है; Tailscale एक नेटवर्किंग सिस्टम है जो डेटा भेजने के लिए WireGuard इस्तेमाल करता है, और इसके अलावा लॉग इन, कीज़ बाँटना, NAT traversal और रिले भी संभालता है। ज़्यादा जानकारी Tailscale को गहराई से समझें में।
WireGuard इस्तेमाल करने के लिए क्या मुझे ख़ुद कीज़ सेट करनी होंगी?
सीधे WireGuard इस्तेमाल करें तो हाँ: हर डिवाइस पर कीज़ बनानी होती हैं, फिर पब्लिक की, पता और सामने वाले का पता कॉन्फ़िग में लिखना होता है। Tailscale या किसी कमर्शियल VPN के क्लाइंट से इस्तेमाल करें, तो यह काम सॉफ़्टवेयर करता है। LeoTun के निजी नेटवर्क में बस अकाउंट से लॉग इन करना काफ़ी है।