9.3 KiB
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 |
| GitHub | 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 |
📝 Description
NPS Enhanced (par yisier) est un fork de référence du projet 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é)
# 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 sontadmin/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)
# 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)
# 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
# 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
- Lancer le serveur NPS et accéder à
http://your-server:8080(ouhttps://nps.example.comsi derrière Traefik). - Changer les credentials admin dès la première connexion.
- Créer un client dans l'UI (menu "Client") → génère un vKey unique.
- Sur la machine distante : lancer
npc -server=YOUR_IP:8024 -vkey=THE_VKEY -type=tcp. - Créer des tunnels dans l'UI (menu "Tunnel") : choisir TCP/UDP/HTTP/HTTPS, mapper un port NPS → IP/port cible.
- Tester :
http://YOUR_NPS_SERVER:mapped-portdoit 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 — 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 — VPN mesh L3 (pas reverse proxy)
- Headscale — alternative self-hosted à Tailscale
- WireGuard — 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/123par 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 — toujours valide pour les concepts
- Wiki Feishu NPS Enhanced — features spécifiques au fork
- Docker Hub yisier1/nps
- Docker Hub yisier1/npc
- Issues GitHub — 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