
UDP स्ट्रीम को (नकली) TCP स्ट्रीम में बदलता है जो Layer 3 और Layer 4 (NAPT) फ़ायरवॉल/NATs से गुज़र सकती हैं।
एक हल्का और तेज़ UDP से TCP अस्पष्टकर्ता।
Rust केवल MIPS आधारित प्लेटफॉर्मों के लिए Tier 3 समर्थन प्रदान करता है 2023 से। Phantun के MIPS बिल्ड इसलिए नाइटली Rust टूलचेन का उपयोग करके बनाए गए हैं और केवल सर्वोत्तम प्रयास के आधार पर प्रदान किए जाते हैं।
Phantun एक परियोजना है जो UDP पैकेटों को TCP कनेक्शनों में अस्पष्ट करती है। इसका लक्ष्य न्यूनतम प्रसंस्करण और एनकैप्सुलेशन ओवरहेड के साथ अधिकतम प्रदर्शन प्राप्त करना है।
इसका उपयोग आमतौर पर ऐसे वातावरणों में किया जाता है जहाँ UDP अवरुद्ध/थ्रॉटल होता है लेकिन TCP की अनुमति है।
Phantun केवल UDP पैकेटों के एक स्ट्रीम को अस्पष्ट TCP स्ट्रीम पैकेटों में परिवर्तित करता है। Phantun द्वारा उपयोग किया जाने वाला TCP स्टैक अधिकांश L3/L4 स्टेटफुल/स्टेटलेस फ़ायरवॉल/NAT उपकरणों से गुज़रने के लिए डिज़ाइन किया गया है। यह L7 प्रॉक्सी से नहीं गुज़र पाएगा। हालाँकि, इस दृष्टिकोण का लाभ यह है कि TCP पर UDP के सामान्य प्रदर्शन हत्यारों जैसे पुनर्प्रेषण और प्रवाह नियंत्रण में से कोई भी नहीं होगा। अंतर्निहित UDP गुण जैसे ऑर्डर से बाहर वितरण पूरी तरह से संरक्षित रहते हैं, भले ही कनेक्शन फ़ायरवॉल/NAT उपकरणों के दृष्टिकोण से TCP कनेक्शन जैसा दिखता हो।
Phantun का अर्थ है फैंटम TUN, क्योंकि यह UDP ट्रैफ़िक के लिए एक अस्पष्टकर्ता है जो इसे स्टेटफुल फ़ायरवॉल/NAT से TCP पैकेट के रूप में पास कराने के लिए पर्याप्त कार्य करता है।
Phantun 100% सुरक्षित Rust में लिखा गया है। इसे मल्टी-कोर प्रणालियों पर अच्छी तरह से स्केल करने के लिए व्यापक रूप से अनुकूलित किया गया है और तेज़ कनेक्शन पर सभी उपलब्ध CPU संसाधनों को संतृप्त करने में कोई समस्या नहीं है। बेंचमार्किंग परिणामों के लिए प्रदर्शन अनुभाग देखें।

