कर्नेल की यादृच्छिकता खत्म होना धीमे VPN के लिए एक आकर्षक व्याख्या है, और लोग जो लक्षण बताते हैं उसके लिए लगभग हमेशा गलत व्याख्या है। यादृच्छिक आउटपुट का इंतज़ार करता होस्ट किसी खास पल में अटक जाता है, आमतौर पर बूट की शुरुआत में या कुंजी प्रबंधन के दौरान। जो टनल जल्दी जुड़ती है और फिर धीरे स्थानांतरित करती है वह इसके बजाय थ्रूपुट बता रही है। उस संख्या को ठीक करने के लिए डेमॉन स्थापित करने से पहले इन दो अवलोकनों को अलग करें जिसे आपने अभी पढ़ना पूरा नहीं किया।

यह मिथक क्यों बचा रहता है

दोनों समस्याएँ असली हैं और दूर से एक जैसी दिखती हैं। ताज़ा बूट हुई वर्चुअल मशीन पर स्टार्टअप रुकना सचमुच होता है, और धीमी स्थापित टनल भी उतनी ही असली है। गलती यह मानना है कि दूसरी पहली के कारण होती है क्योंकि दोनों कहानियों में कहीं क्रिप्टोग्राफ़ी आती है। एन्क्रिप्शन शब्द का मतलब यह कभी नहीं है कि हर स्थानांतरित बाइट पर्यावरणीय शोर की नई बाइट खर्च करती है।

ये जनरेटर ऐसे काम नहीं करते। क्रिप्टोग्राफ़िक लाइब्रेरी बीज वाला जनरेटर रखती है और उससे आउटपुट खींचती है, अपनी नीति के अनुसार फिर से बीज डालती है, इसलिए महँगा पल बीज डालना है, स्थिर स्थानांतरण नहीं।

जनरेटर प्रति पैकेट क्या करता है

OpenSSL 3 में डिफ़ॉल्ट जनरेटर पदानुक्रम DRBG उदाहरणों से बनता है जो कॉन्फ़िगरेशन और स्थिति के अनुसार बीज डालते हैं और फिर से डालते हैं। OpenVPN 2.6 में AEAD डेटा पथ अपना nonce पैकेट की क्रम संख्या से प्रति-सत्र अंतर्निहित मान के साथ प्राप्त करता है, जबकि पुराना CBC पथ प्रति पैकेट एक छद्म-यादृच्छिक IV खींचता है। कोई भी पैटर्न इस नियम का समर्थन नहीं करता कि एक गीगाबाइट हिलाने से एक गीगाबाइट ताज़ा कर्नेल शोर खर्च होता है। दोनों इस विचार का समर्थन करते हैं कि कुंजी निर्माण और हैंडशेक ही वह जगह हैं जहाँ बीज डालना मायने रखता है।

CBC मामला नाम लेने योग्य है क्योंकि यह मिथक जैसा दिखता है और है नहीं: इसका प्रति-पैकेट IV लाइब्रेरी के अपने पुनः-बीज कार्यक्रम के अनुसार लाइब्रेरी जनरेटर से आता है, कभी भी प्रति पैकेट कर्नेल कॉल से नहीं। जब कोई प्रति-बाइट एंट्रॉपी लागत का हवाला दे, तो पूछें कि उन्होंने कौन-सा लाइब्रेरी संस्करण और कौन-सा कोड पथ मापा।

इंतज़ार वास्तव में कहाँ दिखता है

सत्र के चारों ओर नहीं, चरणों के चारों ओर टाइमस्टैम्प लगाएँ: स्टार्टअप, प्रमाणीकरण, कुंजी परिवर्तन और स्थानांतरण। टनल के उपयोगी होने से पहले का इंतज़ार कम स्थिर दर से अलग शिकायत है, और उनमें से केवल एक ही यादृच्छिकता की ओर इशारा करता है। Linux में एक सामान्य getrandom() अनुरोध तब तक अवरुद्ध हो सकता है जब तक कर्नेल का यादृच्छिक स्रोत आरंभ न हो जाए, इसलिए इस समस्या का बूट-कालीन संस्करण वर्चुअल मशीनों और एम्बेडेड बोर्डों पर असली है जिनके पास शुरुआत में पूल को खिलाने के लिए बहुत कम होता है।

