من پلتفرم تونل‌سازی خودم را ساختم

سه روز را صرف صیقل دادن یک اپلیکیشن وب روی لپ‌تاپم کردم. عالی به نظر می‌رسید. اما وقتی سعی کردم آن را روی گوشی‌ام تست کنم، همه چیز از کار افتاد.

توسعه محلی (Local development) زمانی که به دستگاه دوم نیاز دارید، دشوار و پیچیده می‌شود. اشتراک‌گذاری یک IP محلی به دلیل وجود فایروال‌ها و مشکلات گواهی HTTPS با شکست مواجه می‌شود.

Ngrok را امتحان کردم. کار می‌کند، اما نسخه رایگان آن اتصالات را قطع می‌کند. همچنین URLها ظاهر بسیار بدی دارند. رشته‌های تصادفی مانند a1b2-34-56.ngrok-free.app برای اشتراک‌گذاری با مشتریان یا تیم‌ها مناسب نیستند.

من به دنبال تونلی با URLهای تمیز و خوانا بودم. بنابراین، خودم یکی ساختم.

من یک تونل سفارشی را با یک کوتاه‌کننده URL ترکیب کردم. برای ایجاد اسلاگ‌های (slugs) هوشمند، از هوش مصنوعی استفاده کردم و لایه‌های حفاظتی امنیتی را نیز در آن گنجاندم.

پشته تکنولوژی (Tech stack): • تونل / پروکسی: Django Channels, Daphne, WebSockets, Python & Node.js CLI • فرانت‌اند: Next.js, TailwindCSS, Shadcn/UI • بک‌اند: Django 5, Graphene GraphQL • پایگاه داده: PostgreSQL (Neon) • احراز هویت: JWT, bcrypt • هوش مصنوعی: Google Gemini • امنیت: MaxMind GeoLite2, Google Safe Browsing API

نحوه عملکرد:

  • تونل‌سازی دوطرفه WebSocket. یک عامل (agent) CLI محلی به یک سرور Django متصل می‌شود تا درخواست‌های HTTP را هدایت (forward) کند.
  • محافظت در برابر Race-condition. من از عبارات F() در Django برای به‌روزرسانی‌های اتمیک (atomic) استفاده می‌کنم تا دقت تحلیل‌ها (analytics) حفظ شود.
  • تله‌متری غیرمسدودکننده (Non-blocking telemetry). جستجو برای مکان و سیستم‌عامل در ترد‌های پس‌زمینه اجرا می‌شوند تا تأخیر (latency) کم بماند.
  • اسلاگ‌های هوش مصنوعی. Gemini آدرس URL مقصد را می‌خواند تا به جای متن تصادفی، یک اسلاگ معنادار ایجاد کند.
  • امنیت پیشگیرانه. من محدوده‌های IP خصوصی را مسدود می‌کنم و قبل از ذخیره هر لینک، بررسی‌های Google Safe Browsing را انجام می‌دهم.

منطق بک‌اند و تونل‌سازی پایدار است. فرانت‌اند هنوز در حال توسعه است.

من در حال حاضر مشغول مطالعه برای امتحانات در IITM هستم. برای تمرکز بر درس‌هایم، توسعه ویژگی‌های جدید را متوقف کرده‌ام. به جای اینکه کدها را رها کنم، آن‌ها را برای بازبینی (review) منتشر می‌کنم.

من به بازخورد شما در مورد چند مورد نیاز دارم:

  • تأخیر (Latency): چگونه می‌توانم در مقیاس بالا، زمان تغییر مسیر (redirect) را زیر ۱۰ میلی‌ثانیه نگه دارم؟
  • امنیت: بهترین راه برای تقویت مقابله با SSRF چیست؟
  • مقیاس‌پذیری: برای تونل‌های طولانی‌مدت، باید از WebSockets استفاده کنم یا TCP؟
  • مشاهده‌پذیری (Observability): چه معیارهایی را باید برای بررسی سلامت تونل ردیابی کنم؟

اگر در زمینه پروکسی‌ورکرها (proxy workers) یا طراحی سیستم تجربه دارید، لطفاً نظرات خود را به اشتراک بگذارید.

بررسی کامل طراحی سیستم: [Link] مخزن کد: [Link]

شما چگونه تست کردن مجوزهای موبایل را در طول توسعه محلی مدیریت می‌کنید؟ آیا از تونل‌های شخص ثالث استفاده می‌کنید یا ابزارهای سفارشی؟

منبع: https://dev.to/zallu/my-ngrok-urls-got-so-ugly-i-built-my-own-tunneling-platform-instead-59d