2 पॉइंट द्वारा GN⁺ 2023-09-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Linux इंटरनेट कंट्रोल मैसेज प्रोटोकॉल (ICMP) का उपयोग करने वाले ping कमांड पर नेटवर्क एड्रेस ट्रांसलेशन (NAT) कैसे करता है, इस पर लेख की व्याख्या
  • लेखक ने ICMP पैकेट्स पर NAT के काम करने के तरीके को समझने के लिए Linux networking code को खंगाला; ICMP पैकेट्स में port field नहीं होती
  • लेखक ने network namespaces का उपयोग करके एक ही Linux मशीन पर कई devices को simulate करने वाला प्रयोग सेटअप बनाया, और NAT प्रक्रिया को टेस्ट करने के लिए ping कमांड का उपयोग किया
  • इस प्रयोग में bridge से जुड़े दो clients, NAT box और server कनेक्शन, तथा routing और NAT configuration शामिल हैं
  • लेखक ने client और server network namespaces में ICMP पैकेट्स capture किए और packet data का विश्लेषण किया
  • लेखक ने पाया कि हर client का अलग "id" field होता है, जिससे NAT box हर client तक पहुंचने वाले response packets में फर्क कर सकता है
  • लेखक ने Linux source code और ICMP protocol को परिभाषित करने वाले RFC 792 को खंगालकर समझा कि ID कैसे चुना जाता है
  • लेखक ने पाया कि ping कमांड identifier को random तरीके से चुनता है, और अगर अलग hosts पर दो ping processes एक ही ID चुन लें, तो Linux kernel random तरीके से एक खाली port चुनता है, और यही port ICMP packet की ID के रूप में इस्तेमाल होता है
  • लेखक ने kernel functions को trace करने और netfilter code की अपनी समझ को सत्यापित करने के लिए bpftrace नाम के टूल का उपयोग किया
  • लेख का निष्कर्ष यह है कि Linux हर client के लिए connection बनाकर ping पर NAT लागू करता है, outgoing packets में source IP address और/या ICMP id field को rewrite करता है, और बाद में response packets में इन बदलावों को उलट देता है
  • लेख इस प्रक्रिया का विस्तृत चरण-दर-चरण विवरण देता है ताकि बुनियादी तकनीकी ज्ञान वाले शुरुआती स्तर के software engineers भी इसे समझ सकें

1 टिप्पणियां

 
GN⁺ 2023-09-11
Hacker News राय
  • Linux में network address translation (NAT) ping अनुरोधों को कैसे संभालता है, इस पर एक लेख
  • सर्वर एक निश्चित पते पर निश्चित ICMP echo request पैकेट भेजता है, जिसके वापस आने की अपेक्षा नहीं की जाती
  • जब क्लाइंट कनेक्ट करने की कोशिश करता है, तो वह सर्वर को एक ICMP time exceeded पैकेट भेजता है, जिसमें सर्वर द्वारा भेजा गया "मूल" निश्चित पैकेट शामिल होता है
  • क्लाइंट इंटरनेट के एक hop की तरह व्यवहार करता है और सर्वर को बताता है कि मूल पैकेट डिलीवर नहीं हो सका
  • NAT डिवाइस क्लाइंट के पूरे IP header सहित ICMP time exceeded को NAT के पीछे मौजूद सर्वर तक फॉरवर्ड करता है, जिससे सर्वर क्लाइंट का IP address जान सकता है
  • जब लोकल नेटवर्क से इंटरनेट पर किसी डिवाइस को ping भेजा जाता है, तो NAT करने वाला router ping के source address को public IP address में फिर से लिखता है और ICMP पैकेट के ID field को एक unique value में फिर से लिखता है
  • router इसी unique ID value का उपयोग करके जवाब को लोकल नेटवर्क के सही डिवाइस तक पहुंचाता है
  • पोस्ट में Netfilter नामक टूल के बारे में सामग्री भी दी गई है, जिसका उपयोग packet mangling, network address translation और packet filtering के लिए किया जाता है
  • source code तक सभी abstraction layers में गहराई से उतरकर विश्लेषण करने के लिए लेख की सराहना की गई
  • ICMP में port नहीं होते, इसलिए NAT को ICMP echo reply को सही port पर वापस भेजने की समस्या संभालने की ज़रूरत नहीं होती
  • ICMP echo request में एक ID होता है, जो व्यवहार में source port number के बराबर है
  • ICMP echo के लिए NAT handling में ID को दोनों दिशाओं में remap करना पड़ता है, जैसे UDP में source port को remap किया जाता है
  • कुछ उपयोगकर्ताओं ने समय के साथ हुए बदलावों के कारण ब्लॉग पोस्ट में किसी खास code line से लिंक करने पर असंतोष जताया
  • कुछ उपयोगकर्ताओं ने NAT को खराब abstraction कहकर उसकी आलोचना की और IPv4 को समाप्त करने की मांग की
  • central server के बिना UDP के जरिए ping का उपयोग करके peer-to-peer networking के लिए छोटे संदेश भेजने की संभावना पर अटकलें
  • लेख का सार यह है कि ICMP पैकेट में एक ID field होता है और Netfilter ICMP पैकेटों को "special case" के रूप में संभालता है