नए VPN एग्ज़िट पर नए कनेक्शन, पुराने फ़्लो अछूते रहते हैं
नियोजित ड्रेन केवल अवर्गीकृत फ़्लो को स्थानांतरित करता है। इसकी तुलना रूट स्वैप से करें, और वे मार्क, टेबल और conntrack स्थिति देखें जो इसे बनाए रखते हैं।
दो स्वस्थ VPN एग्ज़िट, एक लंबा अपलोड पहले से चल रहा है, और यह अपेक्षा कि अगला कनेक्शन दूसरी टनल का उपयोग करे। इसे पूरा करने के दो तरीके हैं, और उनमें से केवल एक ही जीवित गेटवे पर सुरक्षित है। डिफ़ॉल्ट रूट बदलने से हर पैकेट हिलता है, अपलोड से जुड़े पैकेट भी। नियोजित ड्रेन नए कनेक्शन के लिए चयन बदलता है और ट्रैक किए गए फ़्लो को उसी पथ पर छोड़ता है जहाँ से वे शुरू हुए थे।
एग्ज़िट बदलने के दो तरीके
रूट स्वैप एक ही कमांड है और कुछ सेकंड में वापस लौटाया जा सकता है, इसीलिए घटनाओं के दौरान इसका उपयोग होता है। यह भेदभावरहित भी है: मौजूदा अपलोड के पैकेट अचानक दूसरी टनल से निकलते हैं, अलग सार्वजनिक स्रोत पते और अलग अनुवाद स्थिति के साथ।
अगर दूर का सिरा स्रोत पते के आधार पर फ़्लो ट्रैक करता है, तो अपलोड पहचाना जाना ही बंद हो सकता है। ड्रेन इससे बचता है—प्रति कनेक्शन एक बार निर्णय लेकर उसे सहेजकर, ताकि पुराना अपलोड समाप्त होने तक अपना एग्ज़िट बनाए रखे। यही इस अभ्यास का पूरा मूल्य है: दूर के सिरे को ऐसा कोई बदलाव नहीं दिखता जिसे उसे समझाना पड़े। उसे ऐसे पैकेट मिलते रहते हैं जो उस कनेक्शन से मेल खाते हैं जिसे वह पहले से जानता है।
कीमत जटिलता है: दो रूटिंग टेबल, सही हुक पर चलने वाला एक वर्गीकरणकर्ता, और ऐसे मार्क जिन्हें मशीन पर उन्हें उपयोग करने वाली हर दूसरी चीज़ के साथ समन्वित करना पड़ता है।
हर एग्ज़िट को अपनी टेबल दें
हर एग्ज़िट के लिए एक रूटिंग टेबल और दोनों विकल्पों के लिए अलग मार्क मान या बिट आरक्षित करें। हर टेबल को केवल नाम नहीं, बल्कि अपनी भूमिका के अनुरूप रूट चाहिए, और गुम होने वाली स्थिति के लिए जानबूझकर विफलता परिणाम चाहिए। खाली टेबल जो चुपचाप मुख्य टेबल में गिर जाती है — इसी तरह ट्रैफ़िक उस एग्ज़िट से बाहर जाता है जिसे किसी ने नहीं चुना।
ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102हर टेबल के अंत में blackhole रूट जोड़ें ताकि बिना मेल वाली खोज ज़ोर से विफल हो, बजाय आपके न चुने डिफ़ॉल्ट की ओर भागने के।
एक बार चुनें, पहले पैकेट पर
कनेक्शन ट्रैकिंग उपलब्ध होने के बाद और महत्वपूर्ण रूट खोज से पहले वर्गीकृत करें। नए, अवर्गीकृत LAN कनेक्शन के लिए एग्ज़िट चुनें और उसे कनेक्शन स्थिति में सहेजें। बाद के पैकेट पर, सहेजे गए मान को उस पैकेट मार्क में बहाल करें जिसे नीति रूटिंग पढ़ती है।
बारीक बात यह है कि नया का अर्थ क्या है। जवाब दिखने से पहले शुरुआती पैकेट और पुनःप्रेषण के लिए conntrack अब भी NEW बता सकता है, इसलिए केवल उस स्थिति पर टिकने वाला वर्गीकरणकर्ता पहले लिए गए चयन को अधिलेखित कर सकता है। एग्ज़िट असाइन करने से पहले जाँचें कि कनेक्शन के लिए कोई एग्ज़िट सहेजा नहीं गया है।
nftables पैकेट और कनेक्शन मार्क अलग रखता है, और मेटाइन्फ़ॉर्मेशन मार्गदर्शिका उनके बीच स्पष्ट प्रतिलिपि का दस्तावेज़ीकरण करती है। कनेक्शन मार्क अपने आप वह पैकेट मार्क नहीं बन जाता जिससे आपका नियम मेल खाता है, और यही सबसे आम कारण है कि ध्यान से लिखा गया वर्गीकरणकर्ता कोई प्रभाव नहीं डालता।
बहाली को उसी दिशा और ट्रैफ़िक तक सीमित रखें जो आपका अभिप्राय है। लौटते पैकेट पर इंटरनेट-एग्ज़िट मार्क लगाने से जवाब LAN की बजाय एग्ज़िट की ओर जा सकते हैं, और लक्षण एकतरफ़ा कनेक्शन है जो फ़ायरवॉल समस्या जैसा दिखता है। फ़ायरवॉल नियम छूने से पहले जवाब का पथ पढ़ें, क्योंकि पैकेट रूट हो रहा है, बस भेजने वाले तक वापस नहीं।
ड्रेन के चार चरण
A को छुए बिना B तैयार करें: रूटिंग, फ़ॉरवर्डिंग, प्राधिकरण, NAT और वापसी पथ। गेटवे के मौजूदा कॉन्फ़िगरेशन स्वामी के माध्यम से उसकी टेबल और चयन नीति स्थापित करें।
वर्गीकरणकर्ता बदलें ताकि नए, अवर्गीकृत कनेक्शन B चुनें, सहेजे गए चयन सुरक्षित रहें। एक परमाणु nftables लेनदेन उस खिड़की से बचाता है जहाँ पुरानी स्थिति साफ़ करनी पड़े।
A के फ़्लो पूरे होने तक उसे चालू रखें। उसका इंटरफ़ेस, टेबल, दूर का एग्ज़िट और NAT मैपिंग अब भी उन फ़्लो का हिस्सा हैं, और NAT नियम संपादित करने से पहले से मौजूद बाइंडिंग फिर से नहीं बनतीं।
ड्रेन की शर्त पूरी होने पर A को हटाएँ, जिसका आकलन कनेक्शन स्थिति और एप्लिकेशन व्यवहार से हो, किसी एक शांत अंतराल से नहीं।
ड्रेन क्या वादा नहीं कर सकता
ब्राउज़र अनुरोध नया ट्रांसपोर्ट कनेक्शन नहीं है; पूलिंग पुराने पर ही अनुरोध भेजती रहती है। इसके विपरीत, UDP फ़्लो conntrack से पुराना हो सकता है और बाद का पैकेट फिर से वर्गीकृत होता है। ड्रेन ट्रैक किए गए फ़्लो का अनुसरण करता है, एप्लिकेशन के सत्र की धारणा का नहीं।
अगर A अपने फ़्लो पूरे होने से पहले विफल हो जाए, तो सहेजा गया मार्क उन्हें नहीं बचाता। वे B से फिर जुड़ते हैं, या बिल्कुल नहीं जुड़ते। नियोजित ड्रेन मूल पथ के स्वस्थ रहने तक निरंतरता खरीदता है; यह स्वतंत्र एग्ज़िट के बीच स्थिति की प्रतिकृति नहीं है।
दोनों आधों की जाँच करें
बदलाव से पहले लंबे समय का अनुमत कनेक्शन और बाद में वास्तव में नया कनेक्शन शुरू करें। पुष्टि करें कि कौन-सी टनल कौन उपयोग करता है और दूर का सिरा कौन-सा सार्वजनिक स्रोत पता देखता है, फिर जाँचें कि वापसी ट्रैफ़िक लौटता है।
नया चयन दिखाने के लिए conntrack टेबल फ़्लश न करें। यह ठीक उसी स्थिति को नष्ट करता है जिसे ड्रेन को सुरक्षित रखना है, और नियंत्रित माइग्रेशन को साफ़-सुथरे दिखने वाले परीक्षण के साथ बाधा में बदल देता है।