Development
14 min read
35 views

Le Proxy de Base de Données à Distance (TCP/TLS) : Connecter Sécurisé aux Cloud Workers à Localhost

IT
InstaTunnel Team
Published by the InstaTunnel team | Editorial policy
Le Proxy de Base de Données à Distance (TCP/TLS) : Connecter Sécurisé aux Cloud Workers à Localhost

Quick answer

Proxy de Base de Données à Distance Sécurisé : Exposer PostgreSQL & Redis Local: 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.

Le développement cloud moderne a profondément modifié l’endroit où notre code s’exécute par rapport à celui où nos données résident durant le cycle de vie de l’ingénierie. Nous créons des fonctions sans serveur, déployons des edge workers sur Vercel ou Cloudflare, et provisionnons des AWS Lambdas qui évoluent à l’infini. Pourtant, les données fondamentales qui alimentent ces déploiements — votre base relationnelle fraîchement créée et soigneusement mockée ou votre mémoire cache à accès rapide — se trouvent souvent directement sur votre machine locale.

Le manuel standard du développeur consiste généralement à écrire une API HTTP mock pour se placer devant la base de données locale, permettant au worker distant de récupérer des données. Mais parfois, vous ne souhaitez pas d’API. Lors de tests de migrations Prisma complexes, de débogage de requêtes SQL JOIN profondément imbriquées, ou d’évaluation du débit brut d’un cloud worker connecté à un cache, une abstraction API devient un obstacle. Vous avez besoin que votre infrastructure cloud communique directement avec votre base de données locale.

Vous avez besoin d’un moyen d’exposer votre PostgreSQL local à Internet de manière sécurisée, temporaire et fiable. Une solution de tunnel TCP localhost vers la base de données qui contourne les couches de traduction réseau sans compromettre l’intégrité de votre machine locale.

Dans la Partie 8 de notre plongée approfondie dans le réseautage avancé pour développeurs, nous explorons la mécanique du tunneling Layer 4. Nous verrons précisément comment faire le pont entre cloud workers et stockages de données locaux en utilisant LocalXpose, couvrant l’accès distant sécurisé à Redis et la connectivité PostgreSQL via un tunnel TCP brut et un tunnel TLS LocalXpose — et comment le type de tunnel choisi modifie la configuration nécessaire côté base de données.

Le Dilemme Réseau : Pourquoi les Tunnels Layer 7 Échouent avec les Bases de Données

Si vous avez déjà essayé d’utiliser un tunnel de test webhook standard pour exposer une base de données, vous avez probablement vu votre terminal vomir immédiatement des erreurs de connexion. Comprendre pourquoi nécessite une brève plongée dans le modèle OSI du réseau.

La plupart des outils de tunneling pour développeurs fonctionnent strictement au niveau Layer 7 (la couche Application). Ils sont conçus pour le trafic HTTP et HTTPS. Lorsqu’une requête atteint le serveur de bordure du tunnel, le moteur proxy attend une ligne de requête HTTP (par exemple, GET /api/users HTTP/1.1) et des en-têtes standards.

Les bases de données ne parlent pas HTTP.

PostgreSQL communique via le protocole de connexion Postgres, un protocole binaire personnalisé. Redis utilise RESP, le protocole de sérialisation Redis. Les deux sont fondamentalement du trafic Layer 4 (Transport). Enchanté de faire passer ce flux binaire dans un tunnel HTTP, le proxy tente de le parser comme du texte HTTP, échoue à trouver des en-têtes valides, et coupe la connexion abruptement.

Pour contourner cela, les développeurs ont traditionnellement recours à deux options, toutes deux pires que le problème :

  • Redirection de port — plonger dans le panneau d’administration d’un routeur résidentiel pour exposer le port 5432 à Internet. Risque de sécurité élevé, souvent bloqué par les FAI via NAT de niveau opérateur (Carrier-Grade NAT).
  • Passerelle VPN — configurer WireGuard ou OpenVPN pour que le worker cloud et la machine locale partagent un sous-réseau virtuel. Fonctionne, mais nécessite des heures de configuration pour une session de test de cinq minutes.

La réponse moderne est un proxy de tunnel TCP dédié localhost vers la base de données : il ignore complètement l’analyse HTTP et transfère aveuglément les flux TCP bruts de l’Internet public vers votre port localhost.

La Chaîne d’Outils : Pourquoi LocalXpose ?

