NPS Enhanced
An enhanced and actively maintained NAT traversal and reverse proxy system with Web UI.
⭐️ Give us a star on GitHub if you like it!
Introduction
NPS is a lightweight and efficient NAT traversal and reverse proxy system for exposing services behind NAT or firewalls. It supports multiple protocols such as TCP, UDP, HTTP, HTTPS, and SOCKS5, and provides a Web management interface for convenient deployment and monitoring.
Based on the original NPS project, NPS Enhanced has evolved into an actively maintained and extensively improved edition with continuous refactoring, better stability, and many practical enhancements for modern deployment scenarios.
- Before asking questions, please check: Documentation and Issues
- Contributions welcome: Submit PRs, feedback, or suggestions to help improve the project
- Join the discussion: Connect with other users in our Telegram Group
- Android: djylb/npsclient
- OpenWrt: djylb/nps-openwrt
- Mirror: djylb/nps-mirror
Why NPS Enhanced
- Easy to install
- Lightweight and efficient
- Easy to manage
- Powerful and flexible
Key Features
- Multi-Protocol Support
- Cross-Platform Deployment
- Web Management Interface
- Security and Extensibility
- Multiple Connection Protocols
Installation and Usage
For more detailed configuration options, please refer to the Documentation.
Android | OpenWrt
Docker Deployment
If you need to obtain the real client IP, you can use it together with mmproxy. For example: SSH.
NPS Server
docker pull duan2001/nps
docker run -d --restart=always --name nps --net=host -v $(pwd)/conf:/conf -v /etc/localtime:/etc/localtime:ro duan2001/nps
Tip: After installing NPS, edit nps.conf (for example: listening ports and Web admin credentials) before starting the service.
NPC Client
docker pull duan2001/npc
docker run -d --restart=always --name npc --net=host duan2001/npc -server=xxx:123,yyy:456 -vkey=key1,key2 -type=tls,tcp -log=off
Tip: Get-server,-vkey, and-typefrom the client page in the NPS Web UI to avoid manual input mistakes.
Server Installation
Linux
# Install (default configuration path: /etc/nps/; binary file path: /usr/bin/)
wget -qO- https://raw.githubusercontent.com/djylb/nps/refs/heads/master/install.sh | sudo sh -s nps
nps install
nps start|stop|restart|uninstall
Update
nps update
Tip: For first-time setup, edit/etc/nps/nps.confand verify it before runningnps start.
Windows
Windows 7 users should use the version ending with old: 64 / 32
.\nps.exe install
.\nps.exe start|stop|restart|uninstall
Update
.\nps.exe update
Client Installation
Linux
wget -qO- https://raw.githubusercontent.com/djylb/nps/refs/heads/master/install.sh | sudo sh -s npc
/usr/bin/npc install -server=xxx:123,yyy:456 -vkey=xxx,yyy -type=tls -log=off
npc start|stop|restart|uninstall
Update
npc update
Tip: For npc install, use the command generated on the client page in the NPS Web UI.
Windows
Windows 7 users should use the version ending with old: 64 / 32
.\npc.exe install -server="xxx:123,yyy:456" -vkey="xxx,yyy" -type="tls,tcp" -log="off"
.\npc.exe start|stop|restart|uninstall
Update
.\npc.exe update
Tip: The client supports connecting to multiple servers simultaneously. Example:
npc -server=xxx:123,yyy:456,zzz:789 -vkey=key1,key2,key3 -type=tcp,tls
Here,xxx:123uses TCP, andyyy:456andzzz:789use TLS.
If you need to connect to older server versions, add -proto_version=0 to the startup command.