اس ایپ کو خارج کرنے کا کوئی سوئچ نہیں: عمل کو اپنا ذریعہ دیں
روٹنگ پتے ملاتی ہے، عمل کے نام نہیں۔ خارج شدہ پروگرام کو اس کا اپنا ذریعہ اور جدول دیں، یا فیصلہ روٹر پر منتقل کریں، جہاں یہ دیانت دار ہے۔
ایک پروگرام عام کنکشن استعمال کرے جبکہ باقی سب سرنگ پر رہے، اور کلائنٹ کے پاس اس کے لیے کوئی سوئچ نہیں۔ کوئی چھپا ہوا مینو بھی ملنے کو نہیں۔ راستہ پیکٹ کے اندر کے فیلڈز سے چنا جاتا ہے، اور پیکٹ پتے اور پورٹ لے کر چلتا ہے، اس عمل کی شناخت نہیں جس نے اسے بنایا، اس لیے اخراج کو انہی فیلڈز میں سے کسی ایک میں بیان کرنا ہوگا۔ ایک بار پیکٹ کا پیچھا کریں اور دستیاب اختیارات پراسرار رہنا چھوڑ دیتے ہیں۔
کلائنٹ یہ کیوں پیش نہیں کر سکتا
منزل کی روٹنگ منزل کے پتے کا موازنہ سابقوں سے کرتی ہے اور طویل ترین مماثلت رکھتی ہے۔ اس لمحے ہر پیکٹ ایک جیسا دکھتا ہے، چاہے اسے کسی نے بھی بنایا ہو۔ ذریعہ کی پالیسی روٹنگ موازنہ کو ذریعہ کے پتے تک وسیع کرتی ہے، اور یہی وہ ہک ہے جو ہر عملی حل استعمال کرتا ہے: ذریعہ بدلیں، اور دوسرا جدول اہل ہو جاتا ہے۔
پورٹ مدد نہیں کرتے۔ پورٹ کے لحاظ سے اخراج کا جائزہ منزل کی تلاش سے پہلے لینا پڑتا، اور اس فیصلے میں پورٹ کا کوئی حصہ نہیں۔ پورٹ کی بنیاد پر اخراج کے طور پر جو بھی مشتہر ہوتا ہے وہ درحقیقت کسی دوسرے فیلڈ سے خارج کرتا ہے اور اسے ڈھیلے انداز میں بیان کرتا ہے۔
حقیقی ایپ کے لحاظ سے روٹنگ وہاں موجود ہے جہاں پلیٹ فارم نے اس کے لیے طریقہ کار شامل کیا، جیسے Windows پر فلٹر کال آؤٹ یا Android پر VPN سروس بائنڈنگ۔ ڈیسک ٹاپ OpenVPN مثال اس میں سے کچھ نہیں لاتی، اور کوئی کنفیگریشن جھنڈا اسے ایجاد نہیں کرتا۔
Linux: عمل کو نشان زد کریں، پھر نشان کو روٹ کریں
سب سے صاف طریقہ فیصلے کو اس عمل سے باندھتا ہے جو ساکٹ کا مالک ہے۔ owner کی مماثلت OUTPUT زنجیر میں مقامی طور پر پیدا ہونے والی ٹریفک کے لیے کام کرتی ہے، اس لیے وہاں لگایا گیا نشان الگ جدول چن سکتا ہے:
iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table 200
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.0 table 200
ip route add default via 192.168.1.1 dev eth0 table 200
صارف 1001 کے پیکٹ پھر جدول 200 سے مشورہ کرتے ہیں اور عام گیٹ وے سے باہر جاتے ہیں، جبکہ مرکزی جدول باقی سب کچھ سرنگ میں بھیجتا رہتا ہے۔ owner کی مماثلت صرف مقامی طور پر پیدا ہونے والے پیکٹوں پر لاگو ہوتی ہے، جو یہاں اہم ٹریفک ہے، اور یہ کسی دوسرے ہوسٹ کے لیے آگے بھیجے گئے پیکٹوں کی درجہ بندی نہیں کر سکتی۔ ارادے سے نہیں، اوزاروں سے جانچیں: ss -tnp قائم شدہ کنکشنوں کا مقامی پتہ اور مالک عمل دکھاتا ہے، اور ip route get 1.1.1.1 mark 0x1 دکھاتا ہے کہ نشان کون سا جدول چنتا ہے۔
نیٹ ورک نام کی جگہ خودمختار پروگرام کے لیے زیادہ مضبوط جواب ہے، کیونکہ اس کے اندر بنایا گیا ہر ساکٹ ساخت کے اعتبار سے اسی سے بندھا ہوتا ہے، اس لیے مددگار عمل اور ذیلی کنکشن بغیر کسی درجہ بندی کے رویہ وراثت میں لیتے ہیں۔ قیمت پلمبنگ ہے: ایک veth جوڑا، ہر سرے پر ایک پتہ، اور نام کی جگہ کے اندر میزبان کی طرف واپس اشارہ کرنے والا طے شدہ راستہ۔
ip netns add novpn
ip link add veth-host type veth peer name veth-ns
ip link set veth-ns netns novpn
ip addr add 10.200.0.1/24 dev veth-host
ip netns exec novpn ip addr add 10.200.0.2/24 dev veth-ns
ip netns exec novpn ip route add default via 10.200.0.1
Windows: منزل ہی فیصلہ کرتی ہے
Windows منزل سے باہر جانے والا انٹرفیس چنتا ہے، اس لیے مختلف راستہ چاہنے والے پروگرام کو اس انتخاب سے پہلے اسٹیک جو پوچھتا ہے وہ کچھ بدلنا پڑتا ہے۔ ForceBindIP پہلا نصف سنبھالتا ہے: پروگرام کو اس طرح شروع کرتا ہے کہ اس کے ساکٹ پہلے ہی آپ کے بتائے ہوئے مقامی پتے سے بندھے ہوں۔ اکیلا یہ نہیں بدلتا کہ پیکٹ کس انٹرفیس سے باہر جاتا ہے، کیونکہ راستہ اب بھی منزل ہی چنتی ہے۔ جس لیپ ٹاپ کا طے شدہ راستہ سرنگ کی طرف اشارہ کرتا ہے اس پر ذریعہ باندھیں، پیکٹ پھر بھی سرنگ میں داخل ہوتا ہے۔
علامت کی ایک بار پہچان ہونے پر پڑھنے کے قابل شکل ہوتی ہے۔ یہ اس LAN پتے کے لیے لاگو ہوتا ہے جہاں منتخب انٹرفیس سیدھا پہنچتا ہے، اور انٹرنیٹ کی ہر اس چیز کے لیے ناکام ہوتا ہے جس کا راستہ سرنگ کی طرف اشارہ کرتا ہے۔ یہ کام کرتا بھی دکھتا ہے جب تک پروگرام کام کسی مددگار کو نہ سونپے، کیونکہ اپنا ساکٹ کھولنے والے مددگار کو بندھن کے بارے میں کبھی نہیں بتایا گیا۔
جب ایک عمل غلط اکائی ہو تو فیصلہ منتقل کریں
اگر اصل ضرورت پروگرام نہیں بلکہ ڈیوائس ہے، تو اسے اس کے اپنے SSID یا VLAN پر رکھیں اور روٹر کو فیصلہ کرنے دیں: وہ ذریعہ عام راستہ لیتا ہے جبکہ دوسرے ذرائع سرنگ استعمال کرتے ہیں۔ مخصوص گیٹ وے مشین دوسری دیانت دار ڈیزائن ہے: یہ VPN رکھتی ہے اور صرف وہ منزلیں وصول کرتی ہے جو روٹر اسے بھیجتا ہے۔ VLAN پر پالیسی ڈیوائس کے کھولے گئے ہر بہاؤ کو ڈھانپتی ہے، ان مددگار عملوں سمیت جنہوں نے Windows طریقہ توڑا۔ بدلہ دائرہ ہے: اس ڈیوائس پر دو پروگراموں کو اب مختلف طریقے سے نہیں دیکھا جا سکتا۔
دونوں ایک جملے میں بتائے جانے والے دائرے والی ذریعہ یا منزل کی پالیسیاں ہیں۔ کوئی بھی ایپ کے لحاظ سے نہیں، اور جو ڈیزائن خود کو ایپ کے لحاظ سے بتاتا ہے وہ پہلی بار ناکام ہوتا ہے جب پروگرام اپنا کام دوسرے عمل کو سونپتا ہے۔