ایک ہی لیپ ٹاپ پر، ایک VPN کلائنٹ منسلک ہونے کی حالت میں، Linux کنٹینر آپس میں بات کرتے رہتے ہیں اور Windows کنٹینر رک جاتے ہیں۔ بدلنے والی چیز امیج نہیں؛ پیکٹ میزبان تک جو راستہ لیتے ہیں وہ ہے۔ ڈیفالٹ نیٹ ورک پر Windows کنٹینر میزبان کی روٹنگ ٹیبل اور ترجمہ ادھار لیتے ہیں، اس لیے میزبان کی روٹنگ بدلنے والی پالیسی اُنہیں بھی بدل دیتی ہے۔ کچھ بھی دوبارہ انسٹال کرنے سے پہلے روٹ تلاش سے اس کی تصدیق کریں۔

Windows کنٹینر کے پیکٹ میزبان میں کہاں داخل ہوتے ہیں

ڈیفالٹ nat نیٹ ورک کا کنٹینر Host Networking Service کے سابقے سے پتہ حاصل کرتا ہے، عام طور پر 172.16.0.0/12 کے اندر کہیں، اور مجازی اڈاپٹر کے ذریعے میزبان تک پہنچتا ہے۔ میزبان اُس سابقے کا راستہ رکھتا ہے اور ٹریفک کو اُس اڈاپٹر کی طرف منتقل کرتا ہے جو اس وقت فعال ہے۔ اُس راستے کے درمیان کوئی الگ مجازی مشین نہیں ہے۔

یہی ڈیزائن خرابی کو مشینی بناتا ہے۔ جب کنٹینر پیکٹ بھیجتا ہے تو میزبان کنٹینر سابقے کے لیے روٹ تلاش کرتا ہے۔ جو راستہ جیتتا ہے پیکٹ وہیں جاتا ہے، اور کنٹینر کا اس میں کوئی رائے نہیں۔

VPN کلائنٹ اُس راستے پر کیا بدلتا ہے

کارپوریٹ کلائنٹ اکثر بہت سے راستے اور ایک فلٹر نصب کرتا ہے جو ٹنل فعال رہنے کے دوران مقامی ذیلی نیٹ تک رسائی سے انکار کرتا ہے۔ مقصد دفاعی ہے: متاثرہ مقامی نیٹ ورک محفوظ مشین تک نہیں پہنچنا چاہیے۔ ضمنی اثر یہ ہے کہ میزبان کا راستہ کنٹینر سابقے تک اب مقامی NAT نیٹ ورک نہیں ہے۔

اس کے بجائے تلاش ٹنل سے مطابقت رکھتی ہے اور پیکٹ اُس گیٹ وے کے حوالے کر دیا جاتا ہے جس نے اُس کنٹینر پتے کا کبھی نام نہیں سنا۔ Ping ناکام ہوتا ہے، ایپلیکیشن کا وقت ختم ہو جاتا ہے، اور VPN آئیکن چمکتے ہوئے کنٹینر ٹوٹا ہوا دکھائی دیتا ہے۔ منسلک حالت میں میزبان کی ٹیبل دیکھیں اور حریف راستہ نظر آتا ہے۔

Container modeOutbound pathTypical result behind the VPN
Windows, default natHost routes and translates container trafficContainer prefix follows the tunnel and fails
Windows, transparentContainer sits on the physical linkDepends on the local subnet being allowed
Linux engine on Docker DesktopVM egress proxied by a host processOften keeps working

Linux کنٹینر مختلف رویہ کیوں رکھتے ہیں

Linux انجن کنٹینر ہلکی مجازی مشین کے اندر چلاتا ہے، اور اُس مشین سے باہر جانے والے کنکشن کنٹینر کی جانب سے میزبان طرف کے پراکسی کے ذریعے کھولے جاتے ہیں۔ ساکٹ میزبان شروع کرتا ہے، اس لیے کنٹینر سابقے کے بارے میں VPN کا قاعدہ اُس پر اسی طرح لاگو نہیں ہوتا، اور کام کا بوجھ نیٹ ورک تک پہنچتا رہتا ہے۔

یہی فرق یہ بھی بتاتا ہے کہ Linux کی ترکیبیں کیوں منتقل نہیں ہوتیں۔ جس Linux کنٹینر کو اپنی ٹنل درکار ہو اُسے TUN ڈیوائس اور NET_ADMIN صلاحیت دی جاتی ہے۔ Windows کنٹینر کسی انٹرفیس کو ڈیوائس کے طور پر ظاہر نہیں کرتے، اس لیے اُس نمونے کا اُس طرف کوئی متبادل نہیں۔

راستہ ثابت کریں، پھر ڈیزائن منتخب کریں

شواہد میزبان سے جمع کریں، کنٹینر سے نہیں، کیونکہ تلاش میزبان کرتا ہے:

docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"

VPN منسلک ہونے سے پہلے ایک بار اور بعد میں ایک بار روٹ آؤٹ پٹ چلائیں۔ اگر دوسرے آؤٹ پٹ میں کنٹینر سابقہ ٹنل اڈاپٹر کی طرف اشارہ کرے تو تشخیص مکمل ہے اور کنٹینر دوبارہ شروع کرنے سے مدد نہیں ملے گی۔

پہلا آپشن پالیسی کا فیصلہ ہے: نیٹ ورک کے مالک سے پوچھیں کہ کیا اس ڈیوائس کے لیے مقامی LAN رسائی کی اجازت دی جا سکتی ہے۔ کئی کارپوریٹ کلائنٹ اسے سیٹنگ کے طور پر دیتے ہیں، لیکن یہ جان بوجھ کر بنائی گئی حد کو کمزور کرتا ہے۔ اسے مالک اور جائزے کی تاریخ کے ساتھ دستاویزی استثنا کے طور پر مانگیں۔ ہر ڈیوائس کے لیے وہ ٹوگل جس کی طرف کوئی واپس نہیں آتا، وہی راستہ ہے جس سے دفاعی پالیسی خاموشی سے غائب ہو جاتی ہے۔

جہاں پالیسی کو قائم رہنا ہے وہاں راستے سے لڑنے کے بجائے کام کا بوجھ منتقل کریں۔ واضح ذیلی نیٹ اور گیٹ وے والا شفاف نیٹ ورک کنٹینر کو مقامی لنک پر رکھتا ہے، Linux کا بوجھ VM پراکسی کے پیچھے چلتا ہے، اور اپنے کلائنٹ کے ساتھ الگ مجازی مشین اپنی پالیسی برقرار رکھتی ہے۔ ایک جان بوجھ کر منتخب کریں اور کنٹینر کے اندر سے جانچیں، کیونکہ صارف کی درخواست وہیں پیدا ہوتی ہے۔

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