Tôi đã tự xây dựng nền tảng tunneling cho riêng mình

Tôi đã dành ba ngày để trau chuốt một ứng dụng web trên laptop. Nó trông thật hoàn hảo. Thế rồi tôi thử kiểm tra nó trên điện thoại. Mọi thứ đổ bể hết.

Việc phát triển ở môi trường local trở nên rắc rối khi bạn cần dùng đến thiết bị thứ hai. Việc chia sẻ IP local thường thất bại do tường lửa và các vấn đề về chứng chỉ HTTPS.

Tôi đã thử dùng Ngrok. Nó hoạt động tốt, nhưng gói miễn phí hay bị ngắt kết nối. Các URL trông cũng rất tệ. Những chuỗi ký tự ngẫu nhiên như a1b2-34-56.ngrok-free.app rất khó chịu khi chia sẻ với khách hàng hoặc đội ngũ.

Tôi muốn một tunnel có URL sạch sẽ và dễ đọc. Vì vậy, tôi đã tự xây dựng một cái cho riêng mình.

Tôi đã kết hợp một tunnel tùy chỉnh với một trình rút gọn URL. Tôi cũng tích hợp AI để tạo các slug thông minh và xây dựng các lớp bảo vệ an ninh.

Tech stack: • Tunnel / Proxy: Django Channels, Daphne, WebSockets, Python & Node.js CLI • Frontend: Next.js, TailwindCSS, Shadcn/UI • Backend: Django 5, Graphene GraphQL • Database: PostgreSQL (Neon) • Auth: JWT, bcrypt • AI: Google Gemini • Security: MaxMind GeoLite2, Google Safe Browsing API

Cách thức hoạt động:

  • Tunneling WebSocket hai chiều. Một CLI agent ở local sẽ kết nối với server Django để chuyển tiếp các yêu cầu HTTP.
  • Bảo vệ chống race-condition. Tôi sử dụng các biểu thức F() của Django để thực hiện các cập nhật nguyên tử (atomic updates) nhằm đảm bảo tính chính xác của dữ liệu phân tích.
  • Telemetry không chặn (non-blocking). Việc tra cứu vị trí và hệ điều hành được chạy trong các luồng nền (background threads) để giữ độ trễ ở mức thấp.
  • AI slugs. Gemini đọc URL mục tiêu để tạo ra một slug có ý nghĩa thay vì các chuỗi văn bản ngẫu nhiên.
  • Bảo mật chủ động. Tôi chặn các dải IP riêng tư và thực hiện kiểm tra qua Google Safe Browsing trước khi lưu bất kỳ liên kết nào.

Phần backend và logic tunneling đã hoạt động ổn định. Phần frontend vẫn đang trong quá trình hoàn thiện.

Hiện tại tôi đang ôn thi tại IITM. Tôi đang tạm dừng phát triển các tính năng mới để tập trung vào việc học. Thay vì để mã nguồn nằm yên một chỗ, tôi quyết định mở nó để mọi người cùng xem xét (review).

Tôi cần ý kiến phản hồi của các bạn về một vài vấn đề:

  • Độ trễ (Latency): Làm thế nào để tôi có thể giữ thời gian chuyển hướng (redirect) dưới 10ms ở quy mô lớn?
  • Bảo mật (Security): Cách tốt nhất để tăng cường khả năng giảm thiểu SSRF là gì?
  • Khả năng mở rộng (Scalability): Tôi nên sử dụng WebSockets hay TCP cho các tunnel duy trì kết nối lâu dài?
  • Khả năng quan sát (Observability): Tôi nên theo dõi những chỉ số (metrics) nào để kiểm tra tình trạng hoạt động của tunnel?

Nếu bạn có kinh nghiệm về proxy workers hoặc thiết kế hệ thống (system design), hãy chia sẻ ý kiến của mình nhé.

Chi tiết thiết kế hệ thống: [Link] Mã nguồn: [Link]

Bạn xử lý việc kiểm tra quyền truy cập trên di động trong quá trình phát triển local như thế nào? Bạn sử dụng các tunnel của bên thứ ba hay các công cụ tự xây dựng?

Nguồn: https://dev.to/zallu/my-ngrok-urls-got-so-ugly-i-built-my-own-tunneling-platform-instead-59d