Initial vault setup
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user