مدت طولانی، تیلاسکیل را فقط ابزار شبکه خصوصی میدانستم و نه بیشتر. اما این باعث شد دستوری را از دست بدهم که میتوانست بسیاری از برنامههای وب محلی را به نقطه پایانی HTTPS عمومی تبدیل کند، بدون ارسال پورت، DNS پویا، پراکسی معکوس، و حساب تیلاسکیل در طرف مقابل.
دستور Funnel نام دارد، و وقتی از آن استفاده کنید، روش قدیمی exposing سرویسها فوراً بیضرورت پیچیده به نظر میرسد.
لینکی را برای کسی فرستادم که هرگز تیلاسکیل را لمس نکرده بود — و بیدرنگ کار کرد
Funnel شبکهام را گسترش نداد؛ بلکه به یک برنامه راه خروجی داد

هفته گذشته، متوجه شدم که شاید هر اندازه که از تیلاسکیل استفاده کردهام، همه چیز را پیچیده میکردهام. لینکی به یک برنامه وب محلی که روی لپتاپم اجرا میشد به یک کلاینت فرستادم، و وقتی روی لینک در گوشیشان کلیک کردند، دقیقاً مانند هر وبسایتی بارگذاری شد. به دعوتنامه، دانلود برنامه، یا توضیح نیاز نداشتند. تا پیش از این، تیلاسکیل را «شبکه خصوصی که فقط دستگاههای من میتوانند ببینند» میدانستم. اما این لینک از این دایره بیرون رفت و کامل کار کرد.
نصب تیلاسکیل، سپس ارتباط دستگاهها — لپتاپ، NAS، و گوشی — over مش شبکهای خصوصی باعث میشود فرض کنید که کل محصول همین است. اما یادگیری Funnel چشمبازکن بود؛ تیلاسکیل دستوری دارد که عمداً فراتر از آن مش خصوصی میرود. Tailscale Serve برنامه را داخل tailnet نگه میدارد، و چیزی است که اغلب افراد ابتدا کشف میکنند. در حالی که برای اشتراکگذاری سرویسها در میان دستگاههایتان عالی است، فقط برای کسانی مفید است که از قبل به tailnet شما دسترسی دارند.
Funnel، از طرف دیگر، وقتی روی یک پورت اجرا میشود، به آن برنامه یک آدرس HTTPS عمومی واقعی میدهد. هیچ چیز در بقیه tailnet تغییر نمیکند؛ همانقدر که پیش از این نامرئی بودند. در اصل، بدون گسترش یا exposing بقیه tailnet، یک برنامه به آدرس HTTPS عمومی دست یافت.
کار واقعیای که Funnel من را از آن نجات داد، ارسال پورت نبود
بار کاری اشتراکگذاری بهطور چشمگیری سبکتر

Immich از نسخهپشتیبان عکسهایم رسیدگی میکند و روی یکی از دستگاههای قدیمیام اجرا میشود. پیش از Funnel، فرآیند پیچیدهای برای اجازه دادن به کسی بیرون از خانهام برای دیدن آن بود. شامل forwarding یک پورت روی روتر و رسیدگی به آدرس CGNAT ISPام بود، که نمیتوانم port-forward کنم. همچنین، چون آن آدرس تغییر میکند، باید DNS پویا را پیکربندی کنم، یک گواهی بگیرم، و یادم باشد آن را تمدید کنم. اینها همه کارهای کوچکی هستند، اما چند مرحلهای هستند که باید نگه دارید.
با Funnel، این مراحل همچنان انجام میشوند، اما در جایی رخ میدهند که لازم نیست نگاه کنم. من port forwarding سنتی انجام نمیدهم؛ تیلاسکیل اتصال HTTPS را قبل از forwarding ترافیک به سرویس محلیام terminate میکند.
| پیش از Funnel | بعد از Funnel |
|---|---|
| ارسال یک پورت روتر | اجرای یک دستور |
| راهاندازی DNS پویا | نیاز نیست |
| دریافت و تمدید گواهی | خودکار انجام میشود |
| پیکربندی یک پراکسی معکوس | معمولاً کامل حذف میشود |
| نگران IP عمومیتان باشید | هرگز نمیبینیدش |
با از میان برداشتن اصطکاک، میتوانستم با چیزهایی که قبلاً امتحان نکرده بودم کار کنم: webhook routing به لپتاپم همراه با نوشتن کدی که آن را مدیریت میکند، و دسترسی از راه دور به داشبورد Home Assistant بدون یک کلاینت VPN. اینها آنگونه پروژههای کوچکی بودند که قبلاً به localhost محدود میماندند، چون هزینه راهاندازی از ارزش کار بیشتر بود.
دستور پنج ثانیه طول کشید؛ مسئولیت ناپدید نشد
وقتی تیلاسکیل از در نگهداری دست میکشد، برنامهتان باید این کار را بکند





بخشی از این پیکربندی جدید وجود داشت که طول کشید به آن عادت کنم. درون tailnet، Tailscale قوانین دسترسی خود را دارد که تصمیم میگیرد چه کسی وارد شود. هنگامی که funnel میشود، این دیگر برای هر کسی که به آن URL عمومی دسترسی پیدا میکند اعمال نمیشود. از آنجا که بازدیدکنندگان عمومی به عنوان اعضای tailnet شما احراز هویت نمیشوند، برنامه شما — نه Tailscale — مسئول احراز هویت کاربر میشود. این یعنی احراز هویت به عهده برنامه میافتد.
ابزار داخلی کوچک من که فاکتورهای فریلنس را پیگیری میکند هرگز funnel نمیشود زیرا احراز هویت ندارد؛ این صفحه به هر کسی که روی شبکهام است اعتماد میکند. اگر آن را در وضعیت فعلی funnel کنم، هر کسی که URL را کشف کند دسترسی خواهد داشت. قانون من ساده است: فقط چیزهایی که پشت آنها ورود واقعی وجود دارد funnel میشوند.
همچنین مهم است توجه داشته باشید که Funnel تا زمانی که آن را خاموش نکنید روشن میماند؛ این یک لینک یکبارمصرف نیست. من عادت کردهام فرمان tailscale funnel status را اجرا کنم زیرا فراموش کردن اینکه یک پورت حتی هنگام استفاده نشدن هم باز میماند آسان است.
فاصله بین localhost و حدس «فکر کنم این را مستقر میکنم»
واقعیت تنظیمات من این است که چند پروژه کماهمیت میسازم، از جمله پروژههایی — نرمافزار، ابزار یا سایت — که نیاز به VPS ندارند؛ من کاربر واقعی انتظار ندارم. آنها به ضمانت آپتایم نیاز ندارند و اغلب راهاندازی میزبانی برای اینها بیشتر از ساختنشان طول میکشد. با این حال، رها کردن آنها روی localhost نامناسب است زیرا بالاخره کسی بیرون از شبکه خانگیام باید آنها را ببیند.
Funnel این فاصله را پر میکند. این تفاوت بین نشان دادن نسخه امروز به مشتری و توضیح بیپایان آن در دیسکورد یا اسلک است. میتوانم هنگام سفر یک داشبورد به اشتراک بگذارم و حدسزنی را با تست کردن یک وبهوک در برابر ترافیک واقعی جایگزین کنم. این کارهای ساده به زیرساخت جداگانهای نیاز ندارند.
من محصولات واقعی را پشت Funnel قرار نمیدهم، اما دیگر پورتهای روتر را برای پروژههای موقت باز نخواهم کرد.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Afam Onyimadu است. مشاهده مقاله اصلی