L'exposition de services fonctionnant sur un réseau local (LAN) à l'Internet public est appelée "tunneling" ou "NAT traversal". Cela permet à des utilisateurs externes d'accéder à vos applications locales. Une alternative à l'exposition directe est l'utilisation d'un VPN ou l'acquisition d'une adresse IP publique auprès de votre fournisseur d'accès à Internet.
Divers outils existent pour faciliter cette démarche :
- Ngrok : Un outil populaire et facile à utiliser (
https://ngrok.com/). - Sshuttle : Permet de créer des tunnels SSH (
https://github.com/sshuttle/sshuttle). - Nps : Une solution de tunneling réseau open-source (
https://github.com/ehang-io/nps). - Cloudflare Tunnel : Une option gratuite et sécurisée proposée par Cloudflare.
Démarrage Rapide avec Ngrok
- Téléchargement : Obtenez la dernière version stable de Ngrok pour votre système d'exploitation depuis la page des téléchargements (ex:
https://ngrok.com/download). - Installation : Décompressez l'archive téléchargée dans un répertoire de votre choix.
- Configuration de l'Authentification :
- Créez un compte sur le tableau de bord Ngrok (
https://dashboard.ngrok.com/signup). - Récupérez votre jeton d'authentification (authtoken) depuis les paramètres de votre compte.
- Initialisez la configuration de Ngrok en exécutant la commande suivante dans votre terminal, en remplaçant
VOTRE_JETONpar votre jeton : ``` ngrok config add-authtoken VOTRE_JETONCette commande créera un fichier de configuration (généralement `~/.config/ngrok/ngrok.yml` ou `%HOMEPATH%\.ngrok2\ngrok.yml`).
- Créez un compte sur le tableau de bord Ngrok (
- Lancement du Tunnel : Pour exposer un service local fonctionnant sur un port spécifique, utilisez la commande : ```
ngrok http PORT_LOCAL
Remplacez `PORT_LOCAL` par le numéro du port de votre application (par exemple, `8000`). Ngrok vous fournira une URL publique (ex: `https://random-subdomain.ngrok-free.app`) qui redirigera le trafic vers votre service local.
Exposition d'un Service Unique
Application Locale Simple (Exemple Flask)
Créez un script Python simple utilisant Flask pour simuler une application web :
from flask import Flask, jsonify
api_app = Flask(__name__)
@api_app.route("/status")
def get_status():
return jsonify({"service_status": "operational", "code": 200})
if __name__ == '__main__':
api_app.run(host='127.0.0.1', port=5001, debug=False)
Lancement du Tunnel Ngrok
Assurez-vous que votre application Flask est en cours d'exécution (port 5001 dans cet exemple). Lancez ensuite Ngrok pour exposer ce service :
# Assurez-vous d'être dans le répertoire où ngrok est installé
./ngrok http 5001
Une fois le tunnel actif, vous pourrez accéder à votre application via l'URL publique fournie par Ngrok. Vous pouvez vérifier l'état en utilisant curl ou votre navigateur :
curl https://votre-domaine-ngrok.ngrok-free.app/status
Exposition de Plusieurs Services
Ngrok permet de gérer plusieurs tunnels simultanément, chacun pouvant être exposé via une URL distincte ou un sous-domaine personnalisé si vous possédez un domaineNgrok réservé.
Configuration via Fichier
Plutôt que de lancer des commandes multiples, vous pouvez définir vos tunnels dans un fichier de configuration (par défaut ~/.config/ngrok/ngrok.yml ou %HOMEPATH%\.ngrok2\ngrok.yml).
Ouvrez ou créez ce fichier et définissez vos tunnels :
version: "2"
authtoken: VOTRE_JETON # Votre jeton d'authentification
tunnels:
frontend_dev:
proto: http
hostname: dev.votredomaine.com # Nom d'hôte personnalisé (si réservé)
addr: 127.0.0.1:8080 # Port du service frontend
backend_api:
proto: http
hostname: api.votredomaine.com # Nom d'hôte personnalisé
addr: 127.0.0.1:5001 # Port du service backend
Dans cet exemple :
frontend_devexpose un service local tournant sur le port8080.backend_apiexpose un service local tournant sur le port5001.- Les
hostnamesont optionnels et nécessitent la réservation de domaines sur votre compte Ngrok. Sinon, Ngrok générera des sous-domaines aléatoires.
Lancement des Services Configurés
Pour démarrer tous les tunnels définis dans le fichier de configuration :
./ngrok start --all
Pour démarrer un tunnel spécifique par son nom :
./ngrok start frontend_dev
Ou pour démarrer un autre tunnel :
./ngrok start backend_api
Ngrok affichera les URLs publiquse associées à chaque tunnel actif.