नीचे दिए गए उदाहरण के लिए, यह माना गया है कि Phantun सर्वर पोर्ट 4567 पर आने वाले Phantun क्लाइंट कनेक्शनों को सुनता है (सर्वर के लिए --local विकल्प), और यह UDP पैकेटों को 127.0.0.1:1234 पर UDP सर्वर को अग्रेषित करता है (सर्वर के लिए --remote विकल्प)।
यह भी माना गया है कि Phantun क्लाइंट 127.0.0.1:1234 (क्लाइंट के लिए --local विकल्प) पर आने वाले UDP पैकेटों को सुनता है और 10.0.0.1:4567 पर Phantun सर्वर से जुड़ता है (क्लाइंट के लिए --remote विकल्प)।
Phantun क्लाइंट और सर्वर दोनों के लिए TUN इंटरफ़ेस बनाता है। क्लाइंट के लिए, Phantun डिफ़ॉल्ट रूप से स्वयं को IP पता 192.168.200.2 और fcc8::2 प्रदान करता है। सर्वर के लिए, यह डिफ़ॉल्ट रूप से 192.168.201.2 और fcc9::2 प्रदान करता है। इसलिए, आपके कर्नेल में IPv4/IPv6 फ़ॉरवर्डिंग सक्षम होनी चाहिए और आपके भौतिक NIC पते और Phantun के Tun इंटरफ़ेस पते के बीच NAT के लिए उपयुक्त iptables/nftables नियम स्थापित होने चाहिए।
आप Phantun द्वारा बनाए गए Tun इंटरफ़ेस का नाम और निर्धारित पतों को अनुकूलित कर सकते हैं। कृपया उन्हें बदलने का तरीका देखने के लिए -h विकल्पों के साथ निष्पादन योग्य चलाएं।
इस नेटवर्क टोपोलॉजी को समझने में मदद करने का एक और तरीका (कृपया इस टोपोलॉजी के चित्रण के लिए ऊपर दिए गए आरेख को देखें):
Phantun क्लाइंट एक राउटर के पीछे निजी IP पते (192.168.200.2/fcc8::2) वाली मशीन की तरह है। इंटरनेट तक पहुँचने के लिए, आपको ट्रैफ़िक के NIC से बाहर निकलने से पहले निजी IP पते को SNAT करना होगा।
Phantun सर्वर एक राउटर के पीछे निजी IP पते (192.168.201.2/fcc9::2) वाले सर्वर की तरह है। इंटरनेट से इसे एक्सेस करने के लिए, आपको राउटर पर इसके सुनने वाले पोर्ट को DNAT करना होगा और गंतव्य IP पते को उस स्थान पर बदलना होगा जहाँ सर्वर आने वाले कनेक्शनों को सुन रहा है।
इन मामलों में, Phantun चलाने वाली मशीन/iptables "राउटर" के रूप में कार्य करती है जो Phantun को अपने निजी IP पतों का उपयोग करके बाहर से संवाद करने की अनुमति देती है।
Phantun v0.4.1 के अनुसार, IPv6 TCP और UDP दोनों पक्षों के लिए पूरी तरह से समर्थित है। IPv6 पता निर्दिष्ट करने के लिए, कमांड लाइन विकल्पों के साथ निम्न प्रारूप का उपयोग करें: [::1]:1234। AAAA रिकॉर्ड को हल करना भी समर्थित है। कृपया IPv6 व्यवहार को नियंत्रित करने के तरीके पर विस्तृत विकल्प देखने के लिए -h के साथ प्रोग्राम चलाएं।
/etc/sysctl.conf संपादित करें, net.ipv4.ip_forward=1 जोड़ें और sudo sysctl -p /etc/sysctl.conf चलाएं।
net.ipv6.conf.all.forwarding=1 भी सेट करना होगा।
क्लाइंट को केवल भौतिक इंटरफ़ेस पर SNAT सक्षम करने की आवश्यकता है ताकि Phantun का पता भौतिक नेटवर्क पर उपयोग किए जा सकने वाले पते में अनुवादित हो सके। यह केवल मास्करेड के साथ किया जा सकता है।
नोट: eth0 को वास्तविक भौतिक इंटरफ़ेस नाम से बदलें
table inet nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
iifname tun0 oif eth0 masquerade
}
}
नोट: उपरोक्त नियम तालिका परिवार प्रकार के रूप में inet का उपयोग करता है, इसलिए यह IPv4 और IPv6 दोनों उपयोग के साथ संगत है।
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
सर्वर को TCP सुनने वाले पोर्ट को Phantun के TUN इंटरफ़ेस पते पर DNAT करने की आवश्यकता है।
नोट: eth0 को वास्तविक भौतिक इंटरफ़ेस नाम से और 4567 को Phantun सर्वर द्वारा उपयोग किए जाने वाले वास्तविक TCP पोर्ट नंबर से बदलें
table inet nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iif eth0 tcp dport 4567 dnat ip to 192.168.201.2
iif eth0 tcp dport 4567 dnat ip6 to fcc9::2
}
}
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
ip6tables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination fcc9::2
नेटवर्क का सामना करने वाले अनुप्रयोगों को रूट उपयोगकर्ता के रूप में चलाना अनुचित है। Phantun को cap_net_admin क्षमता के साथ पूरी तरह से गैर-रूट उपयोगकर्ता के रूप में चलाया जा सकता है।