OpenCode từ xa: OpenTunnel, Tailscale hay cloudflared — chọn cách nào?
OpenCode 2 gần đây có thêm opencode pair --remote — nối thiết bị từ xa qua OpenTunnel. Nghe thì
giống mấy cách mình đang dùng hằng ngày (Tailscale, cloudflared), nhưng thực ra khác hẳn về mục đích.
Mình đã chạy thử thật trên máy, đo từng bước, và kết luận gọn: ba cách này không thay thế nhau. Bài viết để bạn khỏi tốn buổi chiều thử sai — OpenTunnel là gì, đo được gì khi chạy thật, khác gì Tailscale/cloudflared, và có nên tự host tunnel không.
VPS cho coder & vibe coding
Deploy app, chạy agent dài hoặc giữ môi trường thử nghiệm tách khỏi máy chính
Link affiliate Tino Group: OpenCode Vietnam có thể nhận hoa hồng, giá bạn trả không đổi.
Tóm tắt nhanh
- OpenTunnel = link mời tạm — dùng 1 lần, sống 5 phút, để pair một thiết bị mới. Không phải "đường chạy hằng ngày".
- Tailscale — hợp nhất cho thiết bị của chính bạn/team: kín, không lộ internet, ổn định 24/7.
- cloudflared + reverse proxy — hợp khi muốn web UI cố định 1 domain, bookmark như app.
- Tự host OpenTunnel — chưa đáng, trừ khi cần tunnel 24/7 độc lập máy hoặc tự chủ hạ tầng.
OpenTunnel là gì?
Ngắn gọn: nó giống ngrok, nhưng do chính team làm OpenCode xây — dự án riêng
anomalyco/opentunnel, viết bằng Rust, license MIT. Mỗi máy
nhận một hostname dạng *.opentunnel.xyz. Thiết kế gọi là "blind TLS": máy bạn giữ private key và tự
terminate TLS, nên server trung gian không đọc được nội dung traffic.
Trong OpenCode, bạn dùng qua một lệnh:
opencode pair --remote
Lần đầu chạy, nó hỏi rõ trước khi mở:
▲ This will expose your OpenCode server to the internet.
│ Traffic is end-to-end encrypted, and access requires your server password.
Đồng ý xong (~1 phút để dựng tunnel + cert) là bạn có link + QR để nối thiết bị mới.
Chạy thử thật: 6 điều mình đo được
Bối cảnh: macOS, OpenCode v2.0.28, đo ngày 14/10/2026. Số liệu dưới đây là đo thật, không chép docs.
| Đo gì | Kết quả |
|---|---|
| Bật lần đầu | ~1 phút, không phải cấu hình gì |
| Link pair | Dùng 1 lần, hết hạn sau 5 phút, in kèm QR |
| Vào từ điện thoại | Mở link là vào — không phải gõ mật khẩu, vì cái link chính là chìa |
| Bảo vệ | Gọi API không auth → 401; mật khẩu server vẫn là lớp chặn chính |
| Link sau khi dùng/hết hạn | Cả 2 link cũ thử lại đều 401 — lộ link cũ vô hại |
| Tắt | opencode service set remote false → tunnel đóng ngay, không còn gì trên internet |
Một điểm dễ hiểu nhầm: tắt máy hoặc dừng service là tunnel đóng theo — server vẫn là máy của bạn. Muốn "vào được 24/7" thật thì server phải nằm ở nơi luôn bật.
Pair link và share link — đừng lẫn
Hai thứ tên na ná nhau nhưng ngược mục đích:
- Pair link (
opencode pair --remote): mời thiết bị vào server. Pair xong, thiết bị thấy toàn bộ session như đang ngồi trước máy. Link 1 lần + 5 phút là hạn của cái link mời, không phải hạn dùng. - Share link (
/share): chia sẻ một session cho người khác xem. Người nhận chỉ đọc, không điều khiển được gì; muốn gỡ thì/unshare.
So sánh 4 cách
| Cách | Ưu | Nhược |
|---|---|---|
| Tailscale | Kín hoàn toàn, không lộ internet; đã đóng gói chuẩn cho team (ACL + watchdog); free cá nhân | Người ngoài tailnet không vào được; phải cài app trên từng thiết bị; máy server phải bật |
| cloudflared + reverse proxy | Domain cố định, bookmark như app; máy khác chỉ cần link + mật khẩu | Tự dựng, tự bảo trì; web UI phơi ra internet thường trực; máy server phải bật |
| OpenTunnel (hosted) | 1 lệnh, không dựng gì; link 1 lần + 5 phút; máy được mời chỉ cần trình duyệt | Phụ thuộc hạ tầng bên thứ ba; chưa thấy bảng giá công khai; máy phải bật; trong 5 phút link còn hạn, ai mở trước thì vào |
| OpenTunnel tự host | Tự chủ 100%; MIT, sửa/fork thoải mái; dùng cho mọi app; chạy trên VPS thì tunnel luôn sẵn sàng | Phải tự nuôi: server + MySQL + domain + cert; chưa tài liệu hoá nối bản tự host vào pair --remote |
Muốn xem hướng dẫn Tailscale bản đóng gói cho team (serve tự chạy + watchdog + ACL), mình để ở repo diginno-net/opencode-remote-setup.
Vậy chọn gì?
- Dùng hằng ngày, thiết bị của mình/team → Tailscale. Kín nhất, ổn định nhất.
- Mời máy ngoài tailnet (khách, máy chưa cài gì) →
opencode pair --remote, dùng xong tắt. - Web UI cố định 1 domain → cloudflared — nhưng tự hiểu là đang phơi cửa thường trực, đặt mật khẩu tử tế.
- Cần 24/7 dù máy cá nhân tắt → lúc đó mới cần server ở nơi luôn bật, ví dụ một VPS riêng
— dựng cả
opencode servelẫn tunnel ở đó.
Kết luận
- OpenTunnel lấp đúng một chỗ trống: mời thiết bị nhanh, an toàn, tạm thời — 1 lệnh, link tự chết sau 5 phút, không để lại cửa mở.
- Nó không thay Tailscale/cloudflared — ba cách phục vụ ba mục đích khác nhau, dùng đúng tình huống thì thay vì "chọn cái nào" bạn sẽ "dùng cả ba".
- Tự host OpenTunnel: chưa đáng với nhu cầu thường — thêm một hệ thống để vận hành, trong khi lợi ích chính (tự chủ) chưa cấp thiết.
Nguồn tham khảo
- Repo OpenTunnel (MIT)
- Hướng dẫn OpenCode từ xa qua Tailscale — bản cho team
- Tài liệu OpenCode — Remote access
- OpenCode cập nhật 07/10–14/10: đường lên V2, plugin Figma, pair từ xa
- OpenCode v2 khác gì v1? Cách hiểu đúng trước khi nâng cấp
Số liệu đo trên macOS, OpenCode v2.0.28, ngày 14/10/2026. Giá và tính năng của bên thứ ba có thể thay đổi theo thời điểm.
Bạn đang cho OpenCode ra ngoài bằng cách nào? Vào nhóm OpenCode Vietnam kể mình nghe.