--- title: Self-Hosted Gateway created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, tunnel, docker, wireguard, nat-traversal] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/hintjen/selfhosted-gateway] --- # 🌐 Self-Hosted Gateway > **Tunnel natif Docker pour exposer des conteneurs locaux sur Internet via WireGuard + proxy inverse**. Réputation : alternative légère à Ngrok et Cloudflare Tunnel, sans dépendance à un tiers. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [github.com/hintjen/selfhosted-gateway](https://github.com/hintjen/selfhosted-gateway) | | **GitHub** | [hintjen/selfhosted-gateway](https://github.com/hintjen/selfhosted-gateway) | | **License** | MIT | | **Langage** | Go, Shell | | **Étoiles GitHub** | 1.7k ⭐ | | **Dernière MAJ** | 2026-03 | | **Catégorie** | [[cat-reverse-proxy\|Reverse Proxy]], Tunnel, NAT Traversal | ## 📝 Description **Self-Hosted Gateway** (par hintjen) est un outil de **tunneling auto-hébergé** qui résout un cas d'usage très spécifique mais fréquent : **exposer un service local à Internet quand on n'a pas la main sur le routeur** (CGNAT, réseau d'entreprise, IP dynamique sans DNS). Le principe : un **VPS léger** (ou une machine publique) héberge le composant serveur du gateway, et la machine locale (derrière le NAT) fait tourner le client. Entre les deux, un **tunnel WireGuard chiffré** transporte le trafic. Le serveur gateway termine le TLS (Let's Encrypt) et présente le service au monde extérieur. L'avantage par rapport à **Cloudflare Tunnel** : **pas de dépendance à un tiers**, pas de compte Cloudflare, pas de lock-in, pas de logs côté éditeur. Par rapport à **Ngrok** : **gratuit et illimité** (vous payez juste le VPS serveur). **Public cible** : développeurs et self-hosters qui veulent **un service Ngrok-like maison**. Idéal pour exposer temporairement un dev server, partager une démo, ou publier un service perso depuis un réseau contraignant. ## 🚀 Installation ### Architecture en 2 parties **Partie 1 : Serveur gateway (VPS public)** ```yaml # Sur un VPS (Hetzner, OVH, etc.) # docker-compose.yml services: gateway-server: image: hintjen/selfhosted-gateway-server:latest container_name: gateway-server restart: unless-stopped ports: - "80:80" - "443:443" - "51820:51820/udp" # WireGuard environment: - GATEWAY_DOMAIN=tunnel.example.com - EMAIL=admin@example.com volumes: - gateway_certs:/etc/letsencrypt networks: - gateway-net networks: gateway-net: volumes: gateway_certs: ``` **Partie 2 : Client local (machine derrière le NAT)** ```yaml # docker-compose.yml (sur votre machine locale) services: app-demo: image: nginx:alpine container_name: app-demo networks: - app-net gateway-client: image: hintjen/selfhosted-gateway-client:latest container_name: gateway-client restart: unless-stopped environment: - GATEWAY_SERVER=tunnel.example.com:51820 - GATEWAY_TOKEN=*** - GATEWAY_AUTH_KEY=*** - EXPOSE_TARGET=app-demo:80 - EXPOSE_DOMAIN=demo.example.com networks: - app-net depends_on: - app-demo networks: app-net: ``` ### Option 2 : Variante Traefik Self-Hosted Gateway **ne remplace pas Traefik** sur la machine locale — il **expose le trafic à Internet** en amont. Si vous avez déjà Traefik localement, vous pouvez : ```yaml # Exposer Traefik lui-même services: gateway-client: environment: - EXPOSE_TARGET=traefik:80 # pointe vers le proxy local - EXPOSE_DOMAIN=proxy.example.com ``` ## ⚙️ Configuration Initiale 1. **Provisionner un VPS** (2 GB RAM suffisent) avec un nom de domaine pointant dessus 2. **Déployer le serveur gateway** sur le VPS 3. **Récupérer** le `GATEWAY_TOKEN` et la `GATEWAY_AUTH_KEY` (clé publique WireGuard du serveur) 4. **Configurer le client** sur la machine locale avec ces credentials 5. **DNS** : pointer le sous-domaine d'exposition vers l'IP du VPS 6. **Lancer** : `docker compose up -d` 7. **HTTPS** : le serveur gateway obtient automatiquement un cert Let's Encrypt ```bash # Vérifier le tunnel docker logs gateway-client # → doit afficher "Tunnel established" et "Reverse proxy ready" # Tester depuis l'extérieur curl -I https://demo.example.com ``` ## 🔀 Alternatives ### Open Source - [[app-pangolin]] — Concurrent plus large (tunnel + auth + reverse proxy complet) - [[app-godoxy]] — Inclut tunnel WireGuard + reverse proxy - **[[app-cloudflared]]** : la référence, mais avec dépendance Cloudflare - **frp (Fast Reverse Proxy)** : alternative chinoise, mature - **bore** : alternative minimaliste en Rust ### Comparaison Self-Hosted Gateway vs concurrents | Critère | Self-Hosted Gateway | Cloudflare Tunnel | Pangolin | frp | | :--- | :--- | :--- | :--- | :--- | | Dépendance tiers | ❌ Aucune | ⚠️ Cloudflare | ❌ Aucune | ❌ Aucune | | Coût récurrent | VPS | Gratuit (limites) | VPS | VPS | | Auth intégrée | ❌ | ✅ Cloudflare Access | ✅ Natif | ❌ | | WebUI | ❌ | ✅ | ✅ | ⚠️ | | Multi-tenant | ❌ | ❌ | ✅ | ⚠️ | | Maturité | ⚠️ Récent | ✅ Très mature | ⚠️ Récent | ✅ Mature | | WireGuard | ✅ | ❌ | ⚠️ | ❌ | ### Propriétaires (ce que ça remplace) - **Ngrok** (free tier limité à 1 tunnel) - **Tailscale Funnel** (gratuit mais avec contraintes) - **Cloudflare Tunnel** (alternative sans lock-in) - **Localtunnel / serveo** (instables, pas pour la prod) ## 🔒 Sécurité - ✅ **Chiffrement bout-en-bout** via WireGuard (algo ChaCha20) - ✅ **Pas de log côté serveur** (par design) - ✅ **HTTPS automatique** au niveau du serveur gateway - ✅ **Tokens d'authentification** pour enregistrer de nouveaux tunnels - ⚠️ **VPS = SPOF** : si le VPS tombe, tous les tunnels tombent - ⚠️ **Pas d'auth sur les services exposés** : mettre un WAF / auth en amont - ⚠️ **Clé WireGuard** : sensible, rotation régulière - ⚠️ **Pas d'audit formel** : projet de taille modeste, revue manuelle recommandée ## 📚 Ressources - [README GitHub](https://github.com/hintjen/selfhosted-gateway) - [Wiki selfh.st](https://selfh.st/apps/?tag=Reverse+Proxy) - [Documentation WireGuard](https://www.wireguard.com/quickstart/) - [Comparatif tunnels auto-hébergés](https://github.com/anderspitman/awesome-tunneling) ## 🔗 Pages Liées - [[cat-reverse-proxy]] — Catégorie Reverse Proxy - [[app-pangolin]] — Concurrent plus complet - [[app-godoxy]] — Concurrent avec tunnel intégré - [[app-traefik]] — Reverse proxy interne - [[app-cloudflared]] — Concurrent avec dépendance Cloudflare - [[comparatif-reverse-proxy]] — Comparaison détaillée - [[securisation-home-lab]] — Sécurité