Add ehang-io/nps (#88)

This commit is contained in:
guclan 2023-05-15 14:53:55 +08:00 committed by GitHub
parent eaaebd7987
commit 5600b1def0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 398 additions and 0 deletions

View File

@ -430,6 +430,20 @@
"website": "https://www.adminer.org/", "website": "https://www.adminer.org/",
"github": "https://github.com/xiahao90/adminer", "github": "https://github.com/xiahao90/adminer",
"document": "https://github.com/xiahao90/adminer" "document": "https://github.com/xiahao90/adminer"
},
{
"key": "nps",
"name": "nps",
"tags": ["Tool"],
"versions": ["0.26.10"],
"shortDescZh": "轻量级、高性能、功能强大的内网穿透代理服务器",
"shortDescEn": "Lightweight, high-performance, powerful intranet penetration proxy server",
"type": "tool",
"limit": 1,
"crossVersionUpdate": true,
"website": "https://ehang-io.github.io/nps",
"github": "https://github.com/ehang-io/nps",
"document": "https://ehang-io.github.io/nps"
} }
] ]
} }

BIN
apps/nps/metadata/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,90 @@
# nps
![](https://img.shields.io/github/stars/ehang-io/nps.svg) ![](https://img.shields.io/github/forks/ehang-io/nps.svg)
[![Gitter](https://badges.gitter.im/cnlh-nps/community.svg)](https://gitter.im/cnlh-nps/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
![Release](https://github.com/ehang-io/nps/workflows/Release/badge.svg)
![GitHub All Releases](https://img.shields.io/github/downloads/ehang-io/nps/total)
[README](https://github.com/ehang-io/nps/blob/master/README.md)|[中文文档](https://github.com/ehang-io/nps/blob/master/README_zh.md)
nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务器。目前支持**tcp、udp流量转发**,可支持任何**tcp、udp**上层协议访问内网网站、本地支付接口调试、ssh访问、远程桌面内网dns解析等等……此外还**支持内网http代理、内网socks5代理**、**p2p等**并带有功能强大的web管理端。
## 背景
![image](https://github.com/ehang-io/nps/blob/master/image/web.png?raw=true)
1. 做微信公众号开发、小程序开发等----> 域名代理模式
2. 想在外网通过ssh连接内网的机器做云服务器到内网服务器端口的映射----> tcp代理模式
3. 在非内网环境下使用内网dns或者需要通过udp访问内网机器等----> udp代理模式
4. 在外网使用HTTP代理访问内网站点----> http代理模式
5. 搭建一个内网穿透ss在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式
## 特点
- 协议支持全面兼容几乎所有常用协议例如tcp、udp、http(s)、socks5、p2p、http代理...
- 全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务
- 控制全面,同时支持服务端和客户端控制
- https集成支持将后端代理和web服务转成https同时支持多证书
- 操作简单只需简单的配置即可在web ui上完成其余操作
- 展示信息全面,流量、系统信息、即时带宽、客户端版本等
- 扩展功能强大,该有的都有了(缓存、压缩、加密、流量限制、带宽限制、端口复用等等)
- 域名解析具备自定义header、404页面配置、host修改、站点保护、URL路由、泛解析等功能
- 服务端支持多用户和用户注册功能
**没找到你想要的功能?不要紧,点击[进入文档](https://ehang-io.github.io/nps)查找吧**
## 快速开始
### 安装
> [releases](https://github.com/ehang-io/nps/releases)
下载对应的系统版本即可,服务端和客户端是单独的
### 服务端启动
下载完服务器压缩包后,解压,然后进入解压后的文件夹
- 执行安装命令
对于linux|darwin ```sudo ./nps install```
对于windows管理员身份运行cmd进入安装目录 ```nps.exe install```
- 默认端口
nps默认配置文件使用了8044380808024端口
80与443端口为域名解析模式默认端口
8080为web管理访问端口
8024为网桥端口用于客户端与服务器通信
- 启动
对于linux|darwin ```sudo nps start```
对于windows管理员身份运行cmd进入程序目录 ```nps.exe start```
```安装后windows配置文件位于 C:\Program Files\npslinux和darwin位于/etc/nps```
**如果发现没有启动成功,可以查看日志(Windows日志文件位于当前运行目录下linux和darwin位于/var/log/nps.log)**
- 访问服务端ip:web服务端口默认为8080
- 使用用户名和密码登陆默认admin/123正式使用一定要更改
- 创建客户端
### 客户端连接
- 点击web管理中客户端前的+号,复制启动命令
- 执行启动命令linux直接执行即可windows将./npc换成npc.exe用cmd执行
如果需要注册到系统服务可查看[注册到系统服务](https://ehang-io.github.io/nps/#/use?id=注册到系统服务)
### 配置
- 客户端连接后在web中配置对应穿透服务即可
- 更多高级用法见[完整文档](https://ehang-io.github.io/nps/)
## 贡献
- 如果遇到bug可以直接提交至dev分支
- 使用遇到问题可以通过issues反馈
- 项目处于开发阶段,还有很多待完善的地方,如果可以贡献代码,请提交 PR 至 dev 分支
- 如果有新的功能特性反馈可以通过issues或者qq群反馈

View File

@ -0,0 +1,2 @@
# key -> user | value -> pwd
npc=npc.pwd

View File

@ -0,0 +1,85 @@
appname = nps
#Boot mode(dev|pro)
runmode = pro
#HTTP(S) proxy port, no startup if empty
http_proxy_ip=${NPS_HTTP_PROXY_IP}
http_proxy_port=${NPS_HTTP_PROXY_PORT}
https_proxy_port=${NPS_HTTPS_PROXY_PORT}
https_just_proxy=true
#default https certificate setting
https_default_cert_file=server.pem
https_default_key_file=server.key
##bridge
bridge_type=tcp
bridge_port=${NPS_BRIDGE_PORT}
bridge_ip=0.0.0.0
# Public password, which clients can use to connect to the server
# After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file.
public_vkey=${NPS_PUBLIC_VKEY}
#Traffic data persistence interval(minute)
#Ignorance means no persistence
#flow_store_interval=1
# log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7
log_level=7
#log_path=nps.log
#Whether to restrict IP access, true or false or ignore
#ip_limit=true
#p2p
#p2p_ip=127.0.0.1
#p2p_port=6000
#web
web_host=${NPS_WEB_HOST}
web_username=${NPS_WEB_USERNAME}
web_password=${NPS_WEB_PASSWORD}
web_port = ${NPS_WEB_PORT}
web_ip=0.0.0.0
web_base_url=
web_open_ssl=${NPS_WEB_OPEN_SSL}
web_cert_file=${NPS_DEFAULT_CERT_FILE}
web_key_file=${NPS_DEFAULT_KEY_FILE}
# if web under proxy use sub path. like http://host/nps need this.
#web_base_url=/nps
#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)
#Remove comments if needed
#auth_key=test
auth_crypt_key =${NPS_AUTH_CRYPT_KEY}
#allow_ports=9001-9009,10001,11000-12000
#Web management multi-user login
allow_user_login=false
allow_user_register=false
allow_user_change_username=false
#extension
allow_flow_limit=false
allow_rate_limit=false
allow_tunnel_num_limit=false
allow_local_proxy=false
allow_connection_num_limit=false
allow_multi_ip=false
system_info_display=false
#cache
http_cache=false
http_cache_length=100
#get origin ip
http_add_origin_header=false
#pprof debug options
#pprof_ip=0.0.0.0
#pprof_port=9999
#client disconnect timeout
disconnect_timeout=60

View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA2MVLOHvgU8FCp6LgQrPfaWcGygrsRk7TL9hbT8MxbCRUSLV7
Lbt3q5Knz8eTN4NWmwE6L5glOcH2x3Hnn+hPjbvgq35XBBIccAm0cYYKqoKkikeK
FZM0Gp/WhSrhJ4laTyQqyleIFKpwD9kHDiC/sxjGDhSFmHKhhAnsQIRm2tppFXX0
aAMqJEm88jzk1BN2QtKjEAn1u8v1+QW1KP3WuzdXH4L7hhMll66/KIm6Hfs2FRHQ
pRUWqZeJY4q79NW5p5f+siGwOsGpxb/p11pM+0xnCH3UIFbm3zCTzP4sLvkfFGAe
yAHsAwmaP8dJxh40ej3NN8uNiNvt8nw2Vb/1LwIDAQABAoIBAD40x/RKoEKIyE8B
D6g0pB1EQo+CePFoN3SYewO1uR4WgtVmtxWVoa7r5BpdZGLe3uCWhpMX7z7W6bGs
f1LFQOckjkHIfMIfTGfecRjO5Yqu+Pbxtq+gUah+S/plJr3IzdC+SUVNvzBnBMeX
eU3Vmg2UQ2nQ+9GWu8D/c/vDwxx0X8oQ2G8QaxX0tUurlSMNA3M7xySwEvhx54fO
UrDF3Q4yF48eA4butxVLFWf3cnlY+nR8uYd2vKfmp689/8C6kkfoM9igB78e93sm
uDM2eRLm4kU5WLl301T42n6AF7w8J0MhLLVOIeLs4l5gZPa3uKvYFmuHQao7e/5R
U/jHKrECgYEA8alPXuxFSVOvdhIsSN//Frj9CdExVdYmaLkt/2LO4FMnOaWh1xh7
5iCY1bJT8D9dhfbqRg3qW2oguZD8gu04R8fTRegQ89qmAIwsEYqVf9salR41lZU4
Rc+5yc7O11WIe9Lzu+ONFBFkAh3UFMR4zVZ/JhKIG/P5Srm7SUdKW2cCgYEA5aHo
x2LR+yKhjkrBzHG3Qrfy1PtlYHjOpYYAKHQcBFuiG08W3CK/vkYl+mhv0uyhT7mn
q6NDqrpZPRnDlOoEqgRS1X/QWKN6Pgd4HNLIawvp0vK9jYXDPcAXFzVthXCIwFcn
3a3m4cHiuLdRNOHkydiHQyTOF6eEneN07TDvwvkCgYEApzOd1u9igPmFzQuF2GYi
+HXFnaU/nUQuDwcQ7EJRIKRn31raPxiRoQesty5LJU6yRp4wOYgnPliPi9Tk4TGA
XynC4/tMv2vorzhMxVY9Wdke602bhYNZC/RNd3O/aP2lEQdD3Bv04I2nxE8fDb9i
VbAjCRSJV83WDf2zt1+78sECgYEAzezjRiKdcZu9y0/I+WEk2cUCE/MaF2he0FsZ
uy1cjp/qAJltQ5452xUnK6cKWNlxU4CHF0mC/hC8xCldliZCZoEYE3PaUBLSJdwm
35o6tpxpZI3gZJCG5NJlIp/8BkVDrVC7ZHV17hAkFEf4n/bPaB8wNYtE8jt8luaK
TcarzGkCgYBn2alN0RLN2PHDurraFZB6GuCvh/arEjSCY3SDFQPF10CVjTDV7sx3
eqJkwJ81syTmfJwZIceWbOFGgsuSx37UrQAVlHZSvzeqEg9dA5HqSoOACyidJI7j
RG2+HB+KpsIZjGgLrEM4i7VOpYUDRdaouIXngFq/t9HNT+MDck5/Lw==
-----END RSA PRIVATE KEY-----

View File

@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDtTCCAp2gAwIBAgIJAPXRSiP0Fs7sMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcxMTA3MDg1MzQ2WhcNMjcxMTA1MDg1MzQ2WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEA2MVLOHvgU8FCp6LgQrPfaWcGygrsRk7TL9hbT8MxbCRUSLV7Lbt3q5Kn
z8eTN4NWmwE6L5glOcH2x3Hnn+hPjbvgq35XBBIccAm0cYYKqoKkikeKFZM0Gp/W
hSrhJ4laTyQqyleIFKpwD9kHDiC/sxjGDhSFmHKhhAnsQIRm2tppFXX0aAMqJEm8
8jzk1BN2QtKjEAn1u8v1+QW1KP3WuzdXH4L7hhMll66/KIm6Hfs2FRHQpRUWqZeJ
Y4q79NW5p5f+siGwOsGpxb/p11pM+0xnCH3UIFbm3zCTzP4sLvkfFGAeyAHsAwma
P8dJxh40ej3NN8uNiNvt8nw2Vb/1LwIDAQABo4GnMIGkMB0GA1UdDgQWBBQdPc0R
a8alY6Ab7voidkTGaH4PxzB1BgNVHSMEbjBsgBQdPc0Ra8alY6Ab7voidkTGaH4P
x6FJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNV
BAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAPXRSiP0Fs7sMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAH1IZNkjuvt2nZPzXsuiVNyCE1vm346z
naE0Uzt3aseAN9m/iiB8mLz+ryvWc2aFMX5lTdsHdm2rqmqBCBXeRwTLf4OeHIju
ZQW6makWt6PxANEo6gbdPbQXbS420ssUhnR2irIH1SdI31iikVFPdiS0baRRE/gS
+440M1jOOOnKm0Qin92ejsshmji/0qaD2+6D5TNw4HmIZaFTBw+kfjxCL6trfeBn
4fT0RJ121V3G3+AtG5sWQ93B3pCg+jtD+fGKkNSLhphq84bD1Zv7l73QGOoylkEn
Sc0ajTLOXFBb83yRdlgV3Da95jH9rDZ4jSod48m+KemoZTDQw0vSwAU=
-----END CERTIFICATE-----

View File

@ -0,0 +1,124 @@
{
"formFields": [
{
"type": "number",
"labelZh": "web管理端口",
"labelEn": "Web Management Port",
"required": true,
"default": 8080,
"rule": "paramPort",
"envKey": "PANEL_APP_PORT_HTTP"
},
{
"type": "number",
"labelZh": "服务端客户端通信端口",
"labelEn": "Server-Client Communication Port",
"required": true,
"default": 8024,
"rule": "paramPort",
"envKey": "NPS_BRIDGE_PORT"
},
{
"type": "text",
"labelZh": "外部访问地址(若默认地址请替换localhost为当前服务IP)",
"labelEn": "External URL(If the default address, please replace localhost with the current service IP)",
"required": true,
"default": "http://localhost:8080",
"rule": "paramExtUrl",
"envKey": "NPS_WEB_HOST",
"edit": true
},
{
"type": "text",
"labelZh": "web界面管理账号",
"labelEn": "Web Interface Management Account",
"required": true,
"default": "admin",
"random": true,
"rule": "paramCommon",
"envKey": "NPS_WEB_USERNAME"
},
{
"type": "password",
"labelZh": "web界面管理密码",
"labelEn": "Web Interface Management Password",
"required": true,
"default": "123",
"random": true,
"rule": "paramComplexity",
"envKey": "NPS_WEB_PASSWORD"
},
{
"type": "text",
"labelZh": "开启Https访问",
"labelEn": "Enable Https Access",
"required": true,
"default": "false",
"rule": "paramCommon",
"envKey": "NPS_WEB_OPEN_SSL"
},
{
"type": "number",
"labelZh": "动态端口范围开始",
"labelEn": "Dynamic Port Range Start",
"required": true,
"default": 20100,
"rule": "paramPort",
"envKey": "NPS_RANDOM_PORT_START"
},
{
"type": "number",
"labelZh": "动态端口范围结束",
"labelEn": "Dynamic Port Range End",
"required": true,
"default": 20200,
"rule": "paramPort",
"envKey": "NPS_RANDOM_PORT_END"
},
{
"type": "text",
"labelZh": "客户端以配置文件模式启动时的密钥",
"labelEn": "Key When the Client Starts in Configuration File Mode",
"required": true,
"default": "123",
"rule": "paramCommon",
"envKey": "NPS_PUBLIC_VKEY"
},
{
"type": "text",
"labelZh": "16位aes加密密钥",
"labelEn": "16-bit AES Encryption Key",
"required": true,
"default": "1234567812345678",
"rule": "paramCommon",
"envKey": "NPS_AUTH_CRYPT_KEY"
},
{
"type": "text",
"labelZh": "域名代理http代理监听地址",
"labelEn": "Http Proxy IP",
"required": false,
"default": "0.0.0.0",
"rule": "paramCommon",
"envKey": "NPS_HTTP_PROXY_IP"
},
{
"type": "number",
"labelZh": "域名代理http代理监听端口",
"labelEn": "Http Proxy Port",
"required": false,
"default": 20080,
"rule": "paramPort",
"envKey": "NPS_HTTP_PROXY_PORT"
},
{
"type": "number",
"labelZh": "域名代理https代理监听端口",
"labelEn": "Https Proxy Port",
"required": false,
"default": 20443,
"rule": "paramPort",
"envKey": "NPS_HTTPS_PROXY_PORT"
}
]
}

View File

@ -0,0 +1,34 @@
version: "3"
services:
nps:
image: ffdfgdfg/nps:v0.26.10
container_name: ${CONTAINER_NAME}
ports:
- ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}
- ${NPS_BRIDGE_PORT}:${NPS_BRIDGE_PORT}
- ${NPS_HTTP_PROXY_PORT}:${NPS_HTTP_PROXY_PORT}
- ${NPS_HTTPS_PROXY_PORT}:${NPS_HTTPS_PROXY_PORT}
- ${NPS_RANDOM_PORT_START}-${NPS_RANDOM_PORT_END}:${NPS_RANDOM_PORT_START}-${NPS_RANDOM_PORT_END}
restart: always
volumes:
- ./conf:/conf
environment:
NPS_WEB_HOST: ${NPS_WEB_HOST}
NPS_WEB_PORT: ${PANEL_APP_PORT_HTTP}
NPS_WEB_USERNAME: ${NPS_WEB_USERNAME}
NPS_WEB_PASSWORD: ${NPS_WEB_PASSWORD}
NPS_WEB_OPEN_SSL: ${NPS_WEB_OPEN_SSL}
NPS_PUBLIC_VKEY: ${NPS_PUBLIC_VKEY}
NPS_BRIDGE_PORT: ${NPS_BRIDGE_PORT}
NPS_AUTH_CRYPT_KEY: ${NPS_AUTH_CRYPT_KEY}
NPS_HTTP_PROXY_IP: ${NPS_HTTP_PROXY_IP}
NPS_HTTP_PROXY_PORT: ${NPS_HTTP_PROXY_PORT}
NPS_HTTPS_PROXY_PORT: ${NPS_HTTPS_PROXY_PORT}
networks:
- 1panel-network
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true