Exposition de Services Locaux sur Internet avec Ngrok

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

  1. 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).
  2. Installation : Décompressez l'archive téléchargée dans un répertoire de votre choix.
  3. 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_JETON par votre jeton : ``` ngrok config add-authtoken VOTRE_JETON
      
       Cette commande créera un fichier de configuration (généralement `~/.config/ngrok/ngrok.yml` ou `%HOMEPATH%\.ngrok2\ngrok.yml`).
      
  4. 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_dev expose un service local tournant sur le port 8080.
  • backend_api expose un service local tournant sur le port 5001.
  • Les hostname sont 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.

Étiquettes: Ngrok tunneling réseau exposition de services lan

Publié le 23 juillet à 06h57