चूंकि यह हेयरपिन NAT पर विहित प्रश्न होने के लिए ऊंचा हो गया है , मैंने सोचा कि इसका जवाब शायद होना चाहिए जो वर्तमान में स्वीकृत एक की तुलना में अधिक आम तौर पर मान्य था, जो (हालांकि उत्कृष्ट) विशेष रूप से FreeBSD से संबंधित है।
यह प्रश्न RFC1918- संबोधित IPv4 नेटवर्क पर सर्वरों द्वारा प्रदान की जाने वाली सेवाओं पर लागू होता है, जो गेटवे पर NAT (DNAT) को पेश करके बाहरी उपयोगकर्ताओं के लिए उपलब्ध कराई जाती हैं। आंतरिक उपयोगकर्ता तब बाहरी पते के माध्यम से उन सेवाओं तक पहुंचने का प्रयास करते हैं। उनका पैकेट क्लाइंट से गेटवे डिवाइस के लिए निकलता है, जो गंतव्य पते को फिर से लिखता है और तुरंत आंतरिक नेटवर्क में वापस इंजेक्ट करता है। यह इस तीखे मोड़ के बारे में है जो पैकेट गेटवे पर बनाता है जो हेयरपिन मोड़ के साथ सादृश्य द्वारा हेयरपिन एनएटी नाम को जन्म देता है ।
समस्या तब होती है जब गेटवे डिवाइस गंतव्य पते को फिर से लिखता है, लेकिन स्रोत का पता नहीं। सर्वर तब एक आंतरिक गंतव्य पते (अपने स्वयं के), और एक आंतरिक स्रोत पते (क्लाइंट) के साथ एक पैकेट प्राप्त करता है; यह जानता है कि यह इस तरह के पते पर सीधे जवाब दे सकता है, इसलिए ऐसा करता है। चूँकि यह उत्तर प्रत्यक्ष है, यह गेटवे के माध्यम से नहीं जाता है, इसलिए कभी भी वापसी पैकेट के स्रोत पते को पुनः लिखकर प्रारंभिक पैकेट पर इनबाउंड गंतव्य NAT के प्रभाव को संतुलित करने का मौका नहीं मिलता है।
ग्राहक इस प्रकार एक पैकेट को एक बाहरी आईपी पते पर भेजता है , लेकिन उसे आंतरिक आईपी पते से जवाब मिलता है । यह पता नहीं है कि दो पैकेट एक ही बातचीत का हिस्सा हैं, इसलिए कोई बातचीत नहीं होती है।
इसका समाधान यह है कि ऐसे पैकेट जिनके लिए NAT की आवश्यकता होती है, और जो आंतरिक नेटवर्क से गेटवे तक पहुंचते हैं , इनबाउंड पैकेट पर स्रोत NAT (SNAT) का प्रदर्शन करने के लिए, आमतौर पर गेटवे के लिए स्रोत पते को फिर से लिखना। इसके बाद सर्वर को लगता है कि क्लाइंट स्वयं ही गेटवे है, और सीधे इसका जवाब देता है। बदले में गेटवे और वापसी पैकेट पर दोनों स्रोत और गंतव्य पते को फिर से लिखकर इनबाउंड पैकेट पर DNAT और SNAT दोनों के प्रभाव को संतुलित करने का मौका देता है।
क्लाइंट को लगता है कि यह किसी बाहरी सर्वर से बात कर रहा है। सर्वर को लगता है कि यह गेटवे डिवाइस से बात कर रहा है। सभी दल खुश हैं। इस बिंदु पर एक आरेख सहायक हो सकता है:
कुछ उपभोक्ता गेटवे डिवाइस उन पैकेटों को पहचानने के लिए पर्याप्त उज्ज्वल होते हैं जिनके लिए दूसरे NAT कदम की आवश्यकता होती है, और वे संभवतः हेयरपिन NAT परिदृश्य में आउट-ऑफ-द-बॉक्स काम करेंगे। अन्य लोग ऐसा नहीं कर सकते हैं, और यह संभावना नहीं है कि उन्हें काम करने के लिए बनाया जा सकता है। किस उपभोक्ता-ग्रेड डिवाइस की चर्चा है जो सर्वर फॉल्ट के लिए ऑफ टॉपिक है।
उचित नेटवर्किंग उपकरणों को आम तौर पर काम करने के लिए कहा जा सकता है, लेकिन - क्योंकि वे दूसरे व्यापार में नहीं हैं-उनके अनुमानों का अनुमान लगाते हैं - उन्हें ऐसा करने के लिए कहा जाना चाहिए। लिनक्स iptables
इस प्रकार DNAT करने के लिए उपयोग करता है:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.3.11
जो एक आंतरिक सर्वर पर HTTP पोर्ट के लिए सरल DNAT को सक्षम करेगा 192.168.3.11
। लेकिन हेयरपिन NAT को सक्षम करने के लिए, एक नियम की भी आवश्यकता होगी जैसे:
iptables -t nat -A POSTROUTING -d 192.168.3.11 -p tcp --dport 80 -j MASQUERADE
ध्यान दें कि इस तरह के नियमों को ठीक से काम करने के लिए प्रासंगिक श्रृंखलाओं में सही जगह पर होना चाहिए, और filter
श्रृंखला में सेटिंग्स के आधार पर , नैटेड ट्रैफिक को प्रवाहित करने के लिए अतिरिक्त नियमों की आवश्यकता हो सकती है। इस तरह की तमाम चर्चाएं इस जवाब के दायरे से बाहर हैं।
लेकिन जैसा कि दूसरों ने कहा है, हेयरपिन NAT को ठीक से सक्षम करना समस्या को संभालने का सबसे अच्छा तरीका नहीं है। सबसे अच्छा विभाजन-क्षितिज DNS है , जहां आपका संगठन मूल लुकअप के लिए अलग-अलग उत्तर देता है, जहां पर निर्भर करता है कि अनुरोध करने वाला ग्राहक कहां है, या तो आंतरिक बनाम बाहरी उपयोगकर्ताओं के लिए अलग-अलग भौतिक सर्वर होने के कारण, या DNS सर्वर को अलग-अलग जवाब देने के लिए कॉन्फ़िगर करके। अनुरोध करने वाले ग्राहक का पता।