--- title: NPS Enhanced created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, tunnel, vpn, intranet, go, nps] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/yisier/nps] --- # 🚦 NPS Enhanced > **Fork activement maintenu de NPS (ehang-io/nps), serveur de tunnel intranet / reverse proxy haute performance écrit en Go**. Réputation : résoudre les nombreux bugs de l'original abandonné tout en ajoutant des features (mise à jour de version, GUI client, sécurisation par défaut). ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [natnps.com](https://natnps.com/) | | **GitHub** | [yisier/nps](https://github.com/yisier/nps) | | **License** | GPL-3.0 | | **Langage** | Go (91.8 %), Vue (5.8 %) | | **Étoiles GitHub** | 3.3k ⭐ | | **Dernière MAJ** | 2026-06-04 (v0.26.34) | | **Catégorie** | [[cat-reverse-proxy|Reverse Proxy]], Tunnel, VPN | ## 📝 Description **NPS Enhanced** (par yisier) est un **fork de référence** du projet [ehang-io/nps](https://github.com/ehang-io/nps), un serveur de **tunnel intranet** léger et open-source. NPS est l'outil chinois historique (popularisé sous le terme "内网穿透") pour **exposer des services derrière un NAT ou un firewall** sans configuration réseau complexe : un client léger (npc) installé sur la machine cible converse avec un serveur NPS public et relaie les flux entrants. Pourquoi un fork ? L'original (ehang-io/nps) n'est plus maintenu depuis plusieurs années et accumule les bugs critiques (memory leaks, races concurrentes, pannes de tunnel). yisier/nps propose une **base 0.26.10 réécrite et stabilisée** : corrections de plus de 15 bugs de concurrence, de memory leak, de parsing SOCKS5/TLS/UDP, ajout d'une GUI client Wails, génération aléatoire des credentials par défaut au premier démarrage, et un script de mise à jour affichant la version. **Caractéristiques principales** : - ✅ **Léger** : un seul binaire Go serveur (nps) + un seul binaire client (npc) - ✅ **Multi-protocoles** : TCP, UDP, HTTP(S), SOCKS5, WebSocket, TLS, mTLS, P2P - ✅ **Web UI intégrée** pour gérer clients, tunnels, domaines, utilisateurs - ✅ **Authentification par clés** + cryptage des flux - ✅ **Compression et chiffrement** configurable par tunnel - ✅ **Cross-platform** : Linux, Windows, macOS, ARM (Raspberry Pi, routeurs) - ✅ **NAT Punching P2P** (mode hole punching) pour optimiser la latence **Public cible** : utilisateurs qui veulent **exposer un service domestique ou professionnel** sans ouvrir de ports sur leur box, sans dépendre de Ngrok/Cloudflare Tunnel (services tiers), et qui acceptent d'auto-héberger un binaire léger. C'est typiquement le concurrent direct de **frp** (Fatedier/frp), **ZeroTier**, **Tailscale** ou **Cloudflare Tunnel**, mais en self-hosted pur. ## 🚀 Installation ### Option 1 : Docker Compose (recommandé) ```yaml # docker-compose.yml version: '3.8' services: nps: image: yisier1/nps:latest container_name: nps restart: unless-stopped ports: - "8080:8080" # web UI - "8024:8024" # client connection (NPS protocol) - "80:80" # forwarded HTTP - "443:443" # forwarded HTTPS volumes: - ./conf:/conf # config nps - ./logs:/logs # logs networks: - proxy networks: proxy: external: true ``` > ⚠️ **Important** : sur l'UI web par défaut, le port client est `8024` (à adapter). Les credentials par défaut sont `admin/123` ; **changez-les immédiatement** ou laissez le conteneur générer des credentials aléatoires (affichés dans les logs au premier démarrage depuis v0.26.33). ### Variante Traefik (exposer l'UI NPS derrière Traefik) ```yaml # docker-compose.yml (variante) version: '3.8' services: nps: image: yisier1/nps:latest container_name: nps restart: unless-stopped ports: - "8024:8024" # exposé uniquement pour les clients npc volumes: - ./conf:/conf labels: - "traefik.enable=true" - "traefik.docker.network=proxy" - "traefik.http.routers.nps.rule=Host(`nps.example.com`)" - "traefik.http.routers.nps.entrypoints=websecure" - "traefik.http.routers.nps.tls.certresolver=letsencrypt" - "traefik.http.services.nps.loadbalancer.server.port=8080" networks: - proxy npc: image: yisier1/npc:latest container_name: npc restart: unless-stopped depends_on: - nps command: -server=:nps:8024 -vkey=your_vkey_here -type=tcp networks: - proxy networks: proxy: external: true ``` ### Option 2 : Binaire natif (Linux) ```bash # Télécharger depuis la page Releases wget https://github.com/yisier/nps/releases/latest/download/linux_amd64_server.tar.gz tar -xzf linux_amd64_server.tar.gz sudo ./nps install sudo nps start # service systemd installé ``` ### Option 3 : Client NPC sur la machine à exposer ```bash # Sur la machine derrière le NAT (ex: Raspberry Pi) wget https://github.com/yisier/nps/releases/latest/download/linux_amd64_client.tar.gz tar -xzf linux_amd64_client.tar.gz ./npc -server=your-server.com:8024 -vkey=your-vkey -type=tcp ``` > 💡 Depuis la v0.26.21, le client NPC peut tourner en **mode interactif** (double-clic + prompts) sans fichier de conf : idéal pour les postes Windows. ## ⚙️ Configuration Initiale 1. **Lancer le serveur NPS** et accéder à `http://your-server:8080` (ou `https://nps.example.com` si derrière Traefik). 2. **Changer les credentials admin** dès la première connexion. 3. **Créer un client** dans l'UI (menu "Client") → génère un **vKey** unique. 4. **Sur la machine distante** : lancer `npc -server=YOUR_IP:8024 -vkey=THE_VKEY -type=tcp`. 5. **Créer des tunnels** dans l'UI (menu "Tunnel") : choisir TCP/UDP/HTTP/HTTPS, mapper un port NPS → IP/port cible. 6. **Tester** : `http://YOUR_NPS_SERVER:mapped-port` doit atteindre le service interne. > 🎯 Exemple typique : exposer un NAS Synology (port 5000) derrière une Freebox via NPS : port NPS 5000 → npc client sur NAS → 127.0.0.1:5000. ## 🔄 Alternatives ### Open Source - [[app-frp|Fatedier/frp]] — concurrent direct, plus mature mais sans fork actif récent - [[app-caddy]] — pour exposition simple sans serveur de tunnel dédié - [[app-traefik]] — si vous voulez un reverse proxy L7 + tunnels Docker - [Zerotier](https://www.zerotier.com/) — VPN mesh L3 (pas reverse proxy) - [Headscale](https://github.com/juanfont/headscale) — alternative self-hosted à Tailscale - [WireGuard](https://www.wireguard.com/) — VPN L3 natif kernel ### Propriétaires (ce que NPS Enhanced remplace) - **Ngrok** (gratuit limité, plans payants à partir de 8$/mois) - **Cloudflare Tunnel** (gratuit mais lié à Cloudflare DNS) - **Tailscale Funnel** (intégré à Tailscale, gratuit avec limitations) - **localhost.run** / **serveo.net** (gratuits mais non garantis, publics) - **frp commercial** ou solutions pro type **Hole Punching-as-a-Service** ### Comparaison rapide | Critère | NPS Enhanced | frp | Cloudflare Tunnel | Ngrok | | :--- | :--- | :--- | :--- | :--- | | Self-hosted | ✅ | ✅ | ❌ (CF hosted) | ❌ | | Multi-protocole | ✅ (TCP/UDP/HTTP/SOCKS5) | ✅ | HTTP only | HTTP/TCP | | P2P nat punch | ✅ | ❌ | ❌ | ❌ | | Web UI | ✅ | ✅ | ✅ (dashboard CF) | ✅ | | License | GPL-3.0 | Apache-2.0 | Propriétaire | Propriétaire | | Stars | 3.3k | 95k+ | n/a | n/a | **Verdict** : **NPS Enhanced** pour qui veut un binaire léger auto-hébergé avec gestion fine des tunnels. **frp** si l'écosystème mature compte (communauté FR, docs). **Cloudflare Tunnel** pour la simplicité (mais dépendance externe). **Tailscale Funnel** pour exposition rapide en HTTPS si Tailscale est déjà utilisé. ## 🔐 Sécurité - **Authentification par clé unique (vKey)** par client — obligatoire, pas de connexion anonyme - **Chiffrement TLS** configurable par tunnel (recommandé pour HTTP/HTTPS) - **Cryptage des flux** interne entre npc et nps (option `crypt=true`) - **Credentials web auto-générés** au premier démarrage (depuis v0.26.33) — fini le `admin/123` par défaut - **Whitelist IP** par tunnel (limiter les sources autorisées) - **Rate limiting** basique disponible dans la web UI - ⚠️ **Mettre à jour régulièrement** : plusieurs CVE historiques sur l'original ehang-io/nps ; ce fork corrige activement les problèmes mais reste auditable (GPL-3.0) - ⚠️ **Ne pas exposer le port client (8024) sur Internet** : restreindre par firewall aux IP des clients connus, ou mettre un VPN/WireGuard devant - **Fail2ban** recommandé sur le serveur NPS pour bloquer les scans de credential ## 📚 Ressources - [Documentation originale NPS](https://ehang.io/nps/documents) — toujours valide pour les concepts - [Wiki Feishu NPS Enhanced](https://dqg9t9eulqq.feishu.cn/wiki/FmVVwDcEGiTZxekYJl5ccuFanlg) — features spécifiques au fork - [Docker Hub yisier1/nps](https://hub.docker.com/r/yisier1/nps) - [Docker Hub yisier1/npc](https://hub.docker.com/r/yisier1/npc) - [Issues GitHub](https://github.com/yisier/nps/issues) — bugs, feature requests ## Pages Liées - [[cat-reverse-proxy]] — Catégorie Reverse Proxy - [[app-caddy]] — Reverse proxy L7 simple - [[app-traefik]] — Reverse proxy L7 cloud-native - [[app-frp]] — Concurrent open source - [[comparatif-reverse-proxy]] — Comparaison détaillée - [[tunnel-intranet]] — Concepts d'exposition NAT