VirtualBox NAT یا بریج: VM کا VPN کہاں ختم ہوتا ہے
NAT مہمان کو ہوسٹ کے پیچھے چھپاتا ہے، اس لیے ہوسٹ پر بنی سرنگ اسے ڈھانپ لیتی ہے۔ بریج مہمان کو اپنا پتہ دیتا ہے، اس لیے سرنگ کو VM کے اندر ہی رہنا چاہیے۔
جب بھی کوئی ورچوئل مشین VPN کلائنٹ چلاتی ہے تو دو مختلف سوالات ساتھ آتے ہیں، اور ان کے جواب مختلف ہوتے ہیں۔ پہلا یہ ہے کہ مہمان کے اندر کی سرنگ ہوسٹ کی حفاظت کرتی ہے یا نہیں، اور دوسرا یہ ہے کہ ہوسٹ پر بنی سرنگ مہمان کو ڈھانپتی ہے یا نہیں۔ اڈاپٹر کا موڈ دونوں کا فیصلہ کرتا ہے، خود VPN سافٹ ویئر سے بھی زیادہ۔ NAT اڈاپٹر ہوسٹ کو نظر آنے والا آخری نقطہ بناتا ہے، جبکہ بریج اڈاپٹر مہمان کو اس کے اپنے پتے کے ساتھ نیٹ ورک پر رکھتا ہے۔
خفیہ کردہ سیشن اصل میں کون ختم کرتا ہے
خفیہ کردہ سیشن اسی مشین کا ہوتا ہے جو اسے ختم کرتی ہے، اور جب کلائنٹ VM کے اندر چلتا ہے تو وہ مہمان ہوتی ہے۔ اس سرنگ سے صرف وہی ٹریفک گزرتا ہے جو مہمان کے ورچوئل اڈاپٹر میں داخل ہوتا ہے، اور ہائپر وائزر کبھی خود سے کوئی دوسری مشین مہمان کے ذریعے نہیں بھیجتا۔ اسی لیے مہمان کام کرتی سرنگ رکھ سکتا ہے جبکہ ہوسٹ کھلے نیٹ ورک پر براؤز کرتا ہے۔ الٹا ہم آہنگ نہیں ہے، اور یہی عدم توازن وہ حصہ ہے جس میں زیادہ تر رہنما غلطی کرتے ہیں۔
بیرونی نیٹ ورک کس کا پتہ دیکھتا ہے یہ وہ سوال ہے جس کا جواب اڈاپٹر کا موڈ دیتا ہے۔ یہ طے ہونے کے بعد کوریج پالیسی کا سوال نہیں رہتی اور میکانی ہو جاتی ہے۔ نیچے سب کچھ انہی دو حقیقتوں سے آتا ہے۔
NAT مہمان کو ہوسٹ جیسا نظر آنے تک دوبارہ لکھتا ہے
NAT میں، پہلے سوئچ تک پہنچنے سے پہلے ہی ہائپر وائزر مہمان کے ہر پیکٹ کو ہوسٹ کے پتے پر دوبارہ لکھتا ہے۔ پھر یہ ٹریفک ہوسٹ کے اپنے نیٹ ورک اسٹیک کو دی جاتی ہے، جہاں یہ ہوسٹ کی روٹنگ جدول کی پیروی کرتی ہے، ہوسٹ پر بنی سرنگ کی ملکیت والے ڈیفالٹ راستے سمیت۔ اس لیے NAT مہمان بغیر کسی ترتیب کے ہوسٹ پر بنی سرنگ سے ڈھک جاتا ہے، جو مہمان سے ہوسٹ سمت کی طرف اشارے کے بالکل برعکس ہے۔
# on the host: adapter mode and NAT DNS behaviour
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
VBoxManage modifyvm "lab-vm" --natdnshostresolver1 on
اپنا کلائنٹ چلانے والا مہمان وہ سرنگ مہمان کے اندر ہی ختم کرتا ہے، اور خفیہ کردہ ٹریفک پھر اسی دوبارہ لکھنے سے باہر نکلتی ہے، اس لیے ہوسٹ کی ایپلیکیشنز اپنا راستہ اور اپنا اخراجی پتہ برقرار رکھتی ہیں۔ VirtualBox اس موڈ میں ناموں کے حل کا بھی مالک ہے اور --natdnshostresolver1 فعال نہ ہونے تک مہمان کے سوالات اپنے انجن سے بھیجتا ہے۔ اسے فعال کرنے سے مہمان کی تلاشیں ہوسٹ کے حل کنندہ کو مل جاتی ہیں، جو ہوسٹ کے اپنے نظریے کے درست ہونے پر حل درست کرتا ہے اور اتنی ہی مقدار میں ایسا حل کنندہ دیتا ہے جو شاید صرف سرنگ کے اندر ہی موجود ہو۔ ترتیب بدلنے سے پہلے VM بند ہونا چاہیے، اور ترتیب مہمان کے سافٹ ویئر کی نہیں بلکہ اڈاپٹر کی ہے۔
بریج مہمان کو اپنا کرایہ اور اپنا انکشاف دیتا ہے
بریج مہمان کے فریموں کو طبعی حصے پر بھیجتا ہے، اس لیے DHCP اسے کرایہ دیتا ہے اور نیٹ ورک اسے الگ ہوسٹ سمجھتا ہے۔ ہر بریج شدہ مہمان اپنے ڈیفالٹ راستے کے ساتھ آزاد سرنگ رکھ سکتا ہے، اور ہوسٹ کی جدول کبھی نہیں بدلتی۔ قیمت انکشاف ہے: مہمان نشریات کا جواب دیتا ہے، پڑوسی جدولوں میں دکھائی دیتا ہے، اور سوئچ پورٹ کی حفاظت اور بے تار کلائنٹ کی علیحدگی کے تابع آتا ہے۔ ہوسٹ پر بنی سرنگ بھی اس ترتیب کو نہیں ڈھانپتی، کیونکہ مہمان کے فریم کبھی ہوسٹ اسٹیک سے نہیں گزرتے۔
NAT کی صورت سے یہ فرق اشارے کے طور پر چھوڑنے کے بجائے صاف کہنا بہتر ہے۔ بریج شدہ مہمان کو اپنا کلائنٹ اور اپنی اسناد ہر اس وقت درکار ہوتی ہیں جب اس کی ٹریفک کو سرنگ استعمال کرنی ہو۔ جہاں مہمان کو مقامی نیٹ ورک کے لیے نادیدہ رہنا ہو، وہاں NAT یا کنٹرول شدہ روٹنگ والا صرف اندرونی نیٹ ورک بہتر ڈیزائن ہے۔
مہمان ہوسٹ کا گیٹ وے کیوں نہیں ہو سکتا
مہمان کی سرنگ ہوسٹ کو قرض دینے کے لیے دونوں بڑے ہائپر وائزرز میں کوئی معاون سوئچ نہیں ہے۔ ہوسٹ کے پاس مہمان کی سرنگ میں کوئی راستہ نہیں اور اس کی طرف اشارہ کرنے والا کوئی ترجمہ قانون نہیں، اس لیے مہمان اور ہوسٹ کی ٹریفک الگ مالکوں کے ساتھ الگ بہاؤ ہی رہتی ہے۔ یہ سمت اڈاپٹر کے موڈ سے قطع نظر ناکام رہتی ہے۔
کارآمد متبادل فارورڈنگ اور پراکسی ہیں۔ SSH کی مقامی فارورڈنگ ہوسٹ کو اپنے لوپ بیک سے جوڑنے دیتی ہے جبکہ مہمان بہاؤ کو سرنگ میں لے جاتا ہے، جو دوسرا کلائنٹ نصب کیے بغیر TCP خدمات ڈھانپ دیتی ہے۔ ہوسٹ کی اپنی IP ٹریفک کو اس کے بجائے مہمان کی سرنگ استعمال کرانا مہمان کے اندر روٹر، نیز ہوسٹ پر واضح راستہ اور ہوسٹ پر ترجمہ مانگتا ہے۔ یہ چیک باکس نہیں بلکہ چھوٹا نیٹ ورک ڈیزائن ہے، اور واپسی کے راستے کا منصوبہ درکار ہے۔ جب مہمان صرف کلائنٹ چلانے کے لیے ہو، تو کلائنٹ ہوسٹ پر رکھیں اور اضافی چھلانگ ہٹا دیں۔
ssh -N -f -L 8080:internal-host.example:80 user@lab-vm
حل کنندہ اور راستے سرحد عبور نہیں کرتے
DNS اسی اڈاپٹر کی پیروی کرتا ہے جس نے اختیار حاصل کیا، اس لیے مہمان ہوسٹ کی سرنگ کے حل کنندہ کا وارث نہیں بنتا اور ہوسٹ کو کبھی مہمان کی طرف بھیجا گیا سرور معلوم نہیں ہوتا۔ بھیجی گئی dhcp-option DNS قدریں اسی انٹرفیس پر لاگو ہوتی ہیں جس نے انہیں قبول کیا، اسی لیے کلائنٹ کے بغیر بریج شدہ مہمان اندرونی نام حل نہیں کر سکتا۔ NAT مہمان عام طور پر ہائپر وائزر کی ڈی این ایس کی دیکھ بھال استعمال کرتا ہے، اور فرق ہر ماحول میں ایک کمانڈ میں نظر آتا ہے۔
# on the host
VBoxManage showvminfo "lab-vm" | grep -i -E "nic|nat"
# inside a Linux guest
ip -4 route
resolvectl status
# inside a Windows guest
Get-DnsClientServerAddress
یہ ماننے سے پہلے کہ ان میں سے کوئی ہوسٹ کی پیروی کرتا ہے، مہمان کے اندر حل کنندہ اور راستہ پڑھیں۔ اگر اندرونی نام وہیں حل کرنے ہوں تو سرنگ کا حل کنندہ مہمان کے اپنے اڈاپٹر میں شامل کریں، پھر ایسے نام سے جانچیں جو صرف سرنگ کے پیچھے موجود ہو۔ ہر VM کے لیے اڈاپٹر کا موڈ، سرنگ کا مالک اور حل کنندہ کا ماخذ لکھیں، کیونکہ یہ تین حقیقتیں تقریباً ہر بعد کے سوال کا جواب دیتی ہیں۔ دوسرے ہائپر وائزر موڈز کے نام بدلتے ہیں اور اصول کو برقرار رکھتے ہیں۔