- 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 टिप्पणियां
Hacker News राय