آپ FORWARD زنجیر میں VPN ٹریفک کے لیے اصول شامل کرتے ہیں، اُسی Linux مشین سے درخواست چلاتے ہیں، اور شمار کنندہ صفر پر ہی رہتا ہے۔ اصول غالباً درست ہے۔ پیکٹ نے وہ راستہ کبھی نہیں لیا، کیونکہ مشین پر ہی پیدا ہونے والی درخواست یہ آگے نہیں بھیجتی۔ ساکٹ سے تار تک پیکٹ کی زندگی کا سراغ لگانا بتاتا ہے کہ ایسا کیوں ہے، اور اصول دراصل کہاں ہونا چاہیے۔

تلاش کریں کہ پیکٹ کہاں پیدا ہوا

Netfilter کا hook ترتیب تین صورتیں الگ کرتا ہے، اور ان میں سے صرف ایک میں FORWARD شامل ہے:

OriginPathHook that sees it
Local processOUTPUT then POSTROUTINGOUTPUT, POSTROUTING
Addressed to a local servicePREROUTING then INPUTPREROUTING, INPUT
Received for another hostPREROUTING, FORWARD, POSTROUTINGFORWARD

مقامی ایپلی کیشن OUTPUT راستے میں شروع ہوتی ہے، کیونکہ کرنل پہلے ہی طے کر چکا ہے کہ پیکٹ یہیں پیدا ہوتا ہے اور کبھی آگے بھیجے جانے کا امیدوار نہیں ہوتا۔ ٹنل بنانا اس درجہ بندی کو نہیں بدلتا؛ ٹنل ایسا آلہ ہے جس سے پیکٹ باہر جا سکتا ہے، ایسا مرحلہ نہیں جو مقامی اخراج کو گزرگاہ بنا دے۔

دو پیکٹ، ایک کہانی

ٹنل قائم ہونے کے بعد ایپ کا اندرونی پیکٹ اور خفیہ کردہ بیرونی پیکٹ الگ الگ چیزیں ہیں۔ اندرونی پیکٹ وہ منزل اور پے لوڈ اٹھائے چلتا ہے جو ایپ نے چنا۔ بیرونی پیکٹ سائفر ٹیکسٹ کو ساتھی کے پتے اور پورٹ تک لے جاتا ہے، اور جسمانی انٹرفیس درحقیقت یہی عبور کرتا ہے۔

آپ کی پالیسی ان میں سے ایک سے متعلق ہے، اور غلط کا انتخاب اس بات کی عام وجہ ہے کہ اصول کچھ کرتا ہوا نظر نہیں آتا۔ ساتھی کے بیرونی پتے سے میل کھانے والا اصول ہر ٹنل پیکٹ کو یکساں دیکھتا ہے، اندر کی ایپ چاہے کچھ بھی کرے۔ اندرونی منزل سے میل کھانے والا اصول آپ کے لیے اہم ٹریفک دیکھتا ہے، اور یہ تبھی فعال ہوگا جب وہ پیکٹ اُس hook تک پہنچے جہاں آپ نے اصول رکھا ہے۔

namespace حدود کو ہلاتے ہیں

کنٹینر اصول بدلے بغیر اسے مشکل بناتا ہے۔ ایپ کی درخواست کنٹینر کے نیٹ ورک namespace کے اندر مقامی اخراج ہے۔ ہوسٹ وہ ٹریفک مجازی Ethernet انٹرفیس پر وصول کرتا ہے اور آگے بھیج سکتا ہے، اس لیے ہوسٹ پر FORWARD اصول بامعنی ہو سکتا ہے، حالانکہ درخواست پیدا کرنے والے عمل نے ہوسٹ کی OUTPUT زنجیر کو کبھی نہیں چھوا۔

