دونوں کمانڈز مقامی سروس کو Tailscale HTTPS نام کے ذریعے شائع کرتے ہیں، اور جس مشین پر یہ چلتے ہیں وہاں سے یہ تقریباً ایک جیسے دکھتے ہیں۔ فرق یہ ہے کہ بعد میں URL تک کون پہنچ سکتا ہے، اور یہی فرق طے کرتا ہے کہ آپ کی ایپلیکیشن کو ابھی کون سے کنٹرول درکار ہیں۔ Serve سامعین کو tailnet کے اندر رکھتا ہے، جبکہ Funnel انہیں کھلے انٹرنیٹ پر منتقل کرتا ہے۔ پہلے سامعین منتخب کریں، پھر وہ کمانڈ منتخب کریں جو ان سے میل کھاتی ہے۔

Serve آپ کے tailnet کے اندر ایک سوال کا جواب دیتا ہے

Serve کسی مقامی پورٹ کو پراکسی کرتا ہے یا آپ کے tailnet کے آلات کو مقامی مواد مہیا کرتا ہے، اور tailnet کے رسائی کے قواعد ہر درخواست پر لاگو رہتے ہیں۔ پورٹ 3000 پر ایک ڈیش بورڈ ایسے HTTPS نام پر قابل رسائی ہو جاتا ہے جسے صرف آپ کے آلات ہی حل کر سکتے ہیں اور جس سے جڑ سکتے ہیں۔ اندرونی اوزار کے لیے یہی درست طے شدہ ہے، کیونکہ سامعین پہلے ہی tailnet کی جانب سے تصدیق شدہ ہیں اور آپ کوئی عوامی سطح شامل نہیں کر رہے۔ URL ایک عام ویب سائٹ جیسا لگتا ہے، اور اسی لیے لوگ اسے ویسا ہی سمجھ لیتے ہیں۔

Serve اپنی بھیجی گئی درخواستوں کے ساتھ ایسے شناختی ہیڈر بھی منسلک کر سکتا ہے جو tailnet صارف کی وضاحت کرتے ہیں۔ اگر آپ کی ایپلیکیشن ان ہیڈرز پر تصدیق کے طور پر بھروسہ کرتی ہے، تو بیک اینڈ کو localhost سے باندھیں تاکہ کوئی اور سیدھا اس تک نہ پہنچ سکے؛ روٹ ہونے کے قابل پتے پر سننے والا بیک اینڈ ایسی درخواستیں وصول کر سکتا ہے جو کبھی پراکسی سے نہیں گزریں۔

Funnel سامعین کو کھلے انٹرنیٹ میں بدل دیتا ہے

Funnel منتخب سروس کو ہر اس شخص کے لیے شائع کرتا ہے جس کے پاس URL ہے، اور زائرین کو کلائنٹ، اکاؤنٹ یا آپ کے tailnet میں رکنیت کی ضرورت نہیں ہوتی۔ اس لیے وسائل کو وہی تصدیق، شرح کی حد اور پیچ درکار ہیں جو آپ کسی بھی عوامی سروس پر لگاتے ہیں۔ عوامی درخواستیں Serve کے tailnet شناختی ہیڈر نہیں اٹھاتیں، اس لیے جس ایپلیکیشن نے ان پر بھروسہ کیا تھا اس کے پاس Funnel کے تحت کوئی صارف شناخت ہی نہیں۔ مختلف اشاعتی کمانڈ منتخب کرنے سے تصدیق کا سوال آپ کی جگہ حل نہیں ہوتا۔

Funnel میں ایسی پابندیاں بھی ہیں جن کا پرانی ریلیز کا ٹیوٹوریل ذکر نہ کرے۔ یہ نام کے لیے Tailscale کا حاصل کردہ سرٹیفکیٹ استعمال کرتے ہوئے TLS ختم کرتا ہے، اور صرف مخصوص سننے والی پورٹس کی حمایت کرتا ہے، جیسا کہ Funnel کی دستاویزات بیان کرتی ہیں۔ اگر آپ کی سروس ان پورٹس میں سے کسی پر HTTPS کے علاوہ کوئی پروٹوکول توقع کرتی ہے، تو Funnel کنفیگریشن کی پہیلی نہیں بلکہ غلط اوزار ہے۔

موڈ پورٹ سے نہیں، کلائنٹ سے پڑھیں

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

tailscale serve status
tailscale funnel status
tailscale status --json | head -40

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

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

جن سامعین کا آپ نے واقعی ارادہ کیا ان کے ساتھ جانچیں

سروس شائع کرنے والی مشین سے نہیں، tailnet کے باہر سے جانچیں۔ tailnet آلے سے آنے والی درخواست ثابت کرتی ہے کہ پراکسی کام کرتی ہے، مگر یہ ثابت نہیں کرتی کہ کوئی اجنبی خارج ہے۔ ایسا نیٹ ورک استعمال کریں جس میں Tailscale کلائنٹ نہ ہو اور tailnet تک کوئی راستہ نہ ہو۔

curl -sI https://host.tailnet-name.ts.net
curl -sI https://host.tailnet-name.ts.net --resolve host.tailnet-name.ts.net:443:203.0.113.10

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

سروس شائع کرنا وہی فیصلہ نہیں جو ایگزٹ نوڈ منتخب کرنا ہے، جو کنٹرول کرتا ہے کہ آپ کی باہر جانے والی ٹریفک کہاں سے نکلتی ہے۔ Serve اور Funnel بتاتے ہیں کہ آپ جو چلاتے ہیں اس تک کون پہنچ سکتا ہے؛ ایگزٹ نوڈ بتاتا ہے کہ آپ کے اپنے کنکشن کہاں سے آتے دکھتے ہیں۔ دونوں سوال الگ رکھیں اور موازنہ سادہ رہتا ہے۔

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