صرف SOCKS بولنے والی ایپ کے پاس عام VPN پر بات کرنے کو کچھ نہیں ہوتا، کیونکہ ٹنل پیکٹ لے جاتی ہے اور ایپ کو پراکسی اینڈ پوائنٹ چاہیے۔ OpenSSH وہ اینڈ پوائنٹ اس وقت دے سکتا ہے جب رسائی کا مالک اجازت دے، کیونکہ متحرک فارورڈنگ ایک SSH سیشن کو مقامی پراکسی بنا دیتی ہے۔ پھر دو چھلانگیں الگ رکھنی ہوتی ہیں: وہ ٹنل جو SSH ہوسٹ تک پہنچتی ہے، اور وہ کنکشن جو یہ ہوسٹ آگے کھولتا ہے۔ انہیں الگ کرنا دونوں باتیں واضح کرتا ہے کہ یہ انتظام کیوں کام کرتا ہے اور یہ کبھی کیا نہیں کرے گا۔

SSH سننے والا کیا بنتا ہے اور کیا نہیں

متحرک فارورڈنگ SSH کلائنٹ کو مقامی طور پر سننے اور جو بھی جڑتا ہے اس سے SOCKS4 یا SOCKS5 بولنے پر مجبور کرتی ہے۔ ہر درخواست ایک منزل کا نام لیتی ہے اور SSH سرور اگلا کنکشن کھولتا ہے، اسی لیے منزل کی تلاش دوسری طرف ہو سکتی ہے۔ یہ ایپلیکیشن سطح کی TCP فارورڈنگ ہے، پورے ڈیوائس کے لیے VPN نہیں۔ یہ کوئی UDP انجمن، کوئی ICMP، اور پراکسی سیٹنگز کو مکمل نظرانداز کرنے والی ایپس کے لیے کچھ نہیں لے جاتی۔ SSH سرور سے ایپ تک چھلانگ بھی آپ کی ٹنل کے اندر نہیں ہے، جو اس وقت اہم ہے جب منزل صرف جانے پہچانے نیٹ ورکس سے ٹریفک قبول کرتی ہے۔

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

اسے واضح پورٹ کے ساتھ لوپ بیک پر شروع کریں

غیر استعمال شدہ مقامی پورٹ چنیں اور پتہ چھوڑنے کے بجائے اسے واضح طور پر لوپ بیک سے باندھیں۔ نیچے دیے گئے تین آپشن ہر ایک ایک وجہ سے موجود ہیں۔

ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
  [email protected]

-N دور کے کمانڈ کو چھوڑ دیتا ہے اور -T سیوڈو ٹرمینل چھوڑ دیتا ہے، اس لیے سیشن صرف فارورڈ کرنے کے لیے ہے۔ ExitOnForwardFailure سننے والا نہ بن سکنے پر کلائنٹ کو باہر نکلنے دیتا ہے، آپ کی مانگی ہوئی فارورڈنگ کے بغیر چلنے کے بجائے۔ ControlPath=none سیشن کو کسی موجودہ ملٹی پلیکس کنکشن سے باہر رکھتا ہے جو اپنی فارورڈنگز شامل کر سکتا ہے۔ لوپ بیک سننے والے کو LAN سے باہر رکھتا ہے، لیکن مشترکہ مشین پر یہ اجازت کی حد نہیں ہے، کیونکہ دیگر مقامی عمل بھی اس تک پہنچ سکتے ہیں۔ OpenSSH کلائنٹ کا حوالہ ان تمام جھنڈیوں کو دستاویز کرتا ہے، اور لوپ بیک کی وارننگ اس بات سے نکلتی ہے کہ سننے والا ساکٹ کیا ہوتا ہے۔

نام پراکسی کے اندر سے بھیجیں، اس کے ارد گرد سے نہیں

SOCKS5 کلائنٹ منزل خود حل کر سکتا ہے یا پراکسی سے ایسا کرنے کو کہہ سکتا ہے، اور یہی انتخاب طے کرتا ہے کہ کون سا حل کنندہ جواب دے گا۔ socks5h کے ساتھ curl ہوسٹ نام پراکسی کے اندر سے بھیجتا ہے، اس لیے تلاش SSH سرور پر ہوتی ہے۔ سادہ socks5 کے ساتھ لیپ ٹاپ پہلے حل کرتا ہے اور صرف کنکشن جاتا ہے، جو نام اندرونی ہونے پر مقصد کو خاموشی سے بے کار کر دیتا ہے۔ نیچے کی درخواست بغیر پراکسی فہرست بھی صاف کرتی ہے، اس لیے ورثے میں ملی NO_PROXY قدر اسے پراکسی کے ارد گرد نہیں لے جا سکتی۔

curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health

سرٹیفکیٹ کی تصدیق اور ایپ کا اپنا لاگ ان اب بھی لاگو ہیں، کیونکہ پراکسی دونوں میں سے کسی کو تبدیل نہیں کرتی۔ دو تلاشیں باقی رہتی ہیں: لیپ ٹاپ کو اجازت یافتہ VPN اور DNS راستے سے SSH ہوسٹ تک پہنچنا ہے، اور SSH سرور کو ایپ کا نام خود حل کرنا ہے۔ دوسری کو کسی بھی ٹریفک کے پراکسی سے گزرنے سے پہلے الگ سے جانچا جا سکتا ہے۔

ssh [email protected] getent hosts app.corp.example

ایک اجازت یافتہ منزل ثابت کریں، پھر سیشن بند کریں

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

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

ss -ltn | grep 1080

وہ ناکامیاں جنہیں یہ انتظام ٹھیک نہیں کر سکتا

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

What you seeWhat it usually meansWhere to look
The app connects and nothing followsIt ignores proxy settings entirelyIts own network settings, not the SSH session
A name resolution error for the destinationThe SSH server cannot resolve itServer resolver and search domains
A UDP-only application failsDynamic forwarding carries TCP onlyThis arrangement cannot serve it
curl works, the browser does notThe browser is not using the socks5h endpointBrowser proxy configuration
The listener answers after the session endedAnother process owns port 1080The ss output, then the owning process

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

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