hook منتخب کرنے سے پہلے طے کریں کہ اصولوں کا مجموعہ اور ٹنل واقعی کہاں رہتے ہیں۔ کنٹینر کے اندر ٹنل، ہوسٹ پر ٹنل اور کنٹینر کا اُس سے route ہونا، اور الگ namespace میں ٹنل — یہ تین مختلف ٹوپولاجیاں اور تین مختلف اصول مقامات ہیں۔ اصول اُس namespace کے اندر پڑھیں جو آلے کا مالک ہے، صرف ڈیفالٹ میں نہیں۔

پوچھیں کہ کیا واقعی mark کی ضرورت ہے

اگر مقصد ایک منزل کے سابقے کو ٹنل سے بھیجنا ہے، تو اُس سابقے کے لیے route کافی ہو سکتا ہے۔ پہلے مؤثر route دیکھیں، سرور کی دھکی ہر چیز سمیت: ری ڈائریکٹ شدہ ڈیفالٹ آپ کی سوچی ہوئی تنگ پالیسی سے کہیں زیادہ ٹریفک VPN سے بھیجتا ہے، اور کتنا ہی mark کیا جائے، نتیجہ مقصد سے مطابقت نہیں رکھے گا۔

درجہ بندی تب ضروری ہے جب فیصلہ کسی ایسی چیز پر منحصر ہو جو route بیان نہیں کر سکتا، جیسے ماخذ، صارف یا عمل۔ موصول ٹریفک کے لیے PREROUTING میں mark کام کرتا ہے۔ مقامی ٹریفک کے لیے mark ایسے اخراج مرحلے میں ہونا چاہیے جو mark رکھنے کے بعد نئی route تلاش شروع کر سکے۔ nftables میں یہ اخراج hook پر route قسم کی زنجیر ہے؛ عام اخراج فلٹر زنجیر قدر رکھ کر route کو بغیر تبدیلی چھوڑ دے گی۔

iptables میں مساوی چیز mangle OUTPUT ترتیب میں رہتی ہے، اور وہی شرط لاگو ہے: mark موجود ہونے کے بعد route فیصلہ دوبارہ دیکھنا ہوگا۔ پھر پالیسی اصول کو mark استعمال کرنا اور قابل استعمال route والی جدول کی طرف اشارہ کرنا ہوگا۔ conntrack mark رکھنا تیسرا، الگ عمل ہے؛ یہ بہاؤ پر قدر محفوظ کرتا ہے اور خود وہ قدر موجودہ پیکٹ پر نہیں رکھتا کہ route اُسے پڑھ سکے۔

تلاش اور شمار کنندہ ساتھ جانچیں

nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1

پتہ اور mark محض مثال ہیں، اور route کے دونوں سوال الگ الگ جواب دیتے ہیں۔ دوسرا پوچھتا ہے کہ اگر پیکٹ پر وہ mark ہوتا تو کرنل کیا کرتا؛ یہ نہیں دکھاتا کہ آپ کا اصولوں کا مجموعہ mark دیتا ہے۔ اسے مفروضے کا امتحان سمجھیں، پالیسی کے کام کرنے کا ثبوت نہیں۔

پھر بے ضرر درخواست چلائیں اور ایک ساتھ دو چیزیں دیکھیں: آپ کے منتخب hook پر شمار کنندہ، اور وہ اخراج جو پیکٹ نے واقعی لیا۔ اگر شمار کنندہ بڑھے اور پیکٹ کہیں اور سے نکلے تو mark یا جدول غلط ہے۔ اگر دونوں نہ بڑھیں تو پیکٹ اُس hook تک پہنچتا ہی نہیں، اور اگلا سوال namespace یا راستہ ہے۔

آخر میں، امتحان کو اُس حد تک رکھیں جو طریقہ کار بیان کر سکتا ہے۔ ایک پتے کے لیے ایک route، ایسی خدمت کے لیے مستقل پالیسی نہیں بنتا جس کے پتے بدلتے رہتے ہیں۔ پہلے پیکٹوں کا دائرہ طے کریں، پھر دیکھیں کہ دوبارہ جڑنے کے بعد بھی route اور mark کا ڈیزائن وہ دائرہ تھام سکتا ہے۔

متعلقہ مضامین