کسی بھی پلیٹ فارم پر کوڈ سے فعال VPN ٹنل کیسے پہچانیں
کیا ٹنل موجود ہے، کیا یہ منزل اس میں سے گزرتی ہے، یا دور کا سرا جواب دیتا ہے؟ یہ تین مختلف جانچیں اور تین مختلف اشارے ہیں۔
”VPN آن ہے؟“ دراصل ایک ہی جملے میں تین سوال ہیں۔ آپ کے کوڈ کو ان میں سے کون سا چاہیے یہ پہلا فیصلہ ہے، اور زیادہ تر عمل درآمد اسی کو چھوڑ دیتے ہیں۔ کیا اس ڈیوائس پر ٹنل موجود ہے، کیا اس منزل کی ٹریفک اسی سے باہر نکلتی ہے، یا دور کا سرا اسی شناخت کے ساتھ جواب دیتا ہے جس کی آپ توقع کرتے ہیں۔ خصوصیت منتخب کریں، پھر وہ اشارہ منتخب کریں جو اسے ناپتا ہے، اور آخر میں لاگ میں لکھیں کہ آپ نے واقعی کون سا ناپا۔
تین خصوصیات، تین اشارے
ہر ایک کو ایک سطر میں سمیٹنے پر، تین سوالوں کے تین مختلف جواب ہیں۔ نیچے دیا گیا جدول فیصلہ خود ہے، اس کا خلاصہ نہیں۔
| Property | Signal that answers it | What it still leaves open |
|---|---|---|
| Existence | The platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOS | Tunnels of a type the platform does not manage, which includes most third-party clients |
| Path | A route lookup for the one destination, or a scoped proxy or interface key that names the tunnel | Whether the far end is the peer you trust |
| Identity | An authenticated response from the far end, or a source-address policy applied on the server | Which local interface carried the packets |
آخری سطر آہستہ پڑھیں۔ جواب دینے والا نجی میزبان ثابت کرتا ہے کہ کسی چیز نے جواب دیا، یہ نہیں کہ جواب ٹنل سے آیا، اور دوسرے سرے پر کون ہے اس بارے میں کچھ نہیں کہتا۔ اگر آپ کو مطلوبہ خصوصیت راستہ ہے تو راستہ ناپیں۔
وجود: پلیٹ فارم کی اپنی حالت
Windows مقامی پروفائلز کے لیے یہ جواب Remote Access Service API کے ذریعے دیتا ہے۔ RasEnumConnections فہرست بناتا ہے کہ کیا جڑا ہوا ہے، RasGetConnectStatus ایک اندراج کی حالت بتاتا ہے، اور RasGetLinkStatistics رفتار، بائٹ کاؤنٹر اور کنکشن کی عمر شامل کرتا ہے۔ حدود ہی اصل بات ہیں: OpenVPN، WireGuard اور وینڈر کلائنٹ کبھی RAS کنکشن درج نہیں کرتے، اس لیے اس قسم کی صحت مند ٹنل خالی فہرست دکھاتی ہے اور سادہ کوڈ اسے بند بتا دیتا ہے۔
لینکس ڈیسک ٹاپ وہی خصوصیت D-Bus پر NetworkManager کے ذریعے ظاہر کرتے ہیں، جہاں VPN کنکشن آبجیکٹ پر PropertiesChanged جانچ کو واقعہ بنا دیتا ہے اور State خصوصیت بتاتی ہے کہ لنک کب جڑی حالت تک پہنچتا ہے۔ شیل سے nmcli connection show --active وہی معلومات پڑھتا ہے، اور ڈیبگ کرتے وقت آپ کو یہی چاہیے۔ macOS وہ فہرست System Configuration فریم ورک میں رکھتا ہے، اور scutil اس کا کمانڈ لائن منظر ہے۔ تینوں پلیٹ فارم کے زیرِ انتظام کنکشن بیان کرتے ہیں، اور تینوں ایسی ٹنل کے بارے میں خاموش رہتے ہیں جو اس کے زیرِ انتظام نہیں۔
راستہ: پیکٹ واقعی کہاں جاتا ہے
نام ملانا وہ شارٹ کٹ ہے جس تک سب پہلے پہنچتے ہیں: انٹرفیس کی فہرست بنائیں، سٹرنگ کو tun، tap، ppp یا ipsec کے سامنے جانچیں، اور میل کو ثبوت مانیں۔ یہ ایک اندازہ ہے، اور انٹرفیس کا مجموعہ ایک جیسا دکھ سکتا ہے چاہے اس میں سے کچھ گزر رہا ہو یا نہ ہو۔ پرانے iOS بلڈ اسی طرح جواب دیتے تھے اور بعد والے رک گئے، کیونکہ نظر آنے والے انٹرفیس اب دونوں حالتوں میں فرق نہیں کرتے تھے۔
وہاں اس کی جگہ سسٹم پراکسی لغت نے لی۔ جب تک VPN جڑا ہوا ہے، پراکسی سیٹنگز کی کال ٹنل سے متعلق انٹرفیس تک محدود کلیدیں واپس کرتی ہے، اور جب کچھ بھی جڑا نہ ہو تو لغت خالی واپس آتی ہے۔ یہ سننے سے زیادہ کمزور بیان ہے، کیونکہ یہ ٹنل کے وجود پر سسٹم کے یقین کو درج کرتا ہے، یہ نہیں کہ کون سی منزل اسے استعمال کرتی ہے۔
اینڈرائیڈ کے پاس اس پھندے کا اپنا نسخہ ہے: vpn.connectivity نشریات کچھ بلڈز میں مینی فیسٹ میں اعلان کردہ وصول کنندگان تک پہنچتی ہے اور دیگر میں رن ٹائم پر رجسٹرڈ وصول کنندگان تک۔ اسے بہترین کوشش سمجھیں، اور اس کے پیچھے براہِ راست جانچ رکھیں۔
جب منزل ہی اہم ہو، تو اڈاپٹر فہرست کے بجائے روٹنگ جدول سے پوچھیں۔ ڈیفالٹ گیٹ وے کے اندازے کئی نیٹ ورک والی مشینوں پر اور ان ٹنلوں پر ٹوٹ جاتے ہیں جو اپنا گیٹ وے نصب کرتے ہیں۔
شناخت: دور کے سرے کو جانچیں
ہر چند سیکنڈ بعد دور سرے پر ICMP گونج بھیجنے والا لوپ اس قسم کی سب سے سستی جانچ ہے، اور یہ مفید سمت میں ناکام ہوتا ہے۔ اسے ایسے پتے کی طرف مبذول کریں جو صرف نجی نیٹ ورک کے اندر موجود ہو، کیونکہ عوامی پتہ کسی بھی کام کرنے والے اپ لنک پر جواب دیتا ہے اور کچھ ثابت نہیں کرتا۔ جہاں ICMP فلٹر ہوتا ہے، وہاں سروس پورٹ پر مختصر TCP کنکشن وہی کام کرتا ہے۔
سرور کی طرف کی جانچ کے پاس بالکل ایک اشارہ ہوتا ہے: کنکشن پر ماخذ پتہ۔ رینجز کی فہرست برقرار رکھنا دیکھ بھال کا کام ہے، اور یہ ٹنل کو کسی بھی ایسے نیٹ ورک سے الگ نہیں کر سکتا جو اتفاقاً وہی بلاک استعمال کرتا ہو۔
موٹی پالیسی اس کے ساتھ گزارہ کر سکتی ہے۔ شناخت نہیں کر سکتی، اس لیے کلائنٹ کی تصدیق کریں، بجائے اس کے کہ اس بات پر بھروسہ کریں کہ اس کے پیکٹ کہاں سے آتے دکھتے ہیں۔
زمرہ درج کریں، فیصلہ نہیں
ناکامی کے زمرے لاگ میں الگ رکھیں: کوئی انٹرفیس نہیں، انٹرفیس موجود ہے مگر منزل ناقابلِ رسائی ہے، منزل قابلِ رسائی ہے مگر تصدیق مسترد ہو گئی۔ یہ تین مختلف مالک ہیں، اور ہر ایک مختلف تحقیق کھولتا ہے۔
انہیں ایک ہی ”VPN بند“ میں سمیٹ دینا رپورٹ ایسی ٹیم کو بھیجتا ہے جو اسے ٹھیک نہیں کر سکتی۔ زمرہ مفید پیداوار ہے؛ فیصلہ ہی اسے غلط بناتا ہے۔