Nhớ lúc ngày trước hồi 2017 bắt đầu mò qua DevOps, khi tìm hiểu deploy, mà chưa có biết gì mấy về hạ tầng thì đưa cái localhost ra Internet thấy ngầu hẳn và nhu cầu cũng đã tồn tại từ nhiều năm rồi: như demo nhanh, test webhook, cho teammate truy cập thử,… Và các cái tên rất quen thuộc như ngrok hay Cloudflare Tunnel.
Vì có cu cháu hỏi đúng mục tiêu làm demo bài tập lớn trên trường và thấy gần đây Tunnelto là một option mã nguồn mở khá ngon, chạy bằng CLI, mục tiêu rất rõ ràng: tạo một public URL và forward về web server đang chạy trên máy bạn.

Vì sao là tunnelto?
Mình thích tunnelto ở điểm nhanh – gọn – lẹ đúng nhu cầu hàng ngày:
- Chạy phát dùng ngay: chỉ cần trỏ port local là có public URL để demo/test/webhook.
- CLI đơn giản: tập trung vào vài option hay sử dụng như subdomain, key, dashboard, host/scheme.
- Mã nguồn mở: cài xong chạy, không phụ thuộc npm/stack cụ thể.
So sánh với các tools khác
- ngrok: phổ biến, tiện, hệ sinh thái lớn. Nhưng nhiều người sẽ gặp rào cản plan/giới hạn hoặc muốn tự chủ hơn.
- Cloudflare Tunnel: cực mạnh, hợp cho hướng hạ tầng production, gắn domain, zero-trus nhưng setup thường bài bản hơn, không phải ai cũng cần.
- localtunnel: hợp nếu bạn đang ở hệ Node và muốn chạy nhanh kiểu npx.
- tunnelto: nghiêng về kiểu mình cần link public ngay để test/demo. Gọn, nhanh, ít rườm rà.
Cài đặt
macOS (Homebrew)
brew install agrinman/tap/tunnelto
Cargo
cargo install tunnelto
Ubuntu
curl -sL https://tunnelto.dev/install.sh | sh
Cách sử dụng cơ bản
Chọn host (mặc định là localhost)
Dùng khi dịch vụ của bạn bind vào địa chỉ khác.
tunnelto --host 127.0.0.1 --port 8000
Chọn scheme khi forward về local (http/https)
Dùng khi local của bạn chạy https hoặc bạn muốn chỉ định rõ.
tunnelto --port 8000 --scheme http
Tạo subdomain cho dễ nhớ Dùng khi bạn muốn link đẹp, dễ gửi cho người khác.
tunnelto --port 8000 --subdomain mydemo
Bật dashboard để xem request đi vào tunnel
Dùng khi bạn muốn kiểm tra request/flow ngay trên máy dev.
tunnelto --port 8000 --dashboard-address 127.0.0.1:4040
Dùng API key (nếu bạn có key)
Dùng khi service yêu cầu key để tạo tunnel.
tunnelto --port 8000 --key
Lưu key để lần sau khỏi gõ lại:
tunnelto set-auth --key
Bật verbose để debug
Dùng khi tunnel không lên hoặc cần log chi tiết hơn.
tunnelto --port 8000 --verbose
Một số use case thường dùng
Test webhook (GitHub/Stripe/Slack)
Bạn cần một URL public để dán vào webhook settings.
tunnelto --port 3000 --subdomain webhook-dev
Demo nhanh cho bạn bè
Bạn đang làm landing page hoặc REST API, muốn người khác xem ngay lập tức. Dùng subdomain để link nhìn phát hiểu ngay.
tunnelto --port 5173 --subdomain landing-preview
Gửi link dạng https://landing-preview... là xong.
Test OAuth redirect/callback
OAuth thường yêu cầu redirect URL là địa chỉ public.
tunnelto --port 3000 --subdomain oauth-callback
Rồi bạn lấy URL đó điền vào phần Redirect URI trong OAuth provider.
Mobile app gọi về backend local
Thay vì mở port router hoặc cùng Wi-Fi, bạn dùng tunnel:
tunnelto --port 8080 --subdomain mobile-api
Trên app mobile bạn set base URL thành public URL tunnel.
Dùng hosted tunnelto.dev (đăng nhập lấy API key)
Nếu bạn sợ share link ra ngoài mà ai cũng vào nghịch:
tunnelto set-auth --key
tunnelto --port 8000
set-auth là lệnh lưu key để lần sau khỏi nhập lại.
Kết
Tóm lại, tunnelto là tool nhanh – gọn – dễ dùng để mở localhost ra Internet nhanh chóng để demo/test/webhook. Chạy 1 lệnh là có link, cần xịn hơn thì có subdomain, dashboard, API key. Anh em nên trải nghiệm qua nhé.