चरणक्या चलाएँऐसा पाठ जिसका अर्थ इंतज़ार हैऐसा पाठ जिसका अर्थ थ्रूपुट है
बूट, किसी भी टनल से पहलेsystemd-analyze critical-chainटनल शुरू होने से पहले सेकंडों बैठी एक इकाईलागू नहीं, अभी कुछ भी स्थानांतरित नहीं हो रहा
हैंडशेकjournalctl -u openvpn-server@server -bआरंभीकरण क्रम पूरा होने से पहले लंबा अंतराललागू नहीं, टनल ऊपर नहीं है
स्थापित स्थानांतरणss -tin के बगल में sar -n DEV 1खाली सॉकेट कतारों वाली अवरुद्ध प्रक्रियाभरी कतारें, पुनःप्रसारण और एक व्यस्त थ्रेड

दो सस्ते कमांड उस संग्रह की शुरुआत में आते हैं, और तालिका की ज़रूरत पड़ने से पहले ही आसान सवालों का फ़ैसला कर देते हैं। वे जो काउंटर पढ़ते हैं वह एंट्रॉपी लेखांकन है, बैंडविड्थ मीटर नहीं, और एक स्नैपशॉट यह नहीं दिखा सकता कि कोई प्रक्रिया अवरुद्ध है, कितनी देर इंतज़ार किया, या उसकी लाइब्रेरी कौन-सा इंटरफ़ेस कॉल करती है। रिकवरी के बाद लिया गया नमूना आमतौर पर रुकावट को पूरी तरह चूक जाता है, इसलिए पढ़ने के साथ कर्नेल संस्करण रखें।

cat /proc/sys/kernel/random/entropy_avail
uname -r

सुधार को पाठ से मिलाएँ

अगर कर्नेल सचमुच आरंभीकरण का इंतज़ार कर रहा है, तो टनल की नहीं, प्लेटफ़ॉर्म के समर्थित बीज-पथ की ओर देखें। वर्चुअल मशीन को होस्ट द्वारा दिया गया यादृच्छिक उपकरण दिया जा सकता है, जैसे virtio-rng, और इमेज की तैयारी मायने रखती है क्योंकि कई गेस्ट में बिना बदलाव कॉपी किया गया बीज स्वतंत्र आरंभीकरण नहीं है। अगर कोई लाइब्रेरी बूट के बाद बीज विफलताएँ बताती है, तो कर्नेल सेटिंग्स बदलने के बजाय उसके कॉन्फ़िगर किए गए स्रोत और प्रदाता व्यवहार की जाँच करें।

ss -tin dst 203.0.113.7
sar -n DEV 1 5

OpenSSL के जनरेटर दस्तावेज़ बताते हैं कि यह पदानुक्रम इनपुट कैसे प्राप्त करता है और पुनः-बीज कब होता है, जो मिथक से बहुत संकीर्ण दावा है और केवल उसी कार्यान्वयन के लिए सच है। एंट्रॉपी डेमॉन सार्वभौमिक गति सुधार नहीं है, और काउंटर बढ़ाने के लिए उसे स्थापित करना बिना देरी दिखाए सुरक्षा धारणा बदल देता है। थ्रूपुट के लिए डेटा पथ का पालन करें: एक संतृप्त थ्रेड, पुनःप्रसारण, बाहरी हानि और कतार गिरावट—हर एक को अलग सुधार चाहिए, और बफ़र आकार सॉकेट बफ़रिंग को अपने कतार-प्रमाण के साथ संभालते हैं।

संबंधित लेख