El Proxy de Base de Datos Remoto (TCP/TLS): Conectando de Forma Segura Trabajadores en la Nube con localhost

Quick answer
Proxy de Base de Datos Remoto Seguro: Exponer PostgreSQL y Redis Locales: quick comparison answer
Choose the tunnel tool based on the network model: public HTTPS URLs for webhooks and demos, private mesh access for internal apps, and managed infrastructure when policy controls matter most.
Which tunnel tool is best for public webhook testing?
Use a public HTTPS localhost tunnel with stable URLs. InstaTunnel focuses on webhook testing, demos, OAuth callbacks, and MCP endpoint workflows.
When should I choose a private network tool instead?
Choose a private mesh or Zero Trust tool when every user and service should stay inside a controlled private network.
El desarrollo en la nube moderno ha fracturado fundamentalmente dónde se ejecuta nuestro código versus dónde reside nuestra data durante el ciclo de ingeniería. Construimos funciones sin servidor, desplegamos workers en el borde en Vercel o Cloudflare, y provisionamos Lambdas en AWS que escalan infinitamente. Sin embargo, los datos fundamentales que impulsan estos despliegues — tu base de datos relacional recién creada y cuidadosamente mockeada o tu almacén de memoria cache rápida — a menudo se encuentran justo en tu máquina local.
El manual estándar del desarrollador suele dictar escribir una API HTTP mock para sitiarse frente a la base de datos local, permitiendo que el worker remoto recupere datos. Pero a veces no quieres una API. Cuando estás probando migraciones complejas de Prisma, depurando sentencias SQL JOIN profundamente anidadas, o evaluando el rendimiento bruto de un worker en la nube conectado a una cache, una abstracción API es un obstáculo activo. Necesitas que tu infraestructura en la nube hable directamente con tu base de datos local.
Necesitas una forma de exponer tu PostgreSQL local al tráfico de internet de forma segura, temporal y confiable. Necesitas una solución de túnel TCP localhost a base de datos que pase por alto las capas de traducción de red sin comprometer la integridad de tu máquina local.
En la Parte 8 de nuestro análisis profundo sobre redes avanzadas para desarrolladores, exploramos la mecánica del tunneling de Capa 4. Revisaremos exactamente cómo puente entre los workers en la nube y los almacenes de datos locales usando LocalXpose, cubriendo acceso remoto seguro a Redis y conectividad a PostgreSQL mediante un túnel TCP en crudo y un túnel TLS de LocalXpose — y dónde el tipo de túnel que eliges cambia lo que necesitas configurar en la base de datos.
El Dilema de la Red: Por qué los Túneles de Capa 7 Fallan con Bases de Datos
Si alguna vez intentaste usar un túnel de prueba de webhook estándar para exponer una base de datos, probablemente viste que tu terminal vomitaba errores de conexión de inmediato. Entender por qué requiere una breve inmersión en el modelo OSI de redes.
La mayoría de las herramientas de tunneling para desarrolladores operan estrictamente en la Capa 7 (la capa de Aplicación). Están diseñadas para tráfico HTTP y HTTPS. Cuando una solicitud llega al servidor público del túnel, el motor proxy espera una línea de solicitud HTTP (ej., GET /api/users HTTP/1.1) y encabezados estándar.
Las bases de datos no hablan HTTP.
PostgreSQL se comunica usando el protocolo de conexión de Postgres, un protocolo binario personalizado. Redis usa RESP, el Protocolo de Serialización Redis. Ambos son fundamentalmente tráfico de la Capa 4 (Transporte). Encapsular ese flujo binario en un túnel HTTP y el proxy intenta analizarlo como texto HTTP, no encuentra encabezados válidos y termina abruptamente la conexión.
Para evitar esto, los desarrolladores tradicionalmente recurrían a dos opciones, ambas peores que el problema:
- Reenvío de puertos — acceder al panel de administración del router residencial para exponer el puerto 5432 a internet. Riesgo de seguridad severo, y a menudo bloqueado por los ISP que usan NAT de grado operador (CGNAT).
- Puertas VPN — configurar WireGuard u OpenVPN para que el worker en la nube y la máquina local compartan una subred virtual. Funciona, pero requiere horas de configuración para una sesión de prueba de cinco minutos.
La respuesta moderna es un proxy dedicado de túnel TCP localhost a base de datos: pasa por alto el análisis HTTP y simplemente reenvía flujos de bytes TCP en crudo desde internet público a tu puerto localhost.
La Cadena de Herramientas: ¿Por qué LocalXpose?
El mercado está inundado de proxies de webhook solo HTTP, pero un servicio confiable de túneles TCP y UDP es una búsqueda más estrecha. LocalXpose es un proxy inverso diseñado específicamente para esto: soporta nativamente túneles HTTP, HTTPS, TCP, TLS y UDP, que es exactamente el rango de protocolos que necesita este flujo de trabajo.
| Característica | Túnel HTTP (Capa 7) | Túnel TCP (Capa 4) | Túnel TLS (Capa 4 + Seguridad) |
|---|---|---|---|
| Análisis | Inspecciona encabezados y carga útil | Sin inspección; flujo de bytes en crudo | Flujo encriptado, sin inspección |
| Caso de uso objetivo | Webhooks, vistas previas en Next.js | PostgreSQL, MySQL, SSH | Redis con TLS, sincronización de datos en producción, cualquier protocolo que ya soporte TLS |
| Terminación TLS | Los servidores de borde de LocalXpose descifran por ti, y luego entregan HTTP simple a tu app | No aplicable — el tráfico no está encriptado de extremo a extremo a menos que la app lo encripte | Nunca en el borde de LocalXpose. Tu app lo termina, o proporcionas un certificado/clave a cliente de LocalXpose y lo termina localmente |
| Soporte de LocalXpose | loclx tunnel http |
loclx tunnel tcp |
loclx tunnel tls |
Esa fila de terminación TLS vale la pena pausarla, porque es la parte que la mayoría de las guías — incluyendo un borrador anterior de esta — interpretan al revés, y cambia lo que el Workflow 2 abajo realmente requiere.
Workflow 1: Exponer PostgreSQL Local a Internet
Tienes una app Next.js en un despliegue de vista previa en Vercel, usando Prisma, y necesitas que hable con PostgreSQL corriendo en Docker en tu portátil.
1. Instala y autentica LocalXpose.
LocalXpose se distribuye como un binario multiplataforma y como un envoltorio npm.
npm install -g loclx
loclx account login
(Existen versiones para Homebrew, Snap y Chocolatey también, si prefieres no usar npm.)
2. Verifica que PostgreSQL local esté en ejecución.
psql -h localhost -p 5432 -U postgres -d my_local_db
3. Inicia el túnel TCP.
loclx tunnel tcp --to localhost:5432
Esto imprime un endpoint público generado dinámicamente, por ejemplo us.loclx.io:49152. Ahora es un conducto directo a tu puerto local 5432 — con una advertencia: es aleatorio y cambia cada vez que reinicias el túnel. Si lo integras en una variable de entorno en Vercel en lugar de pegarlo en un script puntual, eso es un problema, porque Vercel no sabrá que el puerto cambió. Reserva uno estable en su lugar:
loclx endpoint reserve
loclx tunnel tcp --reserved-endpoint us.loclx.io:4455
4. Apunta el worker remoto a él.
# Formato: postgresql://[usuario]:[contraseña]@[host-túnel]:[puerto-túnel]/[nombre_bd]
DATABASE_URL="postgresql://postgres:mysecretpassword@us.loclx.io:4455/my_local_db"
5. Ejecuta migraciones o consultas normalmente.
Tu función en la nube se conecta a us.loclx.io:4455, que LocalXpose reenvía directamente a tu contenedor Docker.
Dado que los túneles TCP no inspeccionan la carga útil, la negociación SSL propia de Postgres (sslmode=require, verify-full, certificados de cliente, lo que hayas configurado en el servidor) viaja completamente intacta. No necesitas el tipo de túnel TLS de LocalXpose para Postgres a menos que específicamente quieras TLS a nivel de túnel — el protocolo de conexión maneja su propia encriptación si lo has configurado.
Workflow 2: Acceso Seguro a Redis con un Túnel TLS de LocalXpose
Redis presenta un problema diferente al de Postgres. Fue diseñado para correr dentro de redes privadas confiables, y muchas instalaciones locales — incluyendo la mayoría de versiones por defecto en Homebrew y apt — no tienen TLS compilado en absoluto. Si expones una instancia de Redis en texto plano en internet, los contenidos de tu cache, tokens de sesión y estado de la app son legibles por cualquiera en el camino.
Aquí es donde importa un túnel TLS — pero aquí está la corrección: un comando loclx tunnel tls no añade encriptación que no estuviera ya allí. El tipo de túnel TLS de LocalXpose mantiene el flujo de bytes encriptado en el salto público entre sus servidores de borde y tu máquina, pero sus servidores de borde nunca descifran ese flujo como lo hacen con los túneles HTTP. La terminación sucede en tu lado, de dos formas:
- Tu servicio local ya soporta TLS. Apunta
loclx tunnel tlsa él y los bytes encriptados pasan directamente, sin tocar, hasta tu app. - Tu servicio local no soporta TLS (FTP en texto plano es un ejemplo de LocalXpose). Entonces proporcionas al cliente de LocalXpose un certificado y clave con
--crt/--key, y el cliente lo descifra localmente antes de reenviar texto plano a tu app.
Redis solo entra en el primer caso si realmente has activado su soporte TLS. Redis tiene TLS nativo desde la versión 6.0, pero es una función opcional habilitada con tls-port en redis.conf — y en muchas plataformas debe compilarse explícitamente (make BUILD_TLS=yes; redis-server --version debe reportar tls=yes). Un requirepass simple, con Redis aún escuchando en texto plano en 6379, solo da autenticación, no encriptación — apuntar un túnel TLS a ese puerto falla completamente o, si usas --crt/--key para que el cliente termine localmente, simplemente vuelve a añadir RESP en texto plano para el último salto hacia Redis, lo cual está bien, pero es importante entender qué está pasando.
1. Activa TLS en Redis local.
# redis.conf
tls-port 6379
port 0
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-ca-cert-file /path/to/ca.crt
requirepass MyUltraSecurePassword
Redis moderno también soporta usuarios ACL (ACL SETUSER) como una alternativa más granular a la requirepass global — recomendable si más de un servicio se conectará a través del túnel.
2. Confirma que escucha.
redis-cli --tls --cert redis.crt --key redis.key --cacert ca.crt -h localhost -p 6379 ping
3. Inicia el túnel TLS.
loclx tunnel tls --to localhost:6379
Esto te da un endpoint seguro, por ejemplo eu.loclx.io:51020 — de nuevo, reserva un dominio si esto necesita sobrevivir reinicios.
4. Configura el cliente remoto con rediss://.
# El prefijo 'rediss://' fuerza una conexión TLS
REDIS_URL="rediss://default:MyUltraSecurePassword@eu.loclx.io:51020"
Dado que el túnel en sí es passthrough, el apretón de manos TLS que realiza tu cliente Redis en Lambda se negocia directamente con tu servidor Redis local — LocalXpose solo transporta los bytes encriptados, no participa en la encriptación.
Asegurándolo: Lista blanca de IP
Ambos flujos anteriores son accesibles desde cualquier parte de internet por defecto, lo cual es el objetivo pero también un riesgo. LocalXpose soporta lista blanca de IPs como plugin en el archivo de configuración, y aplica a túneles TCP y TLS igual que a HTTP:
# config.yaml
db-tunnel:
type: tcp
region: us
to: localhost:5432
plugins:
ip_whitelist:
- 203.0.113.0/24 # por ejemplo, rango de salida de tu NAT gateway en la nube
loclx tunnel config -f /path/to/config.yaml
Si tu Lambda o función en Vercel tiene una IP de salida estática (como un NAT Gateway en AWS), restringir el túnel a ese CIDR cierra casi por completo el riesgo de “cualquiera que adivine el puerto”.
Una nota práctica adicional que el borrador anterior omitió: los túneles TCP y TLS no están disponibles en el nivel gratuito de LocalXpose. El plan gratuito/Starter solo soporta HTTP(S); los túneles TCP, TLS y UDP — junto con endpoints reservados y dominios personalizados — requieren el plan Pro de pago (actualmente $8/mes facturado anualmente, $96/año, con 10 túneles simultáneos en todos los protocolos y ancho de banda ilimitado). Es importante saberlo antes de construir un flujo de trabajo que dependa de un comando que silenciosamente no funcionará en una cuenta gratuita.
El Principio de Mínimos Privilegios: Requisitos de Seguridad
Abrir un agujero en tu firewall directamente a tu base de datos local es una capacidad poderosa — y una arma de doble filo. Evitar la protección NAT de tu router significa que la seguridad no puede ser una reflexión posterior:
- Nunca expongas almacenes de datos sin autenticación. Contraseñas fuertes (o usuarios ACL en Redis) en PostgreSQL, MySQL o Redis antes de levantar el túnel, siempre. Elimina configuraciones por defecto como
postgres:postgresoadmin:admin. - Trata el túnel como efímero. Son para pruebas de integración temporales. Finaliza el daemon de LocalXpose en cuanto termine la sesión — no lo dejes corriendo.
- Oculta tus datos. Las bases de datos locales expuestas así deben contener solo datos sintéticos o muy anonimizados. Nunca restaura un dump de producción con datos reales PII en un portátil y luego lo exponen; un túnel comprometido convierte tu máquina local en fuente de una brecha.
- Usa lista blanca de IPs donde la infraestructura que llama tenga un rango de salida estable y conocido — ver arriba.
Sobrevivir a la Ecuación de Latencia: Pooling de Conexiones
Hay una realidad de ingeniería final que vale nombrar: física. Una Lambda en us-east-1 consultando una instancia RDS en la misma región ve una latencia menor a milisegundos. Esa misma Lambda consultando tu portátil a través de un túnel TCP tiene que ir desde el centro de datos de AWS, a la frontera de LocalXpose, cruzar internet público, pasar por tu ISP, a tu Wi-Fi, en Docker, y volver. Una sola consulta puede tardar 100ms; un ORM resolviendo una cadena de relaciones con docenas de viajes en serie (el problema N+1) puede convertir 50ms de latencia en producción en varios segundos a través del túnel.
Lo único que vale corregir aquí: el timeout por defecto de Lambda es 3 segundos, no 10 — y es configurable hasta un límite rígido de 900 segundos (15 minutos). Pero ese límite solo aplica a la función Lambda en sí. Si se invoca a través de API Gateway (REST o API HTTP), el gateway impone su propio límite rígido de 29 segundos sin importar lo que hayas configurado en la función — aumentar tu vercel.json o serverless.yml a 60 segundos no ayudará si API Gateway es quien realmente corta la conexión. Las URLs de funciones y las invocaciones directas/asíncronas (EventBridge, SQS) no están sujetas a ese límite de 29 segundos y pueden usar los 900 segundos completos si lo necesitas.
Para mitigar el costo de ida y vuelta en las pruebas:
- Aumenta el timeout en la capa correcta — la configuración propia de Lambda, y por separado el timeout de integración en API Gateway si hay uno.
- Pool de conexiones localmente. Las funciones serverless abren y cierran conexiones constantemente, lo cual es costoso en un túnel de alta latencia. Ejecuta PgBouncer delante de PostgreSQL y apunta el túnel a PgBouncer en lugar de la base de datos cruda.
- Agrupa tus consultas. Prefiere cláusulas
INen bloque en lugar de bucles iterativos para reducir el número de viajes.
Automatización: Docker, Cliente Node.js y CI/CD
Más allá de la CLI interactiva, LocalXpose ofrece algunos componentes destinados específicamente a no tener que escribir loclx tunnel ... a mano cada vez:
- Un cliente oficial para Node.js (
node-localxposeen GitHub, publicado comolocalxposeen npm) con una API basada en promesas —client.tcp({ to: '127.0.0.1:5432', reservedEndpoint: '...' })oclient.tls({ crt: '/path/to/cert.pem', key: '/path/to/key.pem' })— para integrar el ciclo de vida del túnel directamente en un runner de pruebas o script de semillas en lugar de usar shell. - Una imagen oficial de Docker (
localxpose/localxpose), útil para correr el túnel como un sidecar; si generas certificados Let’s Encrypt para un túnel TLS de esta forma, monta un volumen en/home/nonroot/.localxposeo alcanzarás el límite de 5 certificados por dominio por semana de Let’s Encrypt en cada reinicio. - Una acción de GitHub (
LocalXpose/localxpose-action@v1) para levantar un túnel dentro de un flujo de trabajo — útil para pruebas de integración que necesitan una instancia real de Postgres accesible desde un runner hospedado sin montar infraestructura.
Nada de esto cambia la mecánica subyacente de TCP/TLS; solo traslada los mismos comandos a lugares donde preferirías no ejecutarlos manualmente.
El Atajo de Integración Definitivo
El proxy de base de datos remoto es un testimonio de lo flexible que se ha vuelto el desarrollo backend moderno. Aprovechando herramientas capaces de enrutar en Capa 4, podemos colapsar temporalmente la distancia física entre infraestructura en la nube sin servidor y entornos de desarrollo local.
Ya sea que estés depurando un microservicio inestable, probando transformaciones de datos en webhook, o simplemente negándote a escribir una API mock para una prueba de cache puntual, el patrón de base de datos localhost a través de túnel TCP vale la pena en tu caja de herramientas — siempre que tengas claro qué tipo de túnel hace qué, cuál requiere un plan de pago, y cuál realmente necesita que tu base de datos soporte TLS antes de que el túnel pueda hacer algo útil con ella.
Registro de Cambios
Verificado con la documentación oficial de LocalXpose, repositorios en GitHub, listados en npm, la documentación oficial de Redis y AWS Lambda (verificado hasta septiembre 9, 2026).
- Corrección mayor (mecánica del túnel TLS): el borrador implicaba que LocalXpose “puede terminar una conexión TLS en el borde o pasarla directamente,” sugiriendo descifrado en el borde para túneles TLS como en HTTP. La documentación de LocalXpose es explícita en que los túneles TLS nunca terminan en el borde — la transmisión pasa directamente a una app que ya soporte TLS, o proporcionas
--crt/--keyy el cliente en tu máquina lo termina. Reescribí el Workflow 2 y la tabla comparativa en torno a esto. - Requisito de TLS en Redis que el borrador omitió: el flujo original solo pedía un
requirepassfuerte antes de correrloclx tunnel tls --to localhost:6379, lo cual no funciona a menos que el soporte TLS de Redis esté activado (tls-port, y en muchas compilacionesmake BUILD_TLS=yes) — Redis tiene esto desde la versión 6.0, pero es opcional y no por defecto. Añadí el bloque TLS enredis.confy una verificación conredis-clicon certificado como pasos previos reales; también mencioné usuarios ACL como alternativa moderna a unrequirepassglobal. - Correcciones en los hechos de timeout de AWS Lambda: el “típicamente 10 segundos” no es una cifra de AWS — el valor por defecto real es 3 segundos, configurable hasta un límite rígido de 900 segundos (15 minutos). Añadí que las funciones invocadas por API Gateway tienen un límite rígido de 29 segundos impuesto por el gateway, sin importar el timeout de Lambda, por lo que el consejo de “aumentar a 60 segundos” fallaría silenciosamente en funciones front-end de API Gateway; también mencioné que URLs de funciones y llamadas asíncronas no están sujetas a ese límite.
- El plan gratuito no permitía túneles TCP/TLS: agregué que los túneles TCP, TLS y UDP — junto con endpoints reservados y dominios personalizados — requieren el plan Pro de pago ($8/mes facturado anualmente, $96/año, 10 túneles, ancho de banda ilimitado). El plan gratuito solo soporta HTTP(S). Ambos flujos en el borrador fallarían en una cuenta gratuita sin esta advertencia.
- Endpoints reservados: el ejemplo del borrador (
us.loclx.io:49152) es una dirección asignada aleatoriamente que cambia en cada reinicio, dificultando su uso enDATABASE_URLoREDIS_URLpersistentes. Añadíloclx endpoint reservey--reserved-endpointcomo la solución real, basada en la documentación de túneles TCP de LocalXpose. - Lista blanca de IPs concreta: el borrador solo afirmaba que “los proxies inversos avanzados… ofrecen capacidades de restricción IP” sin mostrar cómo. Añadí la sintaxis real del plugin
ip_whitelistenconfig.yaml, confirmada con la documentación de archivos de configuración de LocalXpose, y mencioné que aplica a túneles TCP/TLS igual que a HTTP. - Clarificación en PostgreSQL/TLS-tunnel: dado que los túneles TCP son independientes del payload, la negociación
sslmodede Postgres pasa por un túnel TCP en crudo sin alteraciones — Postgres no necesita el tipo de túnel TLS a menos que específicamente quieras TLS a nivel de túnel, una distinción que el borrador nunca resaltó. - Nueva sección (Docker, cliente Node.js, CI/CD): el borrador no mencionó el cliente oficial para Node.js (
node-localxpose/localxposeen npm), la imagen Docker oficial, ni la acción de GitHub, todos relevantes para automatizar los flujos descritos. Añadí con la advertencia de límite de certificados de Let’s Encrypt (5 certificados por dominio por semana para Docker). - Verificado que comandos como
npm install -g loclx,loclx account login,loclx tunnel tcp --to localhost:5432,loclx tunnel tls --to localhost:6379, la URLrediss://y la mecánica general de Capa 4 vs. Capa 7 son correctos y no fueron modificados. - Eliminada cualquier estructura no estándar (no quedó bloque de metadatos o frontmatter en el resultado final; todo normalizado en Markdown y bloques de código).
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.