Le marché est saturé de proxies webhook uniquement HTTP, mais un service fiable de tunneling TCP et UDP est plus restreint. LocalXpose est un reverse proxy conçu pour cela : il supporte nativement HTTP, HTTPS, TCP, TLS, et UDP, ce qui correspond exactement à la gamme de protocoles nécessaire à ce workflow.

Fonctionnalité Tunnel HTTP (Layer 7) Tunnel TCP (Layer 4) Tunnel TLS (Layer 4 + Sécurité)
Analyse Inspecte en-têtes et payload Pas d’inspection ; flux binaire brut Flux binaire chiffré, pas d’inspection
Cas d’usage cible Webhooks, prévisualisations Next.js PostgreSQL, MySQL, SSH Redis avec TLS, synchronisation de données en production, tout ce qui parle TLS
Terminaison TLS Les serveurs Edge de LocalXpose déchiffrent pour vous, puis transmettent en HTTP simple Non applicable — le trafic n’est pas chiffré de bout en bout sauf si votre application chiffre Jamais au bord de LocalXpose. Soit votre app le termine, soit vous fournissez un cert/clé au client LocalXpose qui le termine localement
Support LocalXpose loclx tunnel http loclx tunnel tcp loclx tunnel tls

La ligne de terminaison TLS mérite une pause, car c’est la partie que la plupart des guides — y compris une version antérieure de celui-ci — inversent, et cela modifie ce que le Workflow 2 ci-dessous nécessite réellement.

Workflow 1 : Exposer PostgreSQL Local à Internet

Vous avez une app Next.js sur un déploiement Vercel en prévisualisation, utilisant Prisma, et vous souhaitez qu’elle communique avec PostgreSQL tournant dans Docker sur votre laptop.

1. Installer et authentifier LocalXpose.

LocalXpose se présente sous forme d’un binaire multiplateforme et d’un wrapper npm.

npm install -g loclx
loclx account login

(Des versions Homebrew, Snap, et Chocolatey existent aussi, si vous préférez éviter npm.)

2. Vérifier que PostgreSQL local tourne.

psql -h localhost -p 5432 -U postgres -d my_local_db

3. Démarrer le tunnel TCP.

loclx tunnel tcp --to localhost:5432

Cela affiche un endpoint public généré dynamiquement, par exemple us.loclx.io:49152. C’est une connexion directe à votre port local 5432 — avec une différence : c’est aléatoire, et ça change à chaque redémarrage du tunnel. Si vous intégrez cela dans une variable d’environnement Vercel plutôt que dans un script ponctuel, c’est problématique, car Vercel ne saura pas que le port a changé. Réservez un endpoint stable à la place :

loclx endpoint reserve
loclx tunnel tcp --reserved-endpoint us.loclx.io:4455

4. Diriger le worker distant vers celui-ci.

# Format : postgresql://[user]:[password]@[tunnel-host]:[tunnel-port]/[db-name]
DATABASE_URL="postgresql://postgres:mysecretpassword@us.loclx.io:4455/my_local_db"

5. Exécuter les migrations ou requêtes comme d’habitude.

Votre fonction cloud se connecte à us.loclx.io:4455, que LocalXpose transfère directement dans votre conteneur Docker.

Parce que les tunnels TCP n’inspectent pas la charge utile, la négociation SSL de Postgres (sslmode=require, verify-full, certificats clients, etc.) passe totalement intacte. Vous n’avez pas besoin du type de tunnel TLS de LocalXpose pour Postgres sauf si vous souhaitez spécifiquement le TLS au niveau du tunnel — le protocole de connexion gère son propre chiffrement si vous l’avez configuré.

Workflow 2 : Accès Redis Sécurisé avec un Tunnel TLS LocalXpose

Redis pose un problème différent de Postgres. Il a été conçu pour fonctionner dans des réseaux privés de confiance, et beaucoup d’installations locales — y compris la plupart des versions Homebrew et apt par défaut — n’ont pas TLS compilé en natif. Si vous exposez une instance Redis en clair sur Internet, le contenu du cache, les tokens de session, et l’état de votre app sont lisibles par quiconque sur le chemin.

C’est là qu’un tunnel TLS devient pertinent — mais voici la correction : une commande loclx tunnel tls ne chiffre pas, par elle-même, ce qui n’était pas déjà chiffré. Le type de tunnel TLS de LocalXpose maintient le flux de bytes chiffré sur le saut public entre ses serveurs Edge et votre machine, mais ses serveurs Edge ne déchiffrent jamais ce flux pour vous comme ils le font pour les tunnels HTTP. La terminaison se fait de votre côté, de deux manières :

  • Votre service local parle déjà TLS. Dirigez loclx tunnel tls vers lui et les bytes chiffrés passent directement, intacts, jusqu’à votre app.
  • Votre service local ne parle pas TLS (FTP en clair, par exemple). Dans ce cas, vous fournissez au client LocalXpose un certificat et une clé avec --crt/--key, et le client déchiffre localement avant de transmettre en clair à votre app.

Redis ne tombe dans le premier cas que si vous avez activé son support TLS. Redis supporte TLS natif depuis la version 6.0, mais c’est une option à activer avec tls-port dans redis.conf — et sur beaucoup de plateformes, il faut le compiler explicitement (make BUILD_TLS=yes; redis-server --version doit indiquer tls=yes). Un simple requirepass, avec Redis écoutant en clair sur 6379, donne une authentification, pas un chiffrement — pointer un tunnel TLS vers ce port échouera soit complètement, soit, si vous utilisez --crt/--key pour que le client termine localement, réintroduit du RESP en clair pour le dernier saut dans Redis, ce qui est correct mais important à savoir.

1. Activer TLS sur 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 supporte aussi les utilisateurs ACL (ACL SETUSER) comme alternative plus fine à un seul requirepass global — à utiliser si plusieurs services doivent se connecter via le tunnel.

2. Vérifier qu’il écoute.

redis-cli --tls --cert redis.crt --key redis.key --cacert ca.crt -h localhost -p 6379 ping

3. Démarrer le tunnel TLS.

loclx tunnel tls --to localhost:6379

Vous obtenez un endpoint sécurisé, par exemple eu.loclx.io:51020 — encore une fois, réservez un domaine si cela doit survivre aux redémarrages.

4. Configurer le client distant avec rediss://.

# Le préfixe 'rediss://' impose une connexion TLS
REDIS_URL="rediss://default:MyUltraSecurePassword@eu.loclx.io:51020"

Comme le tunnel est en mode passthrough, la négociation TLS que votre client Redis Lambda effectue est négociée directement avec votre Redis local — LocalXpose ne transporte que les bytes chiffrés, sans participer au chiffrement.

Sécuriser : Liste blanche IP

Les deux workflows ci-dessus sont accessibles depuis n’importe où sur Internet par défaut, ce qui est leur but mais aussi leur risque. LocalXpose supporte la liste blanche IP via un plugin dans le fichier de configuration, et cela s’applique aux tunnels TCP et TLS comme à HTTP :

# config.yaml
db-tunnel:
  type: tcp
  region: us
  to: localhost:5432
  plugins:
    ip_whitelist:
      - 203.0.113.0/24   # par exemple, la plage NAT de sortie de votre fournisseur cloud
loclx tunnel config -f /path/to/config.yaml

Si votre Lambda ou Vercel a une IP egress statique (par exemple, une NAT Gateway AWS), restreindre le tunnel à ce CIDR limite presque totalement le risque de “quiconque devine le port”.

Une autre note pratique que le brouillon précédent omettait : les tunnels TCP et TLS ne sont pas disponibles dans le plan gratuit de LocalXpose. Le plan gratuit/démarrage est uniquement HTTP(S) ; les tunnels TCP, TLS, et UDP — ainsi que les endpoints réservés et domaines personnalisés — nécessitent le plan Pro payant (actuellement 8$/mois facturé annuellement, 96$/an, 10 tunnels simultanés, bande passante illimitée). À connaître avant de construire un workflow basé sur une commande qui ne fonctionnera pas sur un compte gratuit.

Le Principe du Moindre Privilège : Sécurité

Ouvrir un trou dans votre pare-feu directement vers votre base de données locale est une capacité puissante — et une arme à double tranchant. Contourner la protection NAT de votre routeur signifie que la sécurité ne doit pas être une réflexion après coup :

  • Ne jamais exposer des bases de données non authentifiées. Toujours utiliser des mots de passe forts (ou des ACL Redis) avant de lancer le tunnel. Évitez postgres:postgres ou admin:admin par défaut.
  • Considérez le tunnel comme éphémère. Ces tunnels sont pour des tests temporaires. Arrêtez le daemon LocalXpose dès que la session se termine — ne le laissez pas tourner en permanence.
  • Masquez vos données. Les bases exposées de cette façon ne doivent contenir que des données synthétiques ou fortement anonymisées. Ne restaurez jamais un dump de production avec des données PII réelles sur un laptop, puis tunnelisez-le ; un tunnel compromis transforme votre machine locale en source d’une fuite.
  • Utilisez la liste blanche IP si l’infrastructure qui appelle a une plage egress stable et connue — voir ci-dessus.

Surviving the Latency Equation : Pooling de Connexions

Une dernière réalité d’ingénierie à nommer : la physique. Une Lambda dans us-east-1 interrogeant une instance RDS dans la même région voit une latence inférieure à la milliseconde. La même Lambda interrogeant votre laptop via un tunnel TCP doit passer par le centre de données AWS, le bord de LocalXpose, Internet public, votre FAI, votre Wi-Fi, Docker, puis revenir. Une requête peut prendre 100 ms ; un ORM résolvant une chaîne de relations avec plusieurs aller-retours (le problème N+1) peut transformer 50 ms de latence en plusieurs secondes via le tunnel.

La seule correction ici : le timeout par défaut de Lambda est de 3 secondes, pas 10 — et il est configurable jusqu’à un plafond dur de 900 secondes (15 minutes). Mais ce plafond ne concerne que la fonction Lambda elle-même. Si elle est invoquée via API Gateway (REST ou HTTP API), la passerelle impose sa propre limite dure de 29 secondes, indépendamment du timeout de la fonction — augmenter le timeout dans vercel.json ou serverless.yml à 60 secondes ne servira à rien si API Gateway coupe la connexion. Les Function URLs et les invocations asynchrones (EventBridge, SQS) ne sont pas soumis à cette limite de 29 secondes et peuvent utiliser jusqu’à 900 secondes si nécessaire.

Pour réduire l’impact de la latence lors des tests :

  • Augmenter le timeout au bon niveau — celui de la Lambda, et séparément celui de l’intégration API Gateway.
  • Pooler les connexions localement. Les fonctions serverless ouvrent et ferment des connexions en permanence, ce qui coûte cher via un tunnel à haute latence. Utilisez PgBouncer devant PostgreSQL et pointez le tunnel vers PgBouncer plutôt que la base brute.
  • Batcher vos requêtes. Favorisez les clauses IN en bulk plutôt que les boucles itératives pour réduire le nombre d’aller-retours.

Automatiser : Docker, Client Node.js, et CI/CD

Au-delà du CLI interactif, LocalXpose fournit quelques outils pour éviter de taper loclx tunnel ... manuellement à chaque fois :

  • Un client Node.js officiel (node-localxpose sur GitHub, publié comme localxpose sur npm) avec une API basée sur des promesses — client.tcp({ to: '127.0.0.1:5432', reservedEndpoint: '...' }) ou client.tls({ crt: '/chemin/vers/cert.pem', key: '/chemin/vers/key.pem' }) — pour intégrer la gestion du tunnel dans un test ou un script de seed plutôt que dans un shell.
  • Une image Docker officielle (localxpose/localxpose), utile pour faire tourner le tunnel en sidecar ; si vous générez des certificats Let’s Encrypt pour un tunnel TLS, montez un volume pour /home/nonroot/.localxpose pour ne pas dépasser la limite de 5 certificats par domaine par semaine.
  • Une Action GitHub (LocalXpose/localxpose-action@v1) pour lancer un tunnel dans un workflow — pratique pour des tests d’intégration nécessitant une vraie instance Postgres accessible depuis un runner hébergé sans déployer toute l’infrastructure.

Rien de tout cela ne modifie la mécanique TCP/TLS sous-jacente ; cela déplace simplement ces commandes dans des environnements où vous préférez ne pas les exécuter manuellement.

La Raccourci d’Intégration Ultime

Le proxy de base de données à distance témoigne de la flexibilité du développement backend moderne. En utilisant des outils capables de routage Layer 4, nous pouvons temporairement réduire la distance physique entre infrastructure cloud sans serveur et environnements de développement locaux.

Que vous déboguiez un microservice flaky, testiez des transformations webhook, ou refusiez simplement d’écrire une API mock pour un test cache ponctuel, le pattern du tunnel TCP localhost vers la base est un atout — à condition de bien connaître le rôle de chaque type de tunnel, celui qui nécessite un plan payant, et celui qui exige que votre base parle TLS pour que le tunnel soit utile.


Changelog

Vérifié selon la documentation officielle de LocalXpose, ses dépôts GitHub, ses listings npm, la documentation officielle de Redis, et celle d’AWS Lambda (vérifié en septembre 2026).

  • Correction majeure (mécanique du tunnel TLS) : le brouillon laissait entendre que LocalXpose “peut terminer une connexion TLS à la périphérie ou la passer directement”, suggérant une décryption côté edge comme pour les tunnels HTTP. La documentation précise que les tunnels TLS ne terminent jamais à la périphérie — le flux passe directement à une app qui parle TLS ou vous fournissez --crt/--key et le client sur votre machine le termine localement. Réécriture du Workflow 2 et du tableau comparatif en conséquence.
  • Prérequis TLS pour Redis : le brouillon ne mentionnait pas que Redis supporte TLS natif depuis la version 6.0, et qu’il faut l’activer explicitement (tls-port dans redis.conf). Ajout du bloc de configuration TLS et d’un test client redis-cli avec certificat comme étape préalable. Mention des ACL comme alternative moderne à requirepass.
  • Correction des faits sur le timeout Lambda : le “typiquement 10 secondes” est une erreur — la valeur par défaut est 3 secondes, configurable jusqu’à 900. Ajout du détail que si Lambda est invoqué via API Gateway, la limite est de 29 secondes imposée par la passerelle, indépendamment du timeout Lambda. La recommandation de passer à 60 secondes est donc inapplicable dans ce cas.
  • Gating du plan gratuit non mentionné : ajout que TCP, TLS, UDP, endpoints réservés, et domaines personnalisés nécessitent le plan Pro ($8/mois annuel, 96$/an, 10 tunnels). Le plan gratuit est HTTP(S) seul. Les deux workflows échoueraient sans cette précision.
  • Endpoints réservés : l’exemple us.loclx.io:49152 est aléatoire et change à chaque redémarrage, rendant difficile la configuration persistante. Ajout de loclx endpoint reserve et --reserved-endpoint comme solution.
  • Liste blanche IP concrète : ajout du format de configuration config.yaml avec ip_whitelist, confirmé par la documentation, applicable aux tunnels TCP/TLS comme HTTP.
  • Clarification Postgres/TLS : précisé que, comme TCP est payload-agnostique, le sslmode de Postgres passe sans modification dans un tunnel TCP. Le tunnel TLS n’est nécessaire que si vous souhaitez un chiffrement de niveau tunnel, ce qui n’est pas obligatoire.
  • Section ajoutée (Docker, client Node.js, CI/CD) : mention des outils officiels pour automatiser ces workflows : client Node.js (node-localxpose), image Docker (localxpose/localxpose), et GitHub Action (LocalXpose/localxpose-action@v1). Ajout de la limite de 5 certificats par domaine par semaine pour Docker.
  • Vérifié et laissé inchangé : npm install -g loclx, loclx account login, loclx tunnel tcp --to localhost:5432, loclx tunnel tls --to localhost:6379, schéma rediss://, et la distinction Layer 4 vs Layer 7.
  • Suppression de tout contenu non standard ou métadonnées, formaté en Markdown standard avec titres et blocs de code.

Continue from this article into the most relevant product guides and workflows.

Related Topics

#expose local postgresql to internet, tcp tunnel localhost database, localxpose tls tunnel, secure redis remote access, remote database proxy, expose local database, local database to internet, postgresql remote connection, redis remote access, connect vercel to local database, connect aws lambda to localhost, localxpose database proxy, secure tcp tunnel, tls tunnel localhost, reverse tunnel database, expose local mysql, expose local mongodb, remote cloud worker local db, database webhook testing, backend infrastructure proxy, tcp port forwarding internet, secure localport proxy, localhost database tunneling, ngrok tcp alternative, local environment database exposure, expose database without public ip, local database api integration, cloud to local connection, remote testing postgres, serverless to localhost database, encrypted tcp tunnel, database reverse proxy, secure database bridging, localxpose tcp guide, postgres port forwarding, redis secure tunnel, developers localhost proxy, bypass nat database, route public traffic to local database, localxpose tutorial database, secure tunnel backend developers, expose local db to lambda, expose local db to vercel, host local database publicly, access localhost database remotely, internet to localhost database, tcp reverse proxy tutorial, tls database encryption tunnel, test remote app with local db, developer tunneling tools, localhost database exposure, cloud worker db testing, secure local database testing, local environment tcp forwarding, localxpose postgresql setup

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles