Node / React / Vite
Dev servers en cualquier puerto.
Material Design 3 · CLI v1.0.5
Proxy inverso seguro para desarrolladores. HTTP, HTTPS, JSON, imágenes y WebSocket — funciona detrás de NAT, VPN o red corporativa sin abrir puertos.
$ dtunnel --port 88080
https://a7f3c2.dtunnel.desarrollado.com ⟶ http://localhost:88080
Linux, macOS o WSL — un solo comando (incluye frpc):
curl -O https://install.desarrollado.com/dtunnel/install && sudo bash install
Windows sin WSL: npm install -g @desarrollado/dtunnel · npm
python -m http.server 88080
dtunnel --port 88080
Dev servers en cualquier puerto.
Contenedores con puerto mapeado a localhost.
REST, JSON, archivos estáticos.
WSS a través del túnel sin config extra.
Sin abrir puertos en tu router: tu app sigue en localhost y dtunnel crea un puente seguro
hacia Internet a través del VPS dtunnel.desarrollado.com.
dtunnel --port Nflowchart TB
subgraph INET["Internet"]
U["Visitante / Webhook"]
end
subgraph VPS["VPS — HestiaCP"]
NG["Nginx :443 TLS"]
WEB["Landing · Docs · Admin"]
API["API Node :3001"]
FRPS["frps broker\n:18080 HTTP · :7000 control"]
NG -->|"dtunnel.desarrollado.com"| WEB
NG -->|"/api/*"| API
NG -->|"*.dtunnel.desarrollado.com"| FRPS
end
subgraph DEV["Tu máquina"]
CLI["dtunnel CLI"]
FRPC["frpc cliente"]
APP["localhost:PUERTO\n(tu app)"]
CLI -->|"POST /api/tunnels"| API
CLI -->|"genera config"| FRPC
FRPC --> APP
end
U -->|"HTTPS"| NG
FRPC <-->|"túnel TCP :7000"| FRPS
sequenceDiagram autonumber participant Dev as Desarrollador participant CLI as dtunnel CLI participant API as API participant FRPC as frpc participant FRPS as frps participant NG as Nginx participant User as Visitante Dev->>CLI: dtunnel --port 88080 CLI->>API: POST /api/tunnels API-->>CLI: subdominio + token frp CLI->>FRPC: iniciar con frpc.toml FRPC->>FRPS: conectar :7000 User->>NG: GET https://mi-app.dtunnel.desarrollado.com NG->>FRPS: proxy HTTP FRPS->>FRPC: reenviar al túnel activo FRPC->>Dev: http://127.0.0.1:88080 Dev-->>User: respuesta HTTP/HTTPS
flowchart LR
subgraph Publico["Expuesto a Internet"]
P443["Nginx :443"]
P7000["frps :7000\ncontrol clientes"]
end
subgraph Interno["Solo localhost / red interna"]
P3001["API :3001"]
P18080["frps :18080\nvhost HTTP"]
end
P443 --> P3001
P443 --> P18080
P7000 --> FRPS["frps"]
FRPS --> P18080
style P443 fill:#2b4278,color:#dce1ff
style P7000 fill:#2b4278,color:#dce1ff
Más detalle en la documentación técnica y en architecture.md.
Los visitantes siempre acceden por HTTPS. El certificado TLS wildcard
(*.dtunnel.desarrollado.com) lo gestiona Hestia con Let's Encrypt.
Tu app local no abre puertos en el router: solo frpc inicia una conexión saliente autenticada.
flowchart LR
subgraph PUBLIC["Internet — cifrado TLS"]
U["Visitante / Webhook"]
U -->|"HTTPS :443\nTLS 1.2 / 1.3"| NG["Nginx\nterminación SSL"]
LE["Let's Encrypt\nwildcard *.dtunnel.*"]
LE -.->|"certificado"| NG
end
subgraph VPS_INT["VPS — red interna"]
NG -->|"HTTP localhost\n(no sale a Internet)"| FRPS["frps :18080"]
end
subgraph TUNNEL["Túnel frp — autenticado"]
FRPS <-->|"TCP :7000\ntoken frp"| FRPC["frpc"]
end
subgraph LOCAL["Tu PC — loopback"]
FRPC -->|"HTTP 127.0.0.1\nsolo local"| APP["tu aplicación"]
end
style PUBLIC fill:#1e3a5f,color:#dce1ff
style VPS_INT fill:#282a31,color:#e3e2e9
style TUNNEL fill:#2b4278,color:#dce1ff
style LOCAL fill:#1e4e4f,color:#bcebec
flowchart TB L1["① Borde HTTPS\nCertificado wildcard · TLS en Nginx"] L2["② Túnel frp\nToken compartido · solo frpc autorizado"] L3["③ API y cuentas\nJWT en login · reserva de subdominios"] L4["④ Localhost\nSin puertos abiertos en router/NAT"] L1 --> L2 --> L3 L2 --> L4 style L1 fill:#2b4278,color:#dce1ff style L2 fill:#424659,color:#dee0f9 style L3 fill:#1e4e4f,color:#bcebec style L4 fill:#33353c,color:#e3e2e9
Visitante → VPS (https://). Certificado válido en el navegador.
frpc → frps con token; sin token no hay túnel.
Tu app en 127.0.0.1 — no expuesta directamente a Internet.
Quien tenga la URL puede entrar. Protege rutas sensibles en tu app.
Guía completa: Seguridad y SSL en la documentación.
$0
Gratis
Consulta la documentación, abre un issue en GitHub o escríbenos a dtunnel@desarrollado.com.
Solución de problemasEmail: dtunnel@desarrollado.com