Initial vault setup

This commit is contained in:
2026-06-09 18:40:21 +02:00
commit bda02d587f
3692 changed files with 402457 additions and 0 deletions
@@ -0,0 +1,206 @@
---
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