کیوں بہت سی ایپ کنکشنز ایک ہی OpenVPN سیشن شیئر کرتی ہیں
ایک بیرونی UDP گفتگو ہر وہ اندرونی بہاؤ اٹھاتی ہے جو راستے اس میں بھیجتے ہیں۔ اندرونی پورٹس اور پروٹوکول برقرار رہتے ہیں؛ صرف بیرونی ٹوپل مستقل رہتا ہے۔
ایک براؤزر HTTPS صفحہ لوڈ کر رہا ہے، ایک SSH کلائنٹ دوسرے سرور تک پہنچ رہا ہے اور ایک حل کنندہ ایک سوال کا جواب دے رہا ہے — سب ایک ہی OpenVPN سیشن کے ذریعے۔ جسمانی انٹرفیس پر آپ ایک گفتگو دیکھتے ہیں؛ سرنگ کے اندر آپ تین دیکھتے ہیں۔ دونوں نقطہ نظر درست ہیں، اور یہ جاننا کہ ایسا کیوں ہے، ایک مفید اور ایک الجھانے والی گرفت کے درمیان فرق ہے۔ ایک اندرونی بہاؤ کو ساکٹ سے تار تک پیچھے چلیں، تہہ بندی مزید تجریدی نہیں رہتی۔
ایک بیرونی گفتگو، بہت سے اندرونی بہاؤ
ہر ایپلی کیشن اپنا ساکٹ کھولتی ہے، اور کرنل اسے پانچ عناصر کا ٹوپل دیتا ہے: ماخذ پتہ، ماخذ پورٹ، منزل کا پتہ، منزل کی پورٹ اور پروٹوکول۔ یہ ٹوپل کسی بھی سرنگ کے شامل ہونے سے پہلے موجود ہوتے ہیں۔ پھر راستہ بندی فیصلہ کرتی ہے کہ وہ سب سرنگ کے آلے سے باہر جاتے ہیں، اس لیے OpenVPN کو دیا گیا پیکٹ اب بھی اندر اصل ہیڈر لیے ہوئے ہے۔ OpenVPN وہ اندرونی پیکٹ خفیہ کرتا ہے اور نتیجہ کو ساتھی کے ساتھ ایک ہی بیرونی UDP یا TCP گفتگو میں لپیٹ دیتا ہے۔ لہٰذا بیرونی گفتگو ایک ہے، جبکہ اس کے اندر کے بہاؤ اتنے ہیں جتنے ایپلی کیشنز نے کھولے۔
کچھ بھی نہیں بکھرتا۔ اندرونی ٹوپل شروع سے آخر تک برقرار رہتے ہیں، اور اسی لیے دور کا فریق اب بھی تینوں بہاؤ الگ پہچان سکتا ہے۔
وہ پورٹ جو مستقل رہتی ہے
مستقل رہنے والا بیرونی ٹوپل ہے: آپ کا پتہ، وہ مقامی پورٹ جو کلائنٹ نے باندھی، ساتھی کا پتہ اور تشکیل شدہ سروس پورٹ۔ یہی ٹوپل ہے جسے راستے میں فائر وال یا NAT کو اجازت دینی ہے، اور یہی وہ ہے جو اپ لنک پر گرفت دکھائے گی۔ یہی وہ بھی ہے جو دوبارہ جڑنے یا نیٹ ورک بدلنے کے بعد بدلتا ہے، کیونکہ کلائنٹ کوئی دوسری مقامی پورٹ باندھ سکتا ہے۔ ایک سرنگ کا مطلب ہمیشہ کے لیے ایک مستقل ماخذ پورٹ نہیں ہے۔
اندرونی پورٹس ہی آخری نکات کے لیے اہم ہیں۔ ایک HTTPS بہاؤ سرنگ کے اندر منزل کی پورٹ 443 رکھتا ہے، اگرچہ بیرونی منتقلی اُس پورٹ پر بیٹھی ہے جو آپریٹر نے تشکیل دی ہے۔ ایپلی کیشن کے آخری نکات بیرونی پورٹ کے بارے میں کبھی نہیں جانتے۔
دور کے سرے پر کپسول کھولنا کیا بدلتا ہے
ساتھی پر بیرونی تہہ ہٹا دی جاتی ہے، اور باقی اندرونی پیکٹ رہتا ہے۔ وہاں سے آگے بھیجنا اور رسائی کی پالیسی اندرونی منزل اور پروٹوکول پر لاگو ہوتی ہے۔ ویب سرور اب بھی HTTPS کنکشن وصول کرتا ہے، SSH ڈیمن اب بھی SSH وصول کرتا ہے، اور حل کنندہ اب بھی سوال وصول کرتا ہے۔
اسی لیے بیرونی منتقلی کی اجازت دینے والا قاعدہ اندرونی سروس کی اجازت دینے والے قاعدے کے برابر نہیں۔ پہلا راستہ بیان کرتا ہے؛ دوسرا اجازت بیان کرتا ہے۔
بیرونی TCP کا مطلب ایک بہاؤ ہے، ایک کنکشن نہیں
جب بیرونی منتقلی UDP ہو، تو ہر اندرونی بہاؤ کی قسمت خود مختار ہے: گم شدہ ڈیٹاگرام اپنی دوبارہ ترسیل تک ایک منتقلی کو متاثر کرتا ہے۔ جب بیرونی منتقلی TCP ہو، تو تمام اندرونی بہاؤ ایک قابل اعتماد بائٹ بہاؤ بانٹتے ہیں۔
یہی مشترکہ بہاؤ وہ حصہ ہے جو لوگ نظر انداز کرتے ہیں۔ بحالی ایک بار ہوتی ہے، سب کے لیے، اس لیے ایک گم شدہ قطعہ اندر ملٹی پلیکس کی گئی ہر ایپلی کیشن کی ٹریفک میں تاخیر کرتا ہے۔ آخری نکات پر اب بھی بہت سے کنکشن اور تار پر ایک کنکشن ہوتا ہے، اور قطار کے سر کا اثر تار ہی پر رہتا ہے۔ سننے والی پورٹس کی تعداد اس بارے میں کچھ نہیں بتاتی، اسی لیے سرنگ کی کارکردگی کے بارے میں سوچنے کے لیے پورٹ گننا کمزور طریقہ ہے۔
اپنی ترتیب درست طریقے سے بیان کریں
یہ کہنے کے بجائے کہ مشین سب کچھ ایک پورٹ سے بھیجتی ہے، منتخب اندرونی ٹریفک اور اسے اٹھانے والی مخصوص بیرونی منتقلی کا نام لیں۔ مقامی سروسز، دوسری سرنگ اور دوسرا پتہ خاندان ایسے بہاؤ بناتے ہیں جو اس گفتگو میں کبھی داخل نہیں ہوتے۔ اپ لنک پر گرفت بیرونی ٹوپل دکھاتی ہے؛ سرنگ کے اندر کی گرفت اندرونی ٹوپل دکھاتی ہے۔
دونوں لیں، اور وقت کی مہریں ساتھ ساتھ رکھیں۔ اگر آپ کو ثابت کرنا ہے کہ کس ایپلی کیشن نے کون سا اندرونی بہاؤ بنایا، تو ہوسٹ پر ساکٹ جدول بہتر آلہ ہے، کیونکہ یہ پورٹس کو براہ راست عمل سے جوڑتا ہے۔ پھر جو بیرونی ٹوپل آپ نے دیکھا اور جس لمحے دیکھا اسے لکھ لیں، کیونکہ دوبارہ جڑنے کے بعد اگلی گرفت جائز طور پر مختلف اعداد دکھا سکتی ہے۔