---